เมื่อสร้าง Dockerfile, มีสองคำสั่งที่คุณสามารถใช้เพื่อคัดลอกไฟล์ / ไดเรกทอรีเป็นมัน - และADD
COPY
แม้ว่าจะมีความแตกต่างกันเล็กน้อยในขอบเขตของฟังก์ชั่นของพวกเขาเป็นหลักพวกเขาปฏิบัติงานเดียวกัน
ดังนั้นทำไมเราจึงมีสองคำสั่งและเราจะรู้ได้อย่างไรว่าจะใช้หนึ่งหรืออีกอันเมื่อไหร่?
คำADD
สั่งDOCKER
เริ่มต้น Let 's โดยสังเกตว่าคำสั่งเก่ากว่าADD
COPY
ตั้งแต่เปิดตัวแพลตฟอร์ม Docker ADD
คำสั่งนี้เป็นส่วนหนึ่งของรายการคำสั่ง
คำสั่งคัดลอกไฟล์ / ไดเรกทอรีไปยังระบบไฟล์ของคอนเทนเนอร์ที่ระบุ
ไวยากรณ์พื้นฐานสำหรับADD
คำสั่งคือ:
ADD <src> … <dest>
ประกอบด้วยแหล่งที่คุณต้องการคัดลอก ( <src>
) ตามด้วยปลายทางที่คุณต้องการเก็บไว้ ( <dest>
) หากแหล่งที่มาเป็นไดเรกทอรีให้ADD
คัดลอกทุกอย่างที่อยู่ภายใน (รวมถึงข้อมูลเมตาของระบบไฟล์)
ตัวอย่างเช่นหากไฟล์พร้อมใช้งานแบบโลคัลและคุณต้องการเพิ่มลงในไดเร็กทอรีของอิมเมจคุณพิมพ์:
ADD /source/file/path /destination/path
ADD
ยังสามารถคัดลอกไฟล์จาก URL มันสามารถดาวน์โหลดไฟล์ภายนอกและคัดลอกไปยังปลายทางที่ต้องการ ตัวอย่างเช่น:
ADD http://source.file/url /destination/path
คุณสมบัติเพิ่มเติมคือมันจะคัดลอกไฟล์ที่บีบอัดโดยแยกเนื้อหาในปลายทางที่กำหนดโดยอัตโนมัติ คุณลักษณะนี้ใช้กับไฟล์ / ไดเรกทอรีที่บีบอัดที่เก็บไว้ในเครื่องเท่านั้น
ADD source.file.tar.gz /temp
โปรดจำไว้ว่าคุณไม่สามารถดาวน์โหลดและคลายบีบอัดไฟล์ / ไดเรกทอรีจาก URL ได้ คำสั่งไม่คลายแพ็กเกจภายนอกเมื่อคัดลอกไปยังระบบไฟล์โลคัล
คำCOPY
สั่งDOCKER
เนื่องจากปัญหาการทำงานบางส่วนหางมีที่จะแนะนำคำสั่งเพิ่มเติมสำหรับการทำซ้ำเนื้อหา COPY
-
แตกต่างจากADD
คำสั่งที่เกี่ยวข้องอย่างใกล้ชิดCOPY
มีเพียงหนึ่งฟังก์ชั่นที่ได้รับมอบหมาย บทบาทคือการทำซ้ำไฟล์ / ไดเรกทอรีในตำแหน่งที่ระบุในรูปแบบที่มีอยู่ ซึ่งหมายความว่าจะไม่จัดการกับการคลายบีบอัดไฟล์ แต่คัดลอกไฟล์ตามที่เป็นอยู่
คำแนะนำสามารถใช้สำหรับไฟล์ที่เก็บไว้ในเครื่องเท่านั้น ดังนั้นคุณไม่สามารถใช้กับ URL เพื่อคัดลอกไฟล์ภายนอกไปยังคอนเทนเนอร์ของคุณ
หากต้องการใช้COPY
คำแนะนำให้ปฏิบัติตามรูปแบบคำสั่งพื้นฐาน:
พิมพ์ในซอร์สและตำแหน่งที่คุณต้องการให้คำสั่งแตกเนื้อหาดังนี้:
COPY <src> … <dest>
ตัวอย่างเช่น:
COPY /source/file/path /destination/path
คำสั่งใดที่จะใช้ (แนวปฏิบัติที่ดีที่สุด)
เมื่อพิจารณาถึงสถานการณ์ที่COPY
คำสั่งได้รับการแนะนำก็เห็นได้ชัดว่าการรักษาADD
เป็นเรื่องจำเป็น นักเทียบท่าปล่อยเอกสารอย่างเป็นทางการที่สรุปแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียน Dockerfiles ซึ่งแนะนำให้ใช้กับADD
คำสั่งอย่างชัดเจน
หางของบันทึกเอกสารอย่างเป็นทางการที่ควรจะเป็นไปเพื่อการเรียนการสอนในขณะที่มันมีความโปร่งใสมากกว่าCOPY
ADD
COPY
หากคุณต้องการที่จะคัดลอกมาจากการสร้างบริบทของท้องถิ่นลงในภาชนะติดกับการใช้
ทีมนักเทียบท่ายังไม่สนับสนุนอย่างยิ่งADD
ในการดาวน์โหลดและคัดลอกแพ็คเกจจาก URL แต่จะปลอดภัยกว่าและมีประสิทธิภาพมากกว่าในการใช้ wget หรือ curl ภายในRUN
คำสั่ง คุณหลีกเลี่ยงการสร้างเลเยอร์ภาพเพิ่มเติมและประหยัดพื้นที่