เมื่อสร้าง 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คำสั่งอย่างชัดเจน
หางของบันทึกเอกสารอย่างเป็นทางการที่ควรจะเป็นไปเพื่อการเรียนการสอนในขณะที่มันมีความโปร่งใสมากกว่าCOPYADD
COPYหากคุณต้องการที่จะคัดลอกมาจากการสร้างบริบทของท้องถิ่นลงในภาชนะติดกับการใช้
ทีมนักเทียบท่ายังไม่สนับสนุนอย่างยิ่งADDในการดาวน์โหลดและคัดลอกแพ็คเกจจาก URL แต่จะปลอดภัยกว่าและมีประสิทธิภาพมากกว่าในการใช้ wget หรือ curl ภายในRUNคำสั่ง คุณหลีกเลี่ยงการสร้างเลเยอร์ภาพเพิ่มเติมและประหยัดพื้นที่