Intro to Docker Compose

ในบทความ แนะนำ Docker ได้เกริ่นถึง Docker Orchestration Tool ไว้ Docker Compose ก็เป็นหนึ่งใน tool เหล่านั้น และถือเป็น orchestration tool พื้นฐานที่มากับ Docker Engine เลย

ตัวอย่าง compose file

version: "2"
services:
  db:
    image: mysql:5.7
    volumes:
      - "~/db:/var/lib/mysql"
    environments:
      MYSQL_ROOT_PASSWORD: dummy
  web:
    image: samrit/webapp
    ports:
      - "8888:80"
    link:
      - db:database

Docker compose เป็น spec อธิบายถึง runtime environment ที่เราต้องการ สามารถเขียนเป็นไฟล์ JSON หรือ YAML ก็ได้

ตัวอย่าง config ที่เขียนด้วย JSON file:

{
  "version": "2",
  "services": {
    "db": {
      "image": "mysql:5.7",
      "volumes": [ "~/db:/var/lib/mysql" ],
      "environments": {
         "MYSQL_ROOT_PASSWORD": "dummy"
      }
    },
    "web": {
      "image": "samrit/webapp",
      "ports": [ "8888:80" ],
      "link": [ "db:database" ]
    }
  }
}

จากตัวอย่างข้างบน

  • version เป็น version ของ docker compose file. ปัจจุบันเป็น version 2
  • services เป็นส่วนที่อธิบายจำนวน service (container) ที่ต้องการ ในที่นี้มีสองตัวคือ db และ web
  • image เป็น Docker Image เพื่อใช้สร้าง Container โดยปกติจะโหลดมาจาก Docker Hub
  • volumes เป็นการระบุ mapping ระหว่าง host path กับ container path
  • environments เป็นตัวแปร environment ที่ต้องการเซตไว้ใน container เมื่อ container เริ่มทำงาน
  • ports ใช้ระบุ port mapping ระหว่าง host port กับ container port
  • link ระบุ dependency ของแต่ละ service โดยที่ dependency นี้จะเป็น host alias ด้วย

Settings อื่นๆสามารถดูเพิ่มเติมได้ใน https://docs.docker.com/compose/compose-file/

ใช้งาน Docker Compose

การใช้งานทำผ่าน Command line ชื่อ docker-compose เช่น

docker-compose up  # start services
docker-compose down # remove services
# or
docker-compose stop # stop all services but not remove them.

โดยปกติชื่อ docker compose file คือ docker-compose.yml หรือ docker-compose.json