Install Docker Swarm
การใช้งาน Docker เพื่อให้คอมหลายๆ เครื่อง (ที่มี docker) ทำงานได้เสมือนเป็นเครื่องเดียวกันนะครับ มันดีตรงที่เราสามารถใช้ทรัพยากรร่วมกันได้สำหรับงานใหญ่ๆ (แต่ถ้าทำในเครื่องเดียวกันได้ก็ไม่แนะนำนะครับ เพราะยังไงการดึงข้อมูลผ่านสายแลนมันช้ากว่าภายในเครื่องแน่นอน)
- ก่อนอื่นสร้าง vm มาทดสอบตาม หน้านี้ ข้อ 1-5 เลยครับ
- ติดตั้ง docker ตาม หน้านี้นะครับ
- 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 เดียวกันนะครับ
- ทีนี้เราก็ ssh เข้า vm ทั้ง 2 เครื่องด้วย ssh USER@192.168.1.3n แล้ว copy --> paste คำสั่งในการ join node ลงไป (ถ้าลืม ใช้คำสั่ง docker swarm join-token worker เพื่อดูใหม่ได้ครับ)
- เราสามารถดู node ทั้งหมดได้ด้วยคำสั่ง docker node ls
- เมื่อเราต้องการระบายงานออกจาก node อาจจะเพื่อเอาออกจาก swarm ให้ใช้คำสั่ง docker node update --availability drain NODE_NAME หลังจากนี้มันจะไม่รับงานเพิ่มนะครับ (เปลี่ยนจาก drain เป็น active เพื่อให้กลับมทำงานเหมือนเดิมได้นะครับ แต่งานมันจะไม่กระจายเองนะครับ)
- ใช้คำสั่ง docker swarm leave ในเครื่อง node เพื่อออกจาก swarm นะครับ ถ้าดูที่ STATUS ในคำสั่ง docker node ls หลังผ่านไปสักแปป มันจะขึ้นว่า Down นะครับ
- เมื่อต้องการลบ node ใช้ docker node rm NODE_NAME หรือ ID นะครับ เพราะถึงแม้ว่าเราจะ join node ของเครื่องเดิมเข้า swarm มาใหม่ มันก็จะได้ ID ใหม่นะครับ
- docker service create --replicas 1 --name nginx -p 80:80 nginx ทดลองสร้างเว็บเซิฟเวอร์ nginx
- docker service ps nginx ดูจะพบว่ามันจะเลือกให้เราเองว่าจะติดตั้งที่ตัวไหนนะครับ
- docker service scale nginx=3 ลองเพิ่มเป็น 3 replicas ดูนะครับ จะพบว่ามันจะติดตั้งในทุกเครื่อง ทั้งเครื่อง manager และ node นะครับ
- ลอง 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 เพิ่มเองนะครับ
- ทีนี้ปกติเวลาเรารัน 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 ตามด้วยนะครับ
- ทีนี้มาลองเปลี่ยนคำสั่งให้เป็นการใช้งานแบบ docker swarm นะครับ docker service create --replicas 2 --name jupyter2 -p 3002:8888 jupyter/datascience-notebook
ความคิดเห็น
แสดงความคิดเห็น