Docker Compose มันคืออะไรกันนะ ?

Wirawat Roj
2 min readNov 30, 2020

--

Docker Compose

สวัสดีครับ วันนี้เราจะมาต่อจากบทความที่แล้วกัน โดยว่าด้วยเรื่องของ docker compose ที่ได้มีการพูดถึงในบทความคราวก่อนครับ ซึ่งจากคราวก่อนเรารู้จัก Docker และพูดถึงเรื่อง Concept ของ Docker กันไปแล้ว ดังนั้นใน บทความนี้ต่อเนื่องจากคราวก่อนที่เรื่องของ Docker Compose ที่จะมาช่วยจัดการ Container หลายๆ ตัวกันครับ

docker compose คืออะไร?

docker compose ก็คือ tool ที่จะมาช่วยเราในการจัดการและรัน Docker Container หลายๆ ตัวได้สะดวกมากขึ้น โดยเราจะเขียน YAML ไฟล์ชื่อว่า docker-compose ขึ้นมาเพื่อ Config Application เราแต่ละตัว และหลังจากนั้นเราก็สามารถใช้เพียงคำสั่งเดียวเพื่อสร้าง และ Start Service ทั้งหมดที่เราเขียนไว้ใน Compose ไฟล์ได้เลย

ลองมาดูหน้าตาของไฟล์ docker compose กัน

version: '3.7'
services:
app:
container_name: demo_application
build:
context: .
dockerfile: Dockerfile
ports:
- "5000:80"
network_mode: host
env_file: .env
environment:
Demo_Environment_Variable_1: value
Demo_Environment_Variable_2: value
depends_on:
- mssql
depends_on:
- mssql
mssql:
container_name: sql
image: mcr.microsoft.com/mssql/server:2017-latest
restart: always
environment:
SA_PASSWORD: "P@ssword1"
ACCEPT_EULA: "Y"
ports:
- 1433:1433
network_mode: bridge

นี่เป็นตัวอย่างของ docker-compose.yml โดยมี 2 service คือ ตัว application และ database ที่เป็น mssql โดยให้ application ที่ว่านี้ต่อกับ database ที่สร้างขึ้นด้วย ซึ่งได้มีการ Config ต่างๆ เบื้องต้นเอาไว้ด้วย Configuration ต่างๆ ดังตัวอย่าง โดยมี Configuration ที่ควรจะรู้จักดังนี้

Configuration ของ Docker Compose ที่ควรรู้จัก

version - เป็น version ของ compose file format
services - ส่วนของการระบุว่า เราจะมี service อะไรบ้างที่เราจะ compose ออกไป
container_name - ชื่อของ Container หลังจากเราสั่ง compose แล้ว
build - ระบุ path ไปยัง Dockerfile
ports - ระบุ port ที่เราจะ expose ออกมาโดยจะเป็นดังนี้ HOST:CONTAINER
network_mode - ระบุ type network ของ service เช่น host , bridge
env_file - อ่าน Environment variable จากไฟล์ .env โดยใส่เป็น path ไปหาไฟล์
environment - กำหนด Environment variable แบบกำหนด Value ลงไปได้
depends_on - ระบุชื่อ service ที่เราต้องการจะเพิ่ม dependency ด้วย
images - image ที่ต้องการใช้โดยจะเป็น local หรือ remote image ก็ได้

ซึ่งยังมี Configuration อีกมากมายที่เราสามารถนำมาประยุกต์ใช้ได้ โดยสามารถดูเพิ่มเติมได้ที่นี่เลยครับ

ลองเอา compose ของเรามาใช้กันเถอะ

โดยเราสามารถรัน compose นี้ได้ด้วยคำสั่ง

docker-compose up

พอเราลองดู container ที่รันอยู่ด้วย “docker ps” ก็จะพบ container ของ service ที่เราเขียนไว้ใน compose file

ซึ่งเมื่อ container รันขึ้นแบบนี้แล้วเราก็สามารถใช้งาน Service นั้นได้เลยตาม port ที่เรากำหนดไว้ใน compose file ได้เลยครับ~

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

อ้างอิง

https://docs.docker.com/
https://docs.docker.com/compose/compose-file/

Special Thanks

ขอขอบคุณ “สำนักงานส่งเสริมเศรษฐกิจดิจิทัล (depa)” และคณาจารย์ “คณะเทคโนโลยีสารสนเทศ มจธ. (SIT)” ที่ให้การสนับสนุน “ทุนเพชรพระจอมเกล้าเพื่อพัฒนาเทคโนโลยีและนวัตกรรมดิจิทัล (KMUTT-depa)” ซึ่งเป็นทุนที่มอบความรู้ ทักษะและโอกาสดีๆ กับผมอย่างมาก~

--

--

Wirawat Roj

Software Engineer | 🍔 Always hungry | ❤️ Love Coding