อิมเมจนักเทียบท่าไม่เปลี่ยนรูป เมื่อสร้างแล้วจะไม่เปลี่ยนแปลง สิ่งนี้ทำให้มั่นใจได้ถึงความสม่ำเสมอ การคาดการณ์ได้ และความเสถียร คอนเทนเนอร์ทุกตัวที่สร้างจากอิมเมจเดียวกันจะทำงานเหมือนกัน และการกำหนดเวอร์ชันจะปลอดภัยและง่ายดาย แต่ถ้าคุณต้องการปรับแต่งบางอย่างภายในคอนเทนเนอร์ที่ทำงานอยู่ เช่น การติดตั้งแพ็คเกจหรืออัปเดตการกำหนดค่าล่ะ นั่นคือที่มาของ docker commit ซึ่งช่วยให้คุณบันทึกการเปลี่ยนแปลงในคอนเทนเนอร์ที่กำลังรันอยู่ และสร้างอิมเมจใหม่โดยไม่ต้องแตะต้นฉบับ ซึ่งเหมาะสำหรับการทดสอบการแก้ไข ทำซ้ำอย่างรวดเร็ว และเปิดตัวอิมเมจที่กำหนดเองโดยไม่ต้องสร้างใหม่ตั้งแต่ต้น
สารบัญ
เหตุใดรูปภาพ Docker จึงไม่เปลี่ยนแปลง
รูปภาพนักเทียบท่าประกอบด้วยเลเยอร์แบบอ่านอย่างเดียวหลายเลเยอร์ เมื่อคุณเรียกใช้คอนเทนเนอร์ Docker จะเพิ่มเลเยอร์บางๆ ที่เขียนได้ด้านบนเรียกว่าเลเยอร์คอนเทนเนอร์ การเปลี่ยนแปลงใด ๆ ที่คุณทำจะเกิดขึ้นเฉพาะในเลเยอร์บนสุดนี้เท่านั้น เมื่อคอนเทนเนอร์ถูกลบ การเปลี่ยนแปลงทั้งหมดในเลเยอร์นั้นจะหายไป โดยไม่เปลี่ยนแปลงรูปภาพต้นฉบับ
การออกแบบนี้รับประกันข้อดีหลายประการ:
- ทุกคอนเทนเนอร์จากรูปภาพเดียวกันจะมีพฤติกรรมเหมือนกัน จึงรับประกันความสอดคล้อง
- การเปลี่ยนแปลงในคอนเทนเนอร์หนึ่งจะไม่ส่งผลกระทบต่อคอนเทนเนอร์อื่น ทำให้สามารถคาดการณ์ได้
- คุณสามารถแท็กเวอร์ชันรูปภาพที่ต้องการได้อย่างปลอดภัยโดยไม่มีความเสี่ยง
การออกแบบนี้ให้ความเสถียรที่ยอดเยี่ยม แต่จะจำกัดคุณเมื่อคุณต้องการเปลี่ยนแปลงคอนเทนเนอร์ที่ทำงานอยู่อย่างรวดเร็ว นั่นคือสิ่งที่ 00 ช่วยได้ ป>
สร้างภาพใหม่จากคอนเทนเนอร์ที่ทำงานอยู่
เมื่อคุณเรียกใช้ 18 คำสั่ง Docker จะจับสถานะปัจจุบันของคอนเทนเนอร์ที่ทำงานอยู่และสร้างอิมเมจใหม่จากคอนเทนเนอร์นั้น โดยจะบันทึกสแนปชอตของระบบไฟล์ของคอนเทนเนอร์ บันทึกการเปลี่ยนแปลงใดๆ ที่คุณทำ เช่น แพ็คเกจที่ติดตั้ง การกำหนดค่าที่อัปเดต หรือไฟล์ที่แก้ไข เป็นเลเยอร์รูปภาพใหม่ ด้วยวิธีนี้ ภาพต้นฉบับจะยังคงไม่มีการเปลี่ยนแปลงใดๆ ทำให้คุณทดลองและทำซ้ำได้อย่างรวดเร็ว
ทำให้เหมาะอย่างยิ่งสำหรับการบันทึกการตั้งค่าฐานแบบกำหนดเองสำหรับการใช้ซ้ำในอนาคต ใช้การแก้ไขเล็กน้อยหรือการเปลี่ยนแปลงการกำหนดค่าในระหว่างการทดสอบ หรือการแชร์ภาพที่อัปเดตกับทีมของคุณโดยไม่ต้องสร้าง Dockerfile ใหม่ตั้งแต่ต้น
คุณสามารถใช้ 25 คำสั่งที่มีไวยากรณ์ต่อไปนี้เพื่อสร้างภาพใหม่จากคอนเทนเนอร์ที่ทำงานอยู่:
docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE_NAME[:TAG]
ที่นี่ 31 คือ ID หรือชื่อของคอนเทนเนอร์ที่คุณต้องการบันทึก 45 คือชื่อที่คุณต้องการสำหรับรูปภาพใหม่และ 57 เป็นทางเลือก โดยค่าเริ่มต้นจะเป็นค่าล่าสุด
หมายเหตุ: 60รหัส> เป็นนามแฝงเดิมสำหรับ 76; ทั้งสองเหมือนกัน
80รหัส> command มีตัวเลือกมากมายที่ให้คุณเพิ่มข้อมูลเมตา ใช้การเปลี่ยนแปลงการกำหนดค่า และควบคุมวิธีการทำงานของกระบวนการคอมมิต ตารางด้านล่างสรุปตัวเลือกที่รองรับทั้งหมด:
97 -c–changeใช้คำสั่ง Dockerfile เช่น ENV, LABEL หรือ CMD กับอิมเมจใหม่108 -m–messageเพิ่มข้อความสั้นที่อธิบายการเปลี่ยนแปลงที่เกิดขึ้นในภาพ113 -p–pauseหยุดคอนเทนเนอร์ชั่วคราวในระหว่างการคอมมิตเพื่อให้แน่ใจว่ามีความสอดคล้องกัน (ค่าเริ่มต้น:จริง)121 ดูว่านักเทียบท่าคอมมิตทำงานอย่างไร
สมมติว่าคุณต้องการติดตั้ง curl ในคอนเทนเนอร์ Alpine โดยไม่ต้องสร้าง Dockerfile ขึ้นมาใหม่ เมื่อต้องการทำเช่นนี้ ให้เรียกใช้คอนเทนเนอร์จากอิมเมจฐาน:
docker run -it alpine:latest /bin/sh เมื่อคุณอยู่ในคอนเทนเนอร์แล้ว ให้ทำการเปลี่ยนแปลงที่จำเป็น:
apk update && apk add curl
ตอนนี้ออกจากคอนเทนเนอร์:
exit หลังจากนี้ ให้คอมมิตคอนเทนเนอร์เป็นอิมเมจใหม่:
docker commit alpine-with-curl:1.0
ยืนยันภาพใหม่ของคุณ:
docker images ตอนนี้ คุณมีอิมเมจใหม่ที่พร้อมจะทำงานได้ทุกที่ โดยติดตั้ง Curl ไว้ล่วงหน้าแล้ว
เรียกใช้ภาพใหม่ของคุณเพื่อทดสอบการเปลี่ยนแปลงที่บันทึกไว้
หลังจากสร้างอิมเมจใหม่แล้ว คุณสามารถเรียกใช้คอนเทนเนอร์จากอิมเมจนั้นเพื่อยืนยันว่าการเปลี่ยนแปลงของคุณได้รับการบันทึกแล้ว
docker run -it alpine-with-curl:1.0 /bin/sh
คำสั่งนี้เปิดเชลล์แบบโต้ตอบภายในคอนเทนเนอร์ตาม 130 รูปภาพ เมื่อเข้าไปข้างในแล้ว คุณจะสามารถตรวจสอบได้ว่าการแก้ไขของคุณไม่เสียหาย
curl --version นี่แสดงให้เห็นว่ามีการเปลี่ยนแปลงยังคงอยู่ในรูปภาพใหม่
นักเทียบท่ากระทำกับ Dockerfile:เมื่อใดควรใช้อันไหน
ทั้ง Dockerfile และ Docker Commit ให้คุณสร้างอิมเมจ Docker ได้ แต่ทั้งสองทำงานในรูปแบบที่แตกต่างกันมากและเหมาะกับสถานการณ์ที่แตกต่างกัน
Dockerfile เป็นตัวเลือกที่ดีที่สุดเมื่อคุณต้องการบิลด์ที่เชื่อถือได้และทำซ้ำได้ โดยเฉพาะอย่างยิ่งสำหรับไปป์ไลน์ CI/CD และสภาพแวดล้อมการใช้งานจริง มันเก็บการเปลี่ยนแปลงทั้งหมดที่กำหนดไว้อย่างชัดเจนในโค้ด ทำให้ง่ายต่อการติดตาม ตรวจสอบ และควบคุมเวอร์ชันเมื่อเวลาผ่านไป แนวทางนี้ช่วยให้แน่ใจว่าใครก็ตามที่สร้างอิมเมจในภายหลังจะได้รับผลลัพธ์เดียวกัน ซึ่งเป็นสิ่งสำคัญสำหรับการบำรุงรักษาในระยะยาวและการทำงานร่วมกันเป็นทีม
ในทางกลับกัน 149 ทำงานได้ดีสำหรับการแก้ไขอย่างรวดเร็ว การทดสอบ หรือการปรับเปลี่ยนเล็กๆ น้อยๆ ที่คุณต้องการลองโดยไม่ต้องเขียนใหม่หรือสร้าง Dockerfile ใหม่ทั้งหมด ซึ่งจะมีประโยชน์เมื่อคุณกำลังทดลอง ดีบัก หรือตรวจสอบการเปลี่ยนแปลงได้ทันที อย่างไรก็ตาม เนื่องจากการเปลี่ยนแปลงไม่ได้รับการบันทึกไว้ในไฟล์ วิธีการนี้จึงเหมาะสำหรับการใช้งานในระยะสั้นมากกว่าการใช้งานจริง
โดยสรุป คุณสามารถใช้ 152 ได้ สำหรับการทดลองหรือการแก้ไขชั่วคราวเป็นหลัก สำหรับอิมเมจที่พร้อมในการผลิต ควรใช้ Dockerfile เสมอ เพื่อให้ได้รับประโยชน์สูงสุดจาก Docker คุณควรสำรวจคำสั่งหลักอื่นๆ ที่ทำให้การทำงานกับคอนเทนเนอร์ รูปภาพ และเวิร์กโฟลว์ง่ายขึ้น