เนื่องจากคอนเทนเนอร์ Docker เป็นกล่องซอฟต์แวร์เล็กๆ คุณจึงสามารถคัดลอกและย้ายจากคอมพิวเตอร์หนึ่งไปยังอีกเครื่องหนึ่งได้ อย่างไรก็ตาม เรื่องนี้ไม่ได้มีการพูดคุยกันบ่อยนัก อาจเป็นเพราะองค์กรขนาดใหญ่ตั้งค่าที่เก็บข้อมูลของตนเอง ซึ่งพวกเขาสามารถปรับแต่งภาพของตนเองและแจกจ่ายข้ามเซิร์ฟเวอร์ได้ตามที่เห็นสมควร แต่คุณไม่จำเป็นต้องประสบปัญหาในการตั้งค่าสายการจำหน่ายของคุณเอง หากจำเป็นต้องย้ายคอนเทนเนอร์อย่างน้อยหนึ่งรายการเป็นครั้งคราว
อาจเป็นไปได้ว่าคุณทำงานบนอินสแตนซ์ Docker บนคอมพิวเตอร์ของคุณ และตัดสินใจย้ายไปยังเซิร์ฟเวอร์ที่ทรงพลังกว่า หรือบางทีคุณเพียงแค่ต้องการปรับใช้คอนเทนเนอร์ที่กำหนดเองของคุณบนคอมพิวเตอร์หลายเครื่อง "คัดลอกและวาง" ไว้รอบๆ บางครั้งคุณอาจไม่พอใจผู้ให้บริการคอมพิวเตอร์คลาวด์และต้องการเปลี่ยนไปใช้ผู้ให้บริการรายอื่น ไม่ว่าสถานการณ์จะเป็นอย่างไร มีขั้นตอนที่ค่อนข้างง่ายในการทำเช่นนี้ซึ่งมีรายละเอียดด้านล่าง
บันทึกอิมเมจคอนเทนเนอร์จากโฮสต์ต้นทาง
ไม่จำเป็นต้องหยุดคอนเทนเนอร์ก่อน แต่ขอแนะนำอย่างยิ่งให้คุณทำเช่นนั้น คุณจะถ่ายภาพสแน็ปช็อตของข้อมูลในอินสแตนซ์ Docker ของคุณ หากทำงานในขณะที่คุณทำเช่นนี้ มีโอกาสเล็กน้อยที่ไฟล์บางไฟล์อาจไม่สมบูรณ์ในสแนปชอตของคุณ ลองนึกภาพใครบางคนกำลังอัปโหลดไฟล์ 500MB เมื่ออัปโหลด 250MB คุณจะออก docker commit
สั่งการ. การอัปโหลดจะดำเนินต่อไป แต่เมื่อคุณกู้คืนอิมเมจ Docker นี้บนโฮสต์อื่น อาจมีเพียง 250MB จาก 500MB เท่านั้นที่ใช้งานได้
ดังนั้น หากทำได้ ให้หยุดอินสแตนซ์ก่อน
docker stop NAME_OF_INSTANCE
คอนเทนเนอร์ Docker สร้างขึ้นจากอิมเมจเริ่มต้นทั่วไป เมื่อเวลาผ่านไป คุณจะเพิ่มการเปลี่ยนแปลงของคุณเองลงในภาพฐานนี้ กระบวนการที่ทำงานอยู่ภายในคอนเทนเนอร์อาจบันทึกข้อมูลของตนเองหรือทำการเปลี่ยนแปลงอื่นๆ เพื่อรักษาสิ่งนี้ไว้ คุณสามารถผูกสถานะใหม่นี้กับรูปภาพใหม่ได้
โปรดทราบว่าหากอินสแตนซ์กำลังทำงานอยู่ การดำเนินการนี้จะหยุดชั่วคราวในขณะที่บันทึกเนื้อหา หากคุณเพิ่มข้อมูลจำนวนมากลงในคอนเทนเนอร์ การดำเนินการนี้จะใช้เวลานานขึ้นกว่าจะเสร็จสมบูรณ์ หากเป็นปัญหา คุณสามารถหลีกเลี่ยงการหยุดชั่วคราวได้โดยป้อน docker commit -p=false NAME_OF_INSTANCE mycontainerimage
แทนคำสั่งถัดไป อย่างไรก็ตาม อย่าทำเช่นนี้เว้นแต่จำเป็นจริงๆ โอกาสในการสร้างภาพที่ข้อมูลไม่สอดคล้อง/ไม่สมบูรณ์จะเพิ่มขึ้นในกรณีนี้
ในบทช่วยสอนนี้ มีการเลือกชื่อทั่วไปสำหรับรูปภาพที่ได้ mycontainerimage
. คุณสามารถเปลี่ยนชื่อนี้ได้หากต้องการ หากคุณทำเช่นนั้น อย่าลืมแทนที่มันในคำสั่งที่ตามมาทั้งหมดที่คุณพบมัน
docker commit NAME_OF_INSTANCE mycontainerimage
ตอนนี้ให้บันทึกรูปภาพนี้ลงในไฟล์แล้วบีบอัด
docker save mycontainerimage | gzip > mycontainerimage.tar.gz
ถัดไป ใช้วิธีการถ่ายโอนไฟล์ที่คุณต้องการและคัดลอก mycontainerimage.tar.gz
ไปยังโฮสต์ที่คุณต้องการย้ายคอนเทนเนอร์ของคุณ
โหลดอิมเมจคอนเทนเนอร์บนโฮสต์ปลายทาง
หลังจากที่คุณเข้าสู่ระบบโฮสต์ที่คุณโอนรูปภาพ ให้นำเข้าไปยัง Docker
gunzip -c mycontainerimage.tar.gz | docker load
เนื่องจากคุณไม่เคยเริ่มต้นคอนเทนเนอร์นี้ที่นี่ คุณจึงไม่สามารถเริ่มต้นด้วย docker start
ยัง. ให้ออกคำสั่งเดียวกันกับที่คุณใช้ในอดีต เมื่อคุณรันอินสแตนซ์ Docker นี้เป็นครั้งแรก ข้อแตกต่างเพียงอย่างเดียวในตอนนี้คือ คุณจะใช้ “mycontainerimage” ในตอนท้าย แทนที่จะเป็นรูปภาพใดๆ ที่คุณเคยใช้ในอดีต
คำสั่งต่อไปเป็นเพียงตัวอย่าง อย่าคัดลอกและวางสิ่งนี้เว้นแต่จะมีผลกับคุณ (ไม่จำเป็นต้องใช้พารามิเตอร์พิเศษเมื่อคุณเรียกใช้ภาพเป็นครั้งแรก)
docker run -d --name=PICK_NAME_FOR_CONTAINER mycontainerimage
ในทางตรงกันข้าม ต่อไปนี้เป็นตัวอย่างของคำสั่งที่พารามิเตอร์ --publish
จำเป็นต้องส่งต่อพอร์ต 80 บนเครื่องโฮสต์ไปยังพอร์ต 80 บนคอนเทนเนอร์:
docker run -d --name=http-server --publish 80:80 mycontainerimage
หลังจากนั้น คุณสามารถหยุดและเริ่มคอนเทนเนอร์นี้ได้ตามปกติ ด้วย docker stop
และ docker start
คำสั่ง
โอนภาพโดยไม่ต้องสร้างไฟล์
บางครั้งคุณอาจต้องการข้ามการสร้าง mycontainerimage.tar.gz
ไฟล์. บางทีคุณอาจไม่มีเนื้อที่ดิสก์เพียงพอเนื่องจากคอนเทนเนอร์มีข้อมูลจำนวนมาก คุณสามารถบันทึก บีบอัด ถ่ายโอน คลายการบีบอัด และโหลดรูปภาพบนโฮสต์ปลายทางได้ด้วยคำสั่งเดียว หลังจากรัน docker commit
คำสั่งที่กล่าวถึงในส่วนแรก คุณสามารถใช้สิ่งนี้:
docker save mycontainerimage | gzip | ssh [email protected] 'gunzip | docker load'
มันควรจะทำงานได้จาก Windows ด้วย เนื่องจากตอนนี้มีไคลเอนต์ SSH ในตัว (ไม่จำเป็นต้องใช้ PuTTY อีกต่อไป)
หลังจากนั้น ดำเนินการต่อด้วย docker run
คำสั่งที่ใช้กับสถานการณ์ของคุณ
บทสรุป
docker save
และ docker load
เหมาะอย่างยิ่งสำหรับการแก้ปัญหาเฉพาะกิจสำหรับการเคลื่อนย้ายตู้คอนเทนเนอร์เป็นครั้งคราว แต่อย่าลืมว่า หากคุณทำเช่นนี้บ่อยๆ คุณอาจต้องการตั้งค่าพื้นที่เก็บข้อมูลส่วนตัวแทน
เครดิตภาพ:กรมการแพทย์ทหารอากาศ