- ทำความเข้าใจเกี่ยวกับ Docker Compose
- การติดตั้ง Docker Composite
- Docker Compose พื้นฐาน
- การทำแอพโดยใช้ Docker Compose
- 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 เป็นเครื่องมือที่ทรงคุณค่าในการทำแอพของคุณ