World

วิธีใช้ Docker Cp เพื่อคัดลอกไฟล์ระหว่างโฮสต์และคอนเทนเนอร์


ส.ค. 27, 2021, 7:30 น. EDT | อ่าน 4 นาที

ต้องการรับไฟล์บางไฟล์เข้าหรือออกจาก Docker คอนเทนเนอร์? คำสั่ง

docker cp

 ช่วยให้ คุณคัดลอกระหว่างระบบไฟล์โฮสต์และคอนเทนเนอร์ เพื่อให้คุณสามารถเพิ่มรายละเอียดการกำหนดค่า สร้างการสำรองข้อมูล และกู้คืนข้อมูลที่มีอยู่  

ไวยากรณ์พื้นฐาน

docker cp

 ยอมรับเส้นทางต้นทางและปลายทางเป็นสองเส้นทาง อาร์กิวเมนต์: 

 ตัวอย่าง docker cp txt my-container:/example.txt

ที่นี่

example.txt

 กำลังถูกคัดลอกจากไดเร็กทอรีการทำงานของคุณไปยัง /example.txt ใน คอนเทนเนอร์ของฉัน 
  คุณสามารถย้อนกลับอาร์กิวเมนต์ทั้งสองเพื่อคัดลอก 

/example.txt
 ออกจากคอนเทนเนอร์และไปยังไดเร็กทอรีการทำงานของคุณ  

อาร์กิวเมนต์ที่อ้างอิงพาธคอนเทนเนอร์จะต้องนำหน้าด้วย ID คอนเทนเนอร์หรือชื่อตามด้วยโคลอน (

:

). คุณสามารถค้นหา ID หรือชื่อของคอนเทนเนอร์ที่ทำงานอยู่ด้วย

docker ps

.

แต่ละ docker cp

 คำสั่งต้องการหนึ่งเส้นทางระบบไฟล์ในเครื่องและหนึ่งเส้นทางคอนเทนเนอร์ - คุณทำได้' คัดลอกโดยตรงระหว่างสองคอนเทนเนอร์  ใช้โพรซีเดอร์แบบหลายขั้นตอน หากคุณต้องการทำสิ่งนี้ ให้คัดลอกจากคอนเทนเนอร์ต้นทางไปยังระบบไฟล์ของคุณก่อน จากนั้นจึงคัดลอกจากโลคัลพาธใหม่ไปยังคอนเทนเนอร์เป้าหมาย 
  • กำลังคัดลอกไดเรกทอรีทั้งหมด
  • นักเทียบท่า cp สามารถคัดลอกไดเร็กทอรีแบบเรียกซ้ำได้เช่นกัน:

    docker cp /home/demo/website apache-container:/var/www/html/.

    Docker จะคัดลอกทุกอย่างใน

    /home/demo/website และโอนเข้า

    /var/www/html.

  • พฤติกรรมการคัดลอก

    เมื่อคุณคัดลอกไฟล์ Docker จะสร้างไฟล์ใหม่ที่ปลายทางหากยังไม่มีอยู่ ไฟล์ที่มีอยู่จะถูกเขียนทับด้วยเนื้อหาใหม่ เมื่อไดเร็กทอรีปลายทางเป็นไดเร็กทอรี ไฟล์จะถูกคัดลอกลงในไดเร็กทอรีโดยใช้ชื่อไฟล์ต้นทาง ข้อยกเว้นคือเมื่อปลายทางที่ระบุลงท้ายด้วย

    / หมายถึงไดเร็กทอรี แต่ไม่มีเส้นทางอยู่แล้ว ในสถานการณ์สมมตินี้ จะเกิดข้อผิดพลาด

    กระบวนการนี้ซับซ้อนกว่าเล็กน้อยสำหรับการคัดลอกไดเรกทอรี ไดเร็กทอรีใหม่จะถูกสร้างขึ้นที่ปลายทางโดยมีเนื้อหาของไดเร็กทอรีต้นทาง ถ้าเส้นทางปลายทางไม่มีอยู่แล้ว เมื่อมีอยู่ ลักษณะการทำงานจะแตกต่างกันไปขึ้นอยู่กับว่าคุณได้รวมส่วนท้าย

    /.

    องค์ประกอบในเส้นทาง

    /.

     มีอยู่ - แหล่งที่มา ไดเร็กทอรี ถูกคัดลอกไปยังไดเร็กทอรีปลายทางที่มีอยู่ 

  • /.
     ไม่มี – The เนื้อหา ของไดเรกทอรีต้นทางถูกคัดลอกไปยังปลายทาง 

  • ความละเอียดอ่อน ความแตกต่างกำหนดว่าจะสร้างไดเร็กทอรีย่อยใหม่หรือไม่ ภายในปลายทาง

    ข้อจำกัดของคำสั่ง

    แม้จะมีชื่อ docker cp

     ไม่ใช่การใช้งานที่สมบูรณ์ของ cp
     คำสั่งเชลล์  แฟล็ก 

    cp
     ไม่ใช่ รองรับยกเว้น 

    -a

    และ

    -L

    :  
    • -NS

    – โหมดเก็บถาวรซึ่ง รักษารายละเอียดผู้ใช้และกลุ่มในไฟล์ที่คัดลอก

  • -L – ติดตาม symlink ในไดเรกทอรีต้นทางไปยัง คัดลอกเนื้อหาของลิงก์เป้าหมาย แทนที่จะเป็นลิงก์เอง 

    สำหรับกรณีการใช้งานขั้นสูงที่การเลือกคัดลอก จำเป็น คุณจะต้องใช้ทางเลือกอื่นแทน

    การใช้ Bind Mounts เพื่อคัดลอกไฟล์

    ปริมาณ Docker ให้ วิธีอื่นในการย้ายไฟล์ระหว่างคอนเทนเนอร์และโฮสต์ของคุณ ผูกการติดตั้งโลคัลไดเร็กทอรีลงในคอนเทนเนอร์ ช่วยให้คุณเข้าถึงเนื้อหาจากระบบไฟล์โฮสต์ของคุณ โดยไม่จำเป็นต้องใช้

    docker cp.
     docker run -v /example/host/directory:/container/path my-image:latest

    เนื้อหาของ

    /example/host/directory เส้นทางถูกเมาท์ในระบบไฟล์ของคอนเทนเนอร์ที่

    /container/path
    .  คุณสามารถโต้ตอบกับไฟล์เหล่านี้นอก Docker โดยใช้เครื่องมือที่คุ้นเคย เช่น 

    cp,

    rsync
     

    และเบราว์เซอร์ไฟล์กราฟิกของคุณ

    เทคนิคนี้มีประโยชน์เฉพาะเมื่อคุณทำงานกับไดเร็กทอรีคอนเทนเนอร์เดียว มันทำงานได้ไม่ดีเมื่อคุณคัดลอกจากตำแหน่งที่กำหนดเอง เนื่องจากคุณจำเป็นต้องทราบเส้นทางที่คุณจะใช้ล่วงหน้าเมื่อสร้างคอนเทนเนอร์

    คุณควรระวังการอนุญาตระบบไฟล์ด้วย: ไฟล์ที่สร้างภายในคอนเทนเนอร์มักจะเป็นเจ้าของโดยรูท

    .  สิ่งนี้สามารถสร้างสถานการณ์ที่น่าอึดอัดใจบนโฮสต์ที่คุณไม่สามารถแก้ไขหรือลบไฟล์ภายในไดเร็กทอรีที่ถูกผูกไว้  ใช้คำสั่ง 

    chown
     บน โฮสต์และภายในคอนเทนเนอร์เพื่อสลับความเป็นเจ้าของขึ้นอยู่กับสภาพแวดล้อมหากจำเป็น 
    เกี่ยวกับอะไร COPY
     ใน Dockerfiles?

     นักเทียบท่า cp

    บางครั้งอาจสับสนกับ

    COPY คำแนะนำใน Dockerfiles สิ่งสำคัญคือต้องตระหนักว่าคุณสมบัติทั้งสองนี้รองรับกรณีการใช้งานที่แตกต่างกันมาก

    COPY

     ไม่สามารถใช้เพื่อย้ายไฟล์ระหว่างโฮสต์และคอนเทนเนอร์ที่ทำงานอยู่  ใช้สำหรับรับไฟล์เข้า  ภาพ  ระหว่างกระบวนการสร้าง: 

    COPY /home/me/my-website /var/www/html/.

    ซอร์สโค้ดของเว็บไซต์ที่นี่ถูกคัดลอกลงในรูปภาพซึ่งเป็นส่วนหนึ่งของบิลด์ นี่เป็นกระบวนการแบบครั้งเดียว ทุกคอนเทนเนอร์ที่เริ่มต้นจากอิมเมจจะรวมที่มาของเว็บไซต์เหมือนตอนที่คุณรัน

    docker build.

    docker cp

     ให้คุณแทนที่ซอร์สโค้ดนั้นด้วยเวอร์ชันที่ใหม่กว่าเมื่อคอนเทนเนอร์เป็น วิ่ง.  COPY
     คำแนะนำสำหรับการทำ ไฟล์ส่วนหนึ่งของภาพนิ่ง  cp
     คำสั่งโต้ตอบกับ live ตู้คอนเทนเนอร์  

    เมื่อใดควรคัดลอกไฟล์ด้วย Docker

    การคัดลอกไฟล์ด้วยตนเองจากโฮสต์ของคุณไปยังคอนเทนเนอร์ Docker หรือในทางกลับกัน น่าจะเป็นเหตุการณ์ที่ค่อนข้างหายาก รูปภาพมีไว้เพื่อให้พอเพียง ดังนั้นควรมาพร้อมกับทุกสิ่งที่คุณต้องการเพื่อเริ่มต้นอินสแตนซ์ การกำหนดค่ามักจะได้รับการจัดการผ่านตัวแปรสภาพแวดล้อม

    คอนเทนเนอร์ที่จำเป็นต้องจัดเก็บข้อมูลอย่างต่อเนื่องควรใช้โวลุ่ม Docker ไดรฟ์ข้อมูลช่วยให้ข้อมูลมีอายุยืนกว่าคอนเทนเนอร์เดียว คุณจึงไม่ต้องดำเนินการด้วยตนเอง

  • docker cp

     ก่อนแทนที่อินสแตนซ์  เมื่อคุณทำการสำรองข้อมูล ให้คัดลอกโวลุ่มจากโฮสต์ของคุณ แทนที่จะดึงไฟล์ออกจากคอนเทนเนอร์ 

    docker cp

     มีประโยชน์มากที่สุดเมื่อทำการดีบักคอนเทนเนอร์หรือทำงานใน สภาพแวดล้อมการพัฒนา  บางครั้งคุณจำเป็นต้องฉีดไฟล์กำหนดค่าชั่วคราวด้วยตนเองหรือดึงบันทึกที่ฝังไว้  การใช้ 

    docker cp

    เร็วขึ้น และสะดวกกว่าการสร้างใหม่ทั้งภาพทุกครั้งที่คุณเปลี่ยนรหัส

    โปรดจำไว้เสมอว่าไฟล์ที่คัดลอกมา เข้าไปข้างใน คอนเทนเนอร์จะคงอยู่ตราบเท่าที่คอนเทนเนอร์ยังมีชีวิต การเริ่มคอนเทนเนอร์อื่นจากอิมเมจเดียวกันจะทำให้คุณมีกระดานชนวนที่สะอาดตา โดยไม่มีไฟล์ที่คุณเพิ่มด้วย

    docker cp. สรุป

    นักเทียบท่า cp ให้คุณย้ายไฟล์ระหว่างโฮสต์และคอนเทนเนอร์ Docker ของคุณ ใช้งานได้กับไฟล์และไดเร็กทอรี แต่ไม่มีฟังก์ชันขั้นสูงส่วนใหญ่ในเชลล์

    cp

    คำสั่ง

    การใช้งานปกติของ

    docker cp

     บ่งชี้ถึงการออกจากแนวปฏิบัติที่ดีที่สุดของคอนเทนเนอร์  ถือว่าเป็นการดีที่จะถือว่าเครื่องมือนี้เป็นเครื่องมืออำนวยความสะดวกสำหรับการพัฒนา แทนที่จะเป็นส่วนสำคัญของการทำงานกับคอนเทนเนอร์  การคงอยู่ของไฟล์ในระยะยาวควรใช้กับโวลุ่ม เนื่องจากสิ่งเหล่านี้เป็นส่วนประกอบชั้นหนึ่งในระบบนิเวศของ Docker    
  • บ้าน

  • ธุรกิจ
  • การดูแลสุขภาพ

  • ไลฟ์สไตล์

  • เทค

    โลก

  • อาหาร

  • เกม
  • การท่องเที่ยว
  • Leave a Reply

    Your email address will not be published. Required fields are marked *

    Back to top button