ครั้งที่แล้วได้แนะนำการใช้งาน Docker Machine ไปหลายครั้งบน Public Cloud หลายค่าย เช่น Azure, Rackspace, DigitalOcean เป็นต้น แนะนำการผูก Docker Cluster โดนใช้ Docker Swarm และใช้งาน Service Orchestration โดยใช้ Docker Composer กันไปแล้ว ครั้งนี้จะมาแนะนำการใช้งานร่วมกันทั้ง 3 Service
เริ่มจากสร้าง Cluster และ Swarm Master บน DigitalOcean
docker run swarm create
เอาค่า UUID ที่ได้มาสร้าง env ดังนี้
export SWARM_TOTEN="c8dc7848af2cbeccd7bc7dfef48e7448"
export DO_TOKEN="YOUR-DIGITALOCEAN-TOKEN"
ใช้ Docker Machine สร้าง Swarm Master
docker-machine create \
-d digitalocean \
--digitalocean-access-token $DO_TOKEN \
--swarm \
--swarm-master \
--swarm-discovery token://$SWARM_TOTEN \
swarm-master
จากนั้นเพิ่ม Swarm Node ดังนี้
docker-machine create \
-d digitalocean \
--digitalocean-access-token $DO_TOKEN \
--swarm \
--swarm-discovery token://$SWARM_TOTEN \
swarm-node-01
ให้เพิ่มอีก 3 Node จะได้ Docker Machine ดังนี้
docker-machine ls
จากนั้นเราจะใช้ Docker เชื่อมต่อไปยัง Swarm Master ตั้งค่า env เพิ่มดังนี้
$(docker-machine env --swarm swarm-master)
ลองดู info จะพบว่าเรากำลังใช้งานผ่าน swarm อยู่
docker info
ตอนนี้เราสามารถเรียกใช้งาน Cluster ผ่าน Swarm ได้แล้ว มาใช้ Docker Compose กัน สร้างไดเรคทอรีเก็บ project
mkdir wp
cd wp
สร้างไฟล์ docker-compose.yaml ดังนี้
หากดูที่ config จะพบว่าใช้ affinity ระบุว่าไม่ให้ deploy บนเครื่องที่มี container ชื่อ wp_web_* คือ ไม่ให้ deploy บนเครื่องซ้ำกัน อาจจะระบุเป็นชื่อ node ก็ได้เช่น constraint:node==/swarm-node-[0-9]+/จากนั้นสั่ง compose up ได้เลยดังนี้
docker-compose up -d
ลอง scale ดูดังนี้
docker-compose scale web=4
เราจะได้ wordpress มา 4 ตัวทำงานบนเครื่องที่ไม่ซ้ำกัน
ตัวอย่างของการ scale เหมาะกับ service หรือ state less application ที่ต้องการจำนวนเครื่องในการประมวลผล