ข้ามไปที่เนื้อหาหลัก

ย้าย Docker Container ข้าม Cloud Provider

ย้าย Docker Container ข้าม Cloud Provider

ปัญหาเรื่องการย้าย Application ข้าม Cloud Provider เป็นปัญหาปกติที่ต้องหาทางแก้ไข ซึ่งแต่ละ Cloud Provider มีช่องทางในการบริการที่ต่างกัน เทคโนโลยีต่างกัน เครื่องมือที่ใช้งานก็ต่างกัน เรียกได้ว่าถ้าจะย้าย instance จะทำได้ยากมาก ครั้งนี้จะให้แนวคิดเรื่องการย้าย Container จาก Cloud Provider ค่ายหนึ่งไปยังอีกค่ายหนึ่งหรือจาก Local ไปยัง Cloud Provider ก็ได้ ซึ่งทำได้หลายวิธี
จากภาพแนะนำการย้ายแบบง่ายๆ ผ่าน Docker อย่างเดียวไม่ได้ใช้เครื่องมือใดๆ เพิ่มเติม ถ้าจะให้สะดวกควรมี Orchestration Service อยู่ในแต่ละ Cloud Provider ด้วย ในเบื้องต้นทำความเข้าใจแบบง่ายๆ กันก่อน การทำ Migration ทำได้ 2 แบบ คือ
  1. Import / Export ไฟล์ Container ทั้งก้อนจาก Local ไปยัง Cloud วิธีนี้จะให้ความสะดวกมากกว่าแต่การสำรองข้อมูลและการย้ายไฟล์ Export จะช้าขึ้นอยู่กับความเร็วของเน็คเวิร์ก
  2. Push / Pull ให้ Commit Container State ปัจจุบันแล้ว push ขึ้น Docker Registry อาจจะเป็น Docker Hub (Private) หรือ Private Registry ที่ตั้งขึ้นเองก็ได้ จากนั้นค่อยสั่ง pull ไปยัง Cloud Provider ปลายทาง
สำหรับข้อมูลใน hipache ก็ต้องเปลี่ยนตาม เช่น จากเดิมอยู่ใน Local พอย้าย Container เสร็จจะต้องเปลี่ยน record ใน redis ชี้ไปที่ Container ที่อยู่บน Cloud จึงจะ route traffic ไปได้ถูกต้อง หากทำด้วยมือจะช้า ถ้าใช้ Orchestration Service จะเร็วและสะดวกกว่ามาก
วิธีที่ 1 แบบ Export / Import
สั่ง Export ก่อน
sudo docker export mynodeapp > mynodepp-latest.tar
จะได้ filesystem ของ container mynodeapp ในรูปแบบของไฟล์ tar จากนั้นย้ายไฟล์ไปยัง Cloud Provider ปลายทาง แล้วสั่ง Import
cat mynodepp-latest.tar | sudo docker import - mynodepp:version2
docker run -Pd mynodepp:version2
วิธีที่ 2 แบบ Push / Pull
สั่ง Commit State ของ Container ที่กำลังทำงานอยู่
docker commit mynodeapp mynodeapp:version2
สั่ง Tag และ push ไปยัง registry ปลายทาง
docker tag mynodeapp:version2 index.fffee.org/mynodeapp
docker push index.fffee.org/mynodeapp
สั่ง Pull เมื่อต้องการใช้งาน
docker run -Pd index.fffee.org/mynodeapp

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Docker ทำอะไรได้มากกว่า run container มาหาคำตอบกัน — Part 2

Homepage Upgrade จริงๆ แล้ว Docker ทำอะไรได้มากกว่า run container มาหาคำตอบกัน — Part 2 Apipol Sukgler Aug 11, 2018 8.อยาก Persist Data ต้องทำอย่างไร อย่าง redis ที่ถ้าไม่ทำ persist data ข้อมูลที่อยู่ด้านในก็จะหายไปทันที ถ้าเกิด redis ดับไป โดยการทำ persist ข้อมูลเก็บไว้ได้โดยใช้ option -v ในการ mount volume ออกมาภายนอก docker run -v /docker/redis-data:/data --name redis -d redis redis-server --appendonly yes redis-server — appendonly yes — เป็น Mode ที่จะทำ persist data ลงในไฟล์ appendonly.aof ทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลใน redis เอาข้อมูลใน appendonly.aof ที่อยู่ใน /data ออกมานอก container ใน directory /docker/redis-data From now on, every time Redis receives a command that changes the dataset (e.g.  SET ) it will append it to the AOF. When you restart Redis it will re-play the AOF to rebuild the state ( Ref ) จากนั้นเราลอง set ค่าเข้า redis โดยใช้ redis-cli docker exec -i redis redis-cli > set data "hello world" หรืออ...