Install Docker Swarm

                   การใช้งาน Docker เพื่อให้คอมหลายๆ เครื่อง (ที่มี docker) ทำงานได้เสมือนเป็นเครื่องเดียวกันนะครับ มันดีตรงที่เราสามารถใช้ทรัพยากรร่วมกันได้สำหรับงานใหญ่ๆ (แต่ถ้าทำในเครื่องเดียวกันได้ก็ไม่แนะนำนะครับ เพราะยังไงการดึงข้อมูลผ่านสายแลนมันช้ากว่าภายในเครื่องแน่นอน)

  1. ก่อนอื่นสร้าง vm มาทดสอบตาม หน้านี้ ข้อ 1-5 เลยครับ 
  2. ติดตั้ง docker ตาม หน้านี้นะครับ
  3. docker swarm init --advertise-addr 192.168.1.30:3333 --task-history-limit 3 ใช้คำสั่งนี้ในเครื่องเราให้มันเป็นเครื่อง manager เพื่อใช้จัดการ swarm นะครับ ซึ่งเราจะได้กลับมาประมาณนี้คือ  docker swarm join --token SWMTKN-1-0obhxecefiysme4ymg2nvbn4arq2yr4pvu3xth235ixo43jf1d-0cfmjqwo024x4shljwyemlun6 192.168.1.30:3333 เป็นคำสั่งสำหรับให้เครื่องอืนใช้ join node เข้ามาเป็น swarm เดียวกันนะครับ
  4. ทีนี้เราก็ ssh เข้า vm ทั้ง 2 เครื่องด้วย ssh USER@192.168.1.3n แล้ว copy --> paste คำสั่งในการ join node ลงไป (ถ้าลืม ใช้คำสั่ง docker swarm join-token worker เพื่อดูใหม่ได้ครับ)
  5. เราสามารถดู node ทั้งหมดได้ด้วยคำสั่ง  docker node ls
  6. เมื่อเราต้องการระบายงานออกจาก node อาจจะเพื่อเอาออกจาก swarm ให้ใช้คำสั่ง  docker node update --availability drain NODE_NAME หลังจากนี้มันจะไม่รับงานเพิ่มนะครับ (เปลี่ยนจาก drain เป็น active เพื่อให้กลับมทำงานเหมือนเดิมได้นะครับ แต่งานมันจะไม่กระจายเองนะครับ)
  7. ใช้คำสั่ง  docker swarm leave ในเครื่อง node เพื่อออกจาก swarm นะครับ ถ้าดูที่ STATUS ในคำสั่ง docker node ls หลังผ่านไปสักแปป มันจะขึ้นว่า Down นะครับ
  8. เมื่อต้องการลบ node ใช้  docker node rm NODE_NAME หรือ ID นะครับ เพราะถึงแม้ว่าเราจะ join node ของเครื่องเดิมเข้า swarm มาใหม่ มันก็จะได้ ID ใหม่นะครับ
  9. docker service create --replicas 1 --name nginx -p 80:80 nginx ทดลองสร้างเว็บเซิฟเวอร์ nginx
  10. docker service ps nginx ดูจะพบว่ามันจะเลือกให้เราเองว่าจะติดตั้งที่ตัวไหนนะครับ
  11. docker service scale nginx=3 ลองเพิ่มเป็น 3 replicas ดูนะครับ จะพบว่ามันจะติดตั้งในทุกเครื่อง ทั้งเครื่อง manager และ node นะครับ
  12. ลอง scale ลดลง sudo docker service scale nginx=1 นะครับ แล้วดูด้วย sudo docker service ps nginx ว่ามันทำงานอยู่ที่เครื่องไหนนะครับ ให้ปิดตัว vm เครื่องนั้นลงไปนะครับ รอสักพัก แล้วเช็คด้วย sudo docker service ps nginx อีกทีจะพบว่ามันถูกรันในเครื่องอื่นนะครับ คือมันมีระบบ self-healing ของมันเองด้วยนะครับ ดังนั้นถ้าเราเปิด service อย่างน้อย 2 replicas ขึ้นไป โอกาสที่ระบบจะล่ม ก็ยิ่งยาก และยิ่งสั้นลงนะครับ แต่เมื่อเราลองกลับมา 3 replicas ใหม่ แล้วเช็คเครื่องที่เคย shutdown ไป จะพบว่ามันยังมี container ที่ปิดค้างไว้ใน docker ps -a นะครับ แต่เปิดอันใหม่มาแทน ตรงนี้ต้องมาลบเอาเองนะครับ รวมถึงยังค้างตอนใช้ sudo docker service ps nginx นะครับ (ใช้ docker service rm NAME_SERVICE ได้แต่ก็จะปิดเซอวิสทั้งหมดเลยนะครับ) แล้วก็ถึงจะเปิดกลับใหม่ รึ join เครื่องอื่นมาแทน ก็จะไม่มีการกระจาย service เพิ่มเองนะครับ
  13. ทีนี้ปกติเวลาเรารัน docker ธรรมดาเพื่อใช้ jupyter จะใช้คำสั่งนี้ docker run --name jupyter --restart=unless-stopped -v $(pwd)/jupyter:/home/jovyan/work/ -p 8888:8888 -itd jupyter/datascience-notebook:latest bash ตามด้วย
    • sudo chmod 777 jupyter เพื่อให้สิทธิ์ใช้งาน และแก้ไขไฟล์ของ jupyter นะครับ
    • docker attach jupyter เข้าไปใช้ bash ใน docker ของ jupyter
    • jupyter notebook พิมพ์เพื่อสั่งให้ jupyter ทำงานนะครับ
    • เราจะได้ url ประมาณนี้ http://127.0.0.1:8888/?token=ddb573b42b5a0d3d429d4350536b52c186811e6b897ce661 ตอบกลับมานะครับ สามารถกด ctrl + click ซ้าย เพื่อเข้าเว็บได้เลยนะครับ แต่ถ้าสั่งเปลี่ยน port ไปเป็นอย่างอื่นที่ไม่ใช่ 8888 ก็อย่าลืมเปลี่ยน url ตามด้วยนะครับ
  14. ทีนี้มาลองเปลี่ยนคำสั่งให้เป็นการใช้งานแบบ docker swarm นะครับ docker service create --replicas 2 --name jupyter2 -p 3002:8888 jupyter/datascience-notebook

ความคิดเห็น

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

โปรโมชั่นเน็ต TOT

โน๊ตบุ๊ค acer switch sa5-271 แบตบวม T^T

Blog นี้สร้างเพื่อ?