Docker Swarm Mode

First of all, this blog is written in bilingual, English and Thai. It’s a bit hard to read. Sorry about that.
บล็อกนี้เป็นแบบสองภาษา อยากให้คนไทยได้อ่านพร้อม ๆ กับที่อื่น อ่านยากซักนิด ต้องขอโทษด้วยนะครับ

Today, Docker announced the Docker Swarm Mode at DockerCon 2016.
Being a Docker Captain, it’s too excited that I could not talk about it all this time, except for SwarmKit. And I can tell you now!!
วันนี้ Docker มีการประกาศเปิดตัว Docker Swarm Mode ที่งาน DockerCon 2016 ผมตื่นเต้นกับเรื่องนี้มาตลอดตั้งแต่การเปิดตัวของ SwarmKit และตอนนี้ก็เล่าให้ฟังได้แล้ว

So what’s the Docker Swarm Mode?
แล้ว Swarm Mode คืออะไร?

Comparison between SwarmKit and the Swarm mode — เปรียบเทียบระหว่าง SwarmKit และ Swarm โหมด

In Docker 1.12 and later, Swarm is now living inside the Engine.
You can just use Docker to form a cluster without external moving parts like Swarm agents or Swarm manager. For versions of Docker prior to 1.12, you need the Swarm version 1.
ใน Docker 1.12 และรุ่นถัด ๆ ไป Swarm จะไปอาศัยอยู่ภายใน Engine โดยเราจะสามารถใช้ Docker เพื่อสร้างคลัสเตอร์แบบไม่ต้องใช้ระบบ Swarm agent หรือ Swarm manager ภายนอกแบบเมื่อก่อน สำหรับ Docker รุ่นก่อน 1.12 ก็ยังใช้ Swarm version 1 แบบเดิมได้อยู่ครับ

Everything has been built-in and work out-of-the-box!!
ตอนนี้ทุกอย่างถูกรวมเข้าไปใน Engine และทำงานได้แบบแกะกล่อง!!

I’m not in the Docker Engine team, but have been following and tested it thoroughly and I love it very much. Also I’m happy to see some of my codes are still useful there inside SwarmKit, the core subsystem behind this cool Docker Swarm mode.
ผมไม่ได้อยู่ในทีม Docker Engine แต่ตามทดสอบตลอดและผมชอบมันมาก และผมก็ดีใจที่เห็นโค้ดบางส่วนที่เคยเขียนยังมีประโยชน์อยู่สำหรับ SwarmKit ซึ่งเป็นระบบย่อยเบื้องหลังการทำงานของ Docker Swarm โหมดนี้

To start a single-node cluster just do,
ถ้าอยากมีคลัสเตอร์แบบโหนดเดียว ต่อไปก็สามารถทำแค่

$ docker swarm init

You’ll get the master and the worker node in the same process, on the same host.
เราจะได้ master node และ worker node ในโปรเซสเดียวกัน บนโฮสต์เดียวกัน

With the Swarm mode, you’ll have some new concepts of “services” and “tasks”.
ด้วย Swarm โหมด เราจะมี concept ใหม่ 2 เรื่องคือ “service” และ “task”

Basically, a service is a group of tasks. 
A task is the work that will be carried on by Docker Engine. You can guess. It’s for running a container.
ซึ่ง service จะเป็นกลุ่มของ task
และ task เป็นการทำงานที่จะทำโดย Docker Engine ก็เดาไม่ยากนะครับ task ใน Swarm mode คือการรัน container

This enables a true platform for micro-services !!!
Yes, it is.
ด้วยสองแนวคิดนี้จะเป็นการเกิดขึ้นของ platform สำหรับ micro-service อย่างแท้จริงอีก platform นึง

Basically, if you’d like to run a WordPress website, you’ll have 3 services, front, wordpress and db. Look familiar, right?
เช่น ถ้าเราอยากรันเว็บไซต์ของ WordPress ปกติ เราจะมี 3 service คือ front, wordpress และ db

With the Swarm mode, you can start each service out-of-the-box from the command line. For example,
และด้วย Swarm mode เราจะสร้างแต่ละ service ได้เลยตรง ๆ ด้วย command line เช่น

$ docker service create --name db --replicas 2 mariadb

You’ll get the ‘db’ service holding 2 tasks, db.1 and db.2.
เราจะได้ db service ที่มี 2 task คือ db.1 และ db.2

All db container instances are load-balaced via DNS. Also if you want to publish it to the external world, you’ll get an L4 IPVS load-balancing doing this job for you.
โดยทุก db container จะถูก load-balance ด้วย DNS อัตโนมัติ และถ้าเราต้องการ publish มันออกไปให้ด้านนอกเห็น เราก็จะได้ L4 IPVS load-balancer ทำงานนี้ให้เรา

I’m not kidding. It’s an IPVS load-balancer that will take care of this job for you.
ไม่ได้พูดเล่นครับ IPVS load-balancer อยู่ข้างในและจะจัดการเรื่องนี้ให้

You see, Docker Engine has lift itself to be a full-feature clustering system.
จะเห็นว่า Docker Engine ยกระดับตัวเองขึ้นมาเป็นระบบคลัสเตอร์แบบเต็มตัวแล้ว

Well, you can start another layer of services with,
ต่อไปเราจะสร้าง service อีกชั้นด้วยคำสั่ง

$ docker service create --name wordpress --replicas 5 --publish 30000:80 wordpress

You’ll get 5 containers wordpress.1 to wordpress.5.
เราก็จะได้ 5 container ชื่อ wordpress.1 ถึง wordpress.5

And I’ll tell you, you don’t even need the front (nginx) container in this case.
และผมกำลังจะบอกว่า เราแทบไม่ต้องการ front (nginx) container ในตัวอย่างนี้

With this, you can access your Wordpress website through the node at port 30000. And it’s will be load-balaced to all 5 instances via IPVS. This is one of my requested feature to the libnetwork a while ago. I’m glad it’s there in the Engine.
ด้วยฟีเจอร์นี้ เราจะสามารถเข้าถึง Wordpress website ผ่านโหนดของเราที่พอร์ต 30000 และมันจะ load-balance อัตโนมัติบน 5 container ผ่านระบบของ IPVS โดยตัวนี้เป็นฟีเจอร์ที่ผมเคยขอไว้ที่ทีม libnetwork นานแล้ว ดีใจมากที่มันโผล่มาอยู่ใน Engine

Not just these, the Swarm mode is packed with awesome features!! Play with it (the RC2 is just there from the testing channel) and you’ll love it.
ไม่ใช่แค่นี้นะครับ Swarm mode ยังมีฟีเจอร์อีกเพียบให้ลองใช้ ตอนนี้สามารถลองเล่น RC2 ได้แล้วบน testing channel ของ Docker และท่านจะชอบมันครับ

The effortless micro-service architecture has just arrived !!
ต้องบอกว่า สถาปัตยกรรม micro-service แบบสุดง่ายมาถึงแล้ว !!