ฉันเล่นกับDockerสักสองสามวันแล้วฉันก็สร้างรูป (ซึ่งสนุกจริงๆ!) ตอนนี้ผมต้องการที่จะยังคงมีอยู่และการทำงานของฉันมาถึงsave
และexport
คำสั่ง แต่ผมไม่เข้าใจพวกเขา
ความแตกต่างระหว่างsave
และexport
ในนักเทียบท่าคืออะไร?
ฉันเล่นกับDockerสักสองสามวันแล้วฉันก็สร้างรูป (ซึ่งสนุกจริงๆ!) ตอนนี้ผมต้องการที่จะยังคงมีอยู่และการทำงานของฉันมาถึงsave
และexport
คำสั่ง แต่ผมไม่เข้าใจพวกเขา
ความแตกต่างระหว่างsave
และexport
ในนักเทียบท่าคืออะไร?
คำตอบ:
คำตอบสั้น ๆ คือ:
save
จะดึงรูปภาพ: สำหรับ VM หรือเซิร์ฟเวอร์จริงนั่นคือการติดตั้งอิมเมจหรือดิสก์ ISO ระบบปฏิบัติการพื้นฐาน
มันจะแพ็คเลเยอร์และเมตาดาต้าของห่วงโซ่ทั้งหมดที่จำเป็นในการสร้างภาพ จากนั้นคุณสามารถโหลดรูปภาพที่ "บันทึก" นี้ลงในอินสแตนซ์ของ Docker อื่นและสร้างคอนเทนเนอร์จากอิมเมจเหล่านี้
export
จะดึงข้อมูลคอนเทนเนอร์ทั้งหมด: เหมือนกับสแน็ปช็อตของ VM ปกติ บันทึกระบบปฏิบัติการแน่นอน แต่ยังมีการเปลี่ยนแปลงใด ๆ ที่คุณทำไฟล์ข้อมูลใด ๆ ที่เขียนในช่วงชีวิตของภาชนะ อันนี้เหมือนกับการสำรองข้อมูลแบบเดิม
มันจะให้ไฟล์. tar แบบแบนที่มีระบบไฟล์ของคอนเทนเนอร์ของคุณ
แก้ไข: เนื่องจากคำอธิบายของฉันอาจยังทำให้เกิดความสับสนฉันคิดว่ามันเป็นสิ่งสำคัญที่จะต้องเข้าใจว่าหนึ่งในคำสั่งเหล่านี้ทำงานกับคอนเทนเนอร์ในขณะที่คนอื่นทำงานกับรูปภาพ
ภาพจะต้องมีการพิจารณาว่าเป็น 'ตาย' หรือเปลี่ยนรูปเริ่มต้น 0 1000 หรือภาชนะบรรจุจากมันจะไม่เปลี่ยนแปลง byte เดียว นั่นเป็นเหตุผลที่ฉันทำการเปรียบเทียบกับระบบการติดตั้ง ISO ก่อนหน้านี้ มันอาจจะใกล้เคียงกับไลฟ์ซีดีมากขึ้น
ภาชนะ "รองเท้า" ภาพและเพิ่มชั้นด้านบนของมัน เลเยอร์นี้เก็บการเปลี่ยนแปลงใด ๆ บนคอนเทนเนอร์ (ไฟล์ที่สร้าง / เปลี่ยนแปลง / ลบ ... )
docker commit
) ฉันสามารถsave
ภาพ หรือฉันสามารถexport
คอนเทนเนอร์โดยตรง และทั้งสองวิธี ( save
รูปภาพและexport
คอนเทนเนอร์) จะมีผลลัพธ์เหมือนกันหรือไม่
export
จะทำให้คุณแบน .tar เก็บที่มีระบบแฟ้มภาชนะของคุณ save
จะแพ็คเลเยอร์และข้อมูลเมตาของห่วงโซ่ทั้งหมดที่จำเป็นในการสร้างภาพ จากนั้นคุณสามารถโหลดsaved
อิมเมจลูกโซ่นี้ลงในอินสแตนซ์ของ Docker อื่นและสร้างคอนเทนเนอร์จากรูปภาพเหล่านี้
export
ฟังก์ชั่นด้วย
export
ข้อมูลเมตาทั้งหมดจะหายไปดังนั้นในกรณีที่คุณพยายามเรียกใช้คอนเทนเนอร์ด้วยอิมเมจนั้นคุณได้ทำการอ้างอิง CMD และข้อมูลเมตาอื่น ๆ save
ทำงานได้ดีสำหรับฉัน แต่การส่งออกเป็นความเจ็บปวด
มีความแตกต่างที่สำคัญสองประการระหว่างsave
และexport
คำสั่ง
save
คำสั่งบันทึกภาพทั้งหมดที่มีประวัติและข้อมูลเมตา แต่export
คำสั่งส่งออกโครงสร้างไฟล์เท่านั้น (ไม่มีประวัติและข้อมูลเมตา) ดังนั้นไฟล์ tar ที่ส่งออกจะมีขนาดเล็กลงดังนั้นไฟล์ที่บันทึกไว้
เมื่อคุณใช้ระบบไฟล์ที่ส่งออกสำหรับการสร้างภาพใหม่แล้วภาพใหม่นี้จะไม่มีการใด ๆUSER
, EXPOSE
, RUN
ฯลฯ คำสั่งจาก Dockerfile ของคุณ โครงสร้างไฟล์เท่านั้นที่จะถูกถ่ายโอน ดังนั้นเมื่อคุณใช้คำหลักที่กล่าวถึงใน Dockerfile ของคุณคุณจะไม่สามารถใช้คำสั่งส่งออกสำหรับการถ่ายโอนภาพไปยังเครื่องอื่น - คุณต้องใช้คำสั่งบันทึก
รูปภาพที่ส่งออกจะไม่มีการบันทึกเลเยอร์หรือข้อมูลประวัติดังนั้นจะมีขนาดเล็กลงและคุณจะไม่สามารถย้อนกลับได้
รูปภาพที่บันทึกไว้จะมีข้อมูลเลเยอร์และประวัติใหญ่กว่า
หากให้สิ่งนี้กับลูกค้าคุณต้องการเก็บเลเยอร์เหล่านั้นหรือไม่?
ในทางเทคนิคการบันทึก / โหลดทำงานกับที่เก็บซึ่งสามารถเป็นหนึ่งหรือมากกว่าหนึ่งภาพหรือที่เรียกว่าเลเยอร์ รูปภาพเป็นเลเยอร์เดียวภายใน repo ในที่สุดภาชนะเป็นภาพที่ยกตัวอย่าง (ทำงานหรือไม่)
Docker saveสร้าง repo ไฟล์ tar ที่มีเลเยอร์พาเรนต์ทั้งหมดและแท็ก + เวอร์ชันทั้งหมดหรือ repo ที่ระบุ: แท็กสำหรับแต่ละอาร์กิวเมนต์ที่จัดเตรียมจากอิมเมจภาพ
การเอ็กซ์พอร์ตนักเทียบท่าสร้างไฟล์ที่ระบุ (สามารถเป็น tar หรือ tgz) ที่มีเนื้อหาแบบแฟลตโดยไม่มีเนื้อหาของวอลุ่มที่ระบุจากคอนเทนเนอร์ตู้คอนเทนเนอร์
ประหยัดนักเทียบท่าจำเป็นต้องใช้กับภาพนักเทียบท่าในขณะที่การส่งออกนักเทียบท่าจำเป็นต้องใช้ในภาชนะ (เช่นเดียวกับการเรียกใช้ภาพ)
บันทึกการใช้งาน
นักเทียบท่าบันทึก [ตัวเลือก] IMAGE [IMAGE ... ]
บันทึกภาพลงในไฟล์เก็บถาวร tar (สตรีมไปยัง STDOUT ตามค่าเริ่มต้น)
--help = false การใช้งานพิมพ์ -, - เอาท์พุท = "" เขียนไปยังไฟล์แทนที่จะเป็น STDOUT
ส่งออกการใช้งาน
ส่งออกนักเทียบท่า [OPTIONS] คอนเทนเนอร์
ส่งออกเนื้อหาของระบบไฟล์ของคอนเทนเนอร์เป็นไฟล์เก็บถาวร tar
--help = false การใช้งานพิมพ์ -, - เอาท์พุท = "" เขียนไปยังไฟล์แทนที่จะเป็น STDOUT
export
: ->container (filesystem)
: -> ชั้นเดียวเท่านั้นimage tar
import
exported image tar
image
save
: ->image
: -> เลเยอร์ทั้งหมดจะถูกกู้คืนimage tar
load
saved image tar
image
จากDocker in Action, Second Edition p190
อิมเมจแบบเลเยอร์รักษาประวัติของภาพเมทาดาทาการสร้างคอนเทนเนอร์และไฟล์เก่าที่อาจถูกลบหรือแทนที่
รูปภาพที่แบนจะมีเฉพาะชุดไฟล์ปัจจุบันบนระบบไฟล์