Watchara Ph
devopsthailand
Published in
3 min readJun 24, 2017

--

Docker Swarm With Compose

จาก docker swarm blog ที่แล้ว [https://medium.com/@sarapaokung/docker-swarm-with-load-balance-8eff5fe43563] docker ได้ออก feature มาใหม่เยอะแยะเลย แต่สิ่งที่ผมมาต่อยอดคือ ในการทำงานของชีวิตประจำวันของผมไม่มานั่งจำ docker run command หรอกครับ พวกผมใช้ docker compose กัน และเมื่อมันมาถึงเวลาก็เรียนรู้กับมันเลยครับ อ่ออย่าลืม update docker เป็น latest version ด้วยนะครับ

ถ้าใครได้รู้จักมัน มันง่ายกว่าเดิมเยอะมากแต่ก่อนอื่นอยากให้รู้จัก 3 ทหารเสือของการทำ docker swarm with compose ก่อนเริ่มนะครับ สามารถอ่านเพิ่มเติมได้ตาม link ด้านล่างเลยครับ

docker swarm [https://docs.docker.com/engine/swarm/]

docker stack [https://docs.docker.com/engine/reference/commandline/stack_deploy/]

docker compose [https://docs.docker.com/compose/]

เอาหละถึงเวลามาเริ่มกันแล้วดีกว่าครับ จาก blog เดิมผมจะทำ Step ถึงแค่สร้าง swarm master และ join worker เข้าไปยัง master จากนั้นก็ set manager ให้เป็น drain mode ครับ

ถึงเวลาเตรียม compose กันครับ ตามด้านล่างเลยครับ อย่าลืมอีกอย่างนึงนะครับ compose file เป็น yaml file อย่าเผลอใช้ tab นะครับ

จุดที่เพิ่มเข้ามาใน compose v3 คือ deploy และสั่ง replicas หลังจากเรา deploy docker compose ตัวนี้มันจะทำการ run ขึ้นมาตามที่ระบุไว้เลยนะครับ

เพิ่มเติมอีกอย่างครับ ถ้าใครมีการ set volumes แบบตัวอย่างผมตามด้านล่าง แนะนำให้ copy folder ของ compose นี้ทั้งหมดไปทุกเครื่องที่อยู่ใน swarm นี้ด้วยนะครับ

เอาหละมาถึงพระเอกของเราครับ docker stack เราจะมี add compose เข้า swarm กันครับ โดยใช้ command นี้ครับโดย ทุกอย่างเราจะสั่งผ่านเครื่อง manager เท่านั้นนะครับ

docker stack deploy -c [path compose file] [stack name]

หลังจาก create เสร็จแล้วเราไปลองตรวจสอบดูครับว่า docker stack ถูกสร้างขึ้นมาหรือยังครับ

จะพบว่ามันถูกสร้างขึ้นมาแล้ว และหลังจากมันสร้างขึ้นมาแล้ว service ใน swarm ก็จะ autorun ตาม replicas ที่เราตั้งไว้ด้วย ลองตรวจสอบกันดูครับ

และก็ไปตรวจสอบตาม worker ด้วยครับว่ามันทำงาน หรือยัง ของผมขึ้นมาเรียบร้อยครับ ตาม 2 รูปด้านล่าง

ถึงคราวเรามาทดสอบ app กันครับ โดย app ของผมจะมีค่า contrainer id ออกมาแสดงทาง browser ซึ่งผมเรียก application ผ่าน swarm เพื่อให้เห็นว่าทำหน้าที่ loadbalacing application ให้ และสามารถเรียก application ได้ทุก node ใน swarm

ส่วนอีก session นึงผมเรียกผ่าน safari

รอบนี้ผมสั่งให้ service นี้ replicas เหลือแค่ 1 เท่านั้นครับเพื่อจะทดสอบอะไรเพิ่มเติมให้โดยใช้ คำสั่ง ตามด้านล่างครับ ถ้าใครอยากเพิ่มก็ใช้ command เดียวกันครับ

ซึ่งตอนนี้ผมตรวจสอบแล้วพบว่าผมเหลือ contrainer id ee7f0dbc2e96 เท่านั้นครับ ซึ่งถ้าผมเรียกผ่าน node ไหนๆ ก็จะได้ contrainer id นี้เท่านั้นครับ

ง่ายไหมหละครับ docker swarm ท้ายนี้ผมก็ขอขอบคุณนะครับ สำหรับผู้ติดตามอ่าน blog ของผม ที่ทำแต่ล่ะ blog ช้าเพราะจะเกิดจากการใช้งานจริงเท่านั้นครับ แต่ทำเพราะจะนำมาใช้ improvement ในงานที่ทำด้วยครับ :D

--

--