Docker คือ ตอนที่ 5 : Docker Compose

  1. ทำความเข้าใจเกี่ยวกับ Docker Compose
  2. การติดตั้ง Docker Composite
  3. Docker Compose พื้นฐาน
  4. การทำแอพโดยใช้ Docker Compose
  5. Docker Compose คำสั่ง CLI

ในขณะที่คุณเรียนรู้ Docker สำหรับการทำแอพ คุณจะพบสถานการณ์ที่เกี่ยวข้องกับคอนเทนเนอร์ Docker มากกว่าหนึ่งรายการในที่สุด การเรียกใช้คอนเทนเนอร์ Docker หลายรายการแยกกันอาจเป็นงานที่น่ากังวล โดยเฉพาะอย่างยิ่งเมื่อต้องพึ่งพากันเพื่อให้ทำงานได้อย่างถูกต้อง เข้าสู่ Docker Compose ซึ่งเป็นเครื่องมือที่ออกแบบมาเพื่อแก้ปัญหานี้โดยเฉพาะ บทความนี้จะมุ่งเน้นไปที่ Docker Compose และวิธีใช้เพื่อเรียกใช้แอปพลิเคชันหลายคอนเทนเนอร์ในการทำแอพ

1. ทำความเข้าใจเกี่ยวกับ Docker Compose

Docker Compose เป็นเครื่องมือสำหรับกำหนดและเรียกใช้แอปพลิเคชัน Docker แบบหลายคอนเทนเนอร์ ด้วยการเขียน คุณจะใช้ไฟล์ YAML เพื่อกำหนดค่าบริการของแอปพลิเคชันของคุณ จากนั้นด้วยคำสั่งเดียว คุณจะสร้างและเริ่มบริการทั้งหมดจากการกำหนดค่าของคุณ

แต่ทำไมเราต้องใช้ Docker Compose คำตอบอยู่ที่ลักษณะของการใช้งานสมัยใหม่ ซึ่งมักประกอบด้วยองค์ประกอบหลายอย่าง ตัวอย่างเช่น เว็บแอปพลิเคชันทั่วไปอาจประกอบด้วยเว็บเซิร์ฟเวอร์ ฐานข้อมูล และผู้ปฏิบัติงานสำหรับงานเบื้องหลัง การจัดการส่วนประกอบเหล่านี้แยกกันเป็นเรื่องยุ่งยาก Docker Compose ทำให้กระบวนการนี้ง่ายขึ้น ทำให้สามารถจัดการบริการทั้งหมดเหล่านี้เป็นเอนทิตีเดียวได้

2. การติดตั้ง Docker Composite

ก่อนที่เราจะดำดิ่งสู่การใช้ Docker Compose ตรวจสอบให้แน่ใจว่าเราได้ติดตั้งแล้ว โดยทั่วไปแล้ว Docker Compose จะติดตั้งควบคู่ไปกับ Docker แต่ในกรณีที่ไม่มี คุณสามารถติดตั้งได้โดยทำตามคำแนะนำในเว็บไซต์อย่างเป็นทางการของ Docker

เมื่อคุณติดตั้ง Docker Compose แล้ว คุณสามารถตรวจสอบเวอร์ชันได้โดยใช้คำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:

docker-compose --version

3. Docker Compose พื้นฐาน

หัวใจสำคัญของ Docker Compose คือบริการ บริการใน Docker Compose สอดคล้องกับคอนเทนเนอร์ Docker ในการตั้งค่าคอนเทนเนอร์เดียว บริการเรียกใช้อิมเมจ Docker เช่นเดียวกับคอนเทนเนอร์ Docker

บริการถูกกำหนดไว้ในไฟล์ docker-compose.yml ชื่อไฟล์และนามสกุล ( docker-compose.yml) เป็นแบบแผน ใช้เพื่อระบุไฟล์การกำหนดค่า Docker Compose

ไฟล์ อย่างง่าย docker-compose.yml สำหรับเว็บเซิร์ฟเวอร์อาจมีลักษณะดังนี้:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

ในตัวอย่างข้างต้น เราได้กำหนดบริการเดียวที่เรียก web ว่า nginx บริการนี้ใช้ อิมเมจและแมปพอร์ตล่าสุด 8080 บนเครื่องโฮสต์เพื่อพอร์ต 80 ในคอนเทนเนอร์ Docker

4. การทำแอพโดยใช้ Docker Compose

เพื่อแสดงความสามารถของ Docker Compose เราจะสร้างเว็บแอปพลิเคชัน Flask อย่างง่ายที่เชื่อมต่อกับฐานข้อมูล Redis

แอปพลิเคชัน Flask ของเรา (app.py) จะมีลักษณะดังนี้:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='db', port=6379)

@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello World! I have been seen %s times.' % redis.get('hits')

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

แอปพลิเคชันนี้เชื่อมต่อกับ Redis และเพิ่มตัวนับทุกครั้งที่มีการเยี่ยมชมหน้าแรก

ตอนนี้ เราจะสร้าง Dockerfile สำหรับแอปพลิเคชันนี้:

FROM python:3.7-alpine
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir flask redis
CMD ["python", "app.py"]

ใช้ Dockerfile อิมเมจพื้นฐานของ Python ตั้งค่าไดเร็กทอรีการทำงานเป็น /app คัดลอกไฟล์ของไดเร็กทอรีปัจจุบันลงในอิมเมจ Docker ติดตั้งไลบรารี Flask และ Redis Python และตั้งค่าคำสั่งเพื่อเรียกใช้แอปพลิเคชันของเรา

ต่อไป เราต้องสร้าง docker-compose.yml ไฟล์ของเรา:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  db:
    image: redis

การกำหนดค่า นี้กำหนดสองบริการ web และ db บริการ นี้ สร้างขึ้นจากไดเร็กทอรีปัจจุบัน (ซึ่งมีแอป พลิเคชัน web Flask และ Dockerfile ของเรา) และแมปพอร์ต 5000 บนเครื่องโฮสต์กับพอร์ตของคอนเทนเนอร์ Docker 5000บริการ เพียงแค่ใช้ images db มาตรฐาน redis

ในการเปิดแอปพลิเคชันของเรา สิ่งที่เราต้องทำคือไปที่ไดเร็กทอรีที่มี docker-compose.yml ไฟล์ของเราและเรียกใช้คำสั่งต่อไปนี้:

docker-compose up

และเช่นเดียวกัน แอปพลิเคชันของเราและการพึ่งพา (Redis) ก็พร้อมทำงาน คุณสามารถตรวจสอบได้โดยไปlocalhost:5000 ที่เบราว์เซอร์ของคุณ แต่ละครั้งที่คุณรีเฟรชหน้า ตัวนับจะเพิ่มขึ้น โดยแสดงข้อมูลที่คงอยู่ใน Redis

5. Docker Compose คำสั่ง CLI

Docker Compose มาพร้อมกับคำสั่งที่มีประโยชน์มากมายที่ช่วยจัดการแอปพลิเคชันของคุณ:

  • docker-compose up: คำสั่งนี้เริ่มต้นแอปพลิเคชันของคุณ โดยค่าเริ่มต้น จะพยายามสร้างอิมเมจหากยังไม่ได้สร้าง
  • docker-compose down: คำสั่งนี้หยุดแอปพลิเคชันของคุณและลบคอนเทนเนอร์ เครือข่าย และไดรฟ์ข้อมูลที่กำหนดไว้ในไฟล์ docker-compose.yml ของคุณ
  • docker-compose ps: คำสั่งนี้แสดงบริการที่กำลังทำงานอยู่ที่กำหนดไว้ในไฟล์ docker-compose.yml ของคุณ
  • docker-compose build: คำสั่งนี้สร้างบริการที่กำหนดไว้ในไฟล์ docker-compose.yml ของคุณ
  • docker-compose logs: คำสั่งนี้แสดงบันทึกของบริการของคุณ

Docker Compose เป็นเครื่องมือที่ทรงพลังอย่างยิ่งสำหรับการทำแอพที่ทำงานกับแอปพลิเคชันหลายบริการ ทำให้การจัดการคอนเทนเนอร์หลายรายการง่ายขึ้น และลดความซับซ้อนของสคริปต์การปรับใช้ ด้วยการกำหนดบริการและการอ้างอิง Docker Compose ช่วยให้คุณทำแอพหลายคอนเทนเนอร์ด้วยคำสั่งเดียว เมื่อคุณเจาะลึกเข้าไปในโลกของ Docker และคอนเทนเนอร์ คุณจะพบว่า Docker Compose เป็นเครื่องมือที่ทรงคุณค่าในการทำแอพของคุณ


Docker คืออะไร

Docker คือ ตอนที่ 4 : Docker (คอนเทนเนอร์) Containers
Docker คือ ตอนที่ 6 : Docker ระบบเครือข่าย (Networking)