Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีคัดลอก/ย้ายคอนเทนเนอร์ Docker ไปยังโฮสต์อื่น

วิธีคัดลอก/ย้ายคอนเทนเนอร์ Docker ไปยังโฮสต์อื่น

เนื่องจากคอนเทนเนอร์ Docker เป็นกล่องซอฟต์แวร์เล็กๆ คุณจึงสามารถคัดลอกและย้ายจากคอมพิวเตอร์หนึ่งไปยังอีกเครื่องหนึ่งได้ อย่างไรก็ตาม เรื่องนี้ไม่ได้มีการพูดคุยกันบ่อยนัก อาจเป็นเพราะองค์กรขนาดใหญ่ตั้งค่าที่เก็บข้อมูลของตนเอง ซึ่งพวกเขาสามารถปรับแต่งภาพของตนเองและแจกจ่ายข้ามเซิร์ฟเวอร์ได้ตามที่เห็นสมควร แต่คุณไม่จำเป็นต้องประสบปัญหาในการตั้งค่าสายการจำหน่ายของคุณเอง หากจำเป็นต้องย้ายคอนเทนเนอร์อย่างน้อยหนึ่งรายการเป็นครั้งคราว

อาจเป็นไปได้ว่าคุณทำงานบนอินสแตนซ์ Docker บนคอมพิวเตอร์ของคุณ และตัดสินใจย้ายไปยังเซิร์ฟเวอร์ที่ทรงพลังกว่า หรือบางทีคุณเพียงแค่ต้องการปรับใช้คอนเทนเนอร์ที่กำหนดเองของคุณบนคอมพิวเตอร์หลายเครื่อง "คัดลอกและวาง" ไว้รอบๆ บางครั้งคุณอาจไม่พอใจผู้ให้บริการคอมพิวเตอร์คลาวด์และต้องการเปลี่ยนไปใช้ผู้ให้บริการรายอื่น ไม่ว่าสถานการณ์จะเป็นอย่างไร มีขั้นตอนที่ค่อนข้างง่ายในการทำเช่นนี้ซึ่งมีรายละเอียดด้านล่าง

บันทึกอิมเมจคอนเทนเนอร์จากโฮสต์ต้นทาง

ไม่จำเป็นต้องหยุดคอนเทนเนอร์ก่อน แต่ขอแนะนำอย่างยิ่งให้คุณทำเช่นนั้น คุณจะถ่ายภาพสแน็ปช็อตของข้อมูลในอินสแตนซ์ Docker ของคุณ หากทำงานในขณะที่คุณทำเช่นนี้ มีโอกาสเล็กน้อยที่ไฟล์บางไฟล์อาจไม่สมบูรณ์ในสแนปชอตของคุณ ลองนึกภาพใครบางคนกำลังอัปโหลดไฟล์ 500MB เมื่ออัปโหลด 250MB คุณจะออก docker commit สั่งการ. การอัปโหลดจะดำเนินต่อไป แต่เมื่อคุณกู้คืนอิมเมจ Docker นี้บนโฮสต์อื่น อาจมีเพียง 250MB จาก 500MB เท่านั้นที่ใช้งานได้

ดังนั้น หากทำได้ ให้หยุดอินสแตนซ์ก่อน

docker stop NAME_OF_INSTANCE
วิธีคัดลอก/ย้ายคอนเทนเนอร์ Docker ไปยังโฮสต์อื่น

คอนเทนเนอร์ Docker สร้างขึ้นจากอิมเมจเริ่มต้นทั่วไป เมื่อเวลาผ่านไป คุณจะเพิ่มการเปลี่ยนแปลงของคุณเองลงในภาพฐานนี้ กระบวนการที่ทำงานอยู่ภายในคอนเทนเนอร์อาจบันทึกข้อมูลของตนเองหรือทำการเปลี่ยนแปลงอื่นๆ เพื่อรักษาสิ่งนี้ไว้ คุณสามารถผูกสถานะใหม่นี้กับรูปภาพใหม่ได้

โปรดทราบว่าหากอินสแตนซ์กำลังทำงานอยู่ การดำเนินการนี้จะหยุดชั่วคราวในขณะที่บันทึกเนื้อหา หากคุณเพิ่มข้อมูลจำนวนมากลงในคอนเทนเนอร์ การดำเนินการนี้จะใช้เวลานานขึ้นกว่าจะเสร็จสมบูรณ์ หากเป็นปัญหา คุณสามารถหลีกเลี่ยงการหยุดชั่วคราวได้โดยป้อน docker commit -p=false NAME_OF_INSTANCE mycontainerimage แทนคำสั่งถัดไป อย่างไรก็ตาม อย่าทำเช่นนี้เว้นแต่จำเป็นจริงๆ โอกาสในการสร้างภาพที่ข้อมูลไม่สอดคล้อง/ไม่สมบูรณ์จะเพิ่มขึ้นในกรณีนี้

ในบทช่วยสอนนี้ มีการเลือกชื่อทั่วไปสำหรับรูปภาพที่ได้ mycontainerimage . คุณสามารถเปลี่ยนชื่อนี้ได้หากต้องการ หากคุณทำเช่นนั้น อย่าลืมแทนที่มันในคำสั่งที่ตามมาทั้งหมดที่คุณพบมัน

docker commit NAME_OF_INSTANCE mycontainerimage
วิธีคัดลอก/ย้ายคอนเทนเนอร์ Docker ไปยังโฮสต์อื่น

ตอนนี้ให้บันทึกรูปภาพนี้ลงในไฟล์แล้วบีบอัด

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 root@203.0.113.1 'gunzip | docker load'

มันควรจะทำงานได้จาก Windows ด้วย เนื่องจากตอนนี้มีไคลเอนต์ SSH ในตัว (ไม่จำเป็นต้องใช้ PuTTY อีกต่อไป)

หลังจากนั้น ดำเนินการต่อด้วย docker run คำสั่งที่ใช้กับสถานการณ์ของคุณ

บทสรุป

docker save และ docker load เหมาะอย่างยิ่งสำหรับการแก้ปัญหาเฉพาะกิจสำหรับการเคลื่อนย้ายตู้คอนเทนเนอร์เป็นครั้งคราว แต่อย่าลืมว่า หากคุณทำเช่นนี้บ่อยๆ คุณอาจต้องการตั้งค่าพื้นที่เก็บข้อมูลส่วนตัวแทน

เครดิตภาพ:กรมการแพทย์ทหารอากาศ