การสร้าง docker compose เพื่อใช้งาน nginx php-fpm mariadb และ phpadmin
Docker compose คือ script คำสั่งเพื่อใช้ในการสร้าง container หลายๆ container ขึ้นมาพร้อมกัน โดยใช้คำสั่งเดียว ซึ่งโดยปกติต้องการสร้าง container จะสร้างจาก image ตัวอย่างเช่น ถ้าจะทดสอบ wordpress ดำเนินการสร้าง container web server และ database ซึ่งจะเห็นได้เราต้องดำเนินการสร้าง 2 container เข้าด้วยกัน ซึ่งถ้าเราดำเนินการสร้าง container ทีละตัว ซึ่งจะเสียเวลา
เพราะปัญหาที่กล่าวมาข้างต้นเลยเกิด docker compose ขึ้นมา คือเราสามารถกำหนดไว้ในไฟล์ docker-compose.yml เลย ว่าใช้ services อะไรบ้าง ตั้งค่าไรบ้าง จากนั้นก็ใช้คำสั่งดำเนินการการรัน docker-compose โดยใช้คำสั่ง docker-compose up -d ก็จะทำการสร้าง container ทุกๆอันโดยอัตโนมัติ ตามการตั้งค่าที่เรากำหนดไว้
คำสั่งของ Docker-compose
build — เป็นการสร้าง Services โดยการอ้างอิง Services จาก Dockerfile
bundle — เป็นการสร้าง File ออกมาเป็นประเภท JSON Object
config — เป็นการตรวจสอบและเรียกดู File ของ docker-compose.yml ที่สร้างเอาไว้
create — เป็นคำสั่งสำหรับใช้เพื่อสร้าง Services
down — เป็นคำสั่งปิดการทำงานของ Container
events — เป็นการบอกเหตุการณ์ที่เกิดขึ้นทั้งหมดของ Container
exec — เป็นการเข้าไปจัดการ Container ที่ถูกอ้างอิง
help — เป็นคำสั่งช่วยเหลือเพื่อดู Command ทั้งหมด
images — เป็นคำสั่งที่ใช้ดู Images ทั้งหมดใน Docker
kill — เป็นคำสั่งปิดการทำงานของ Container
logs — เป็นการแสดงข้อมูลที่ถูกอ้างอิงจาก Container
pause — เป็นคำสั่งหยุดการทำงานของ Container
port — เป็นคำสั่งที่ใช้สำหรับดู port ของ Container
ps — เป็นคําสั่งสําหรับดูว่าตอนนี้มี Container ตัวไหนทำงานอยู่บ้าง
pull — เป็นการ Download Services ที่อยู่ใน Docker Hub
push — เป็นการ Push Services ขึ้นไปบน Docker Hub
restart — เป็นการ Restart เพื่อให้ Container ทำงานใหม่
rm — เป็นคำสั่งสําหรับไว้ลบ Container หากว่า Container กำลังทำงานอยู่ต้องทำการ Stop ก่อน หรือจะใช้คำสั่ง Docker rm -f เพื่อบังคับลบ
run — เป็นการสร้าง Container ใหม่ พร้อมกับการตั้งค่าของ Services
scale — เป็นการสั่ง Run Container โดยเรียงตามเลขที่เรากำหนด
start — เป็นคำสั่งเริ่มการทำงานของ Container ใน Docker-Compose
stop — เป็นคำสั่งหยุดการทำงานของ Container ใน Docker-Compose ที่เราให้ทำงานอยู่
top — เป็นการแสดงสิ่งที่กำลังทำงานอยู่ใน Docker-compose.yml
unpause — เป็นคำสั่งที่ทำให้ Container ที่ถูก Pause ทำงานต่อ
up — เป็นคำสั่งสำหรับ Start Container ทั้งหมด ใน Docker-compose ที่เราทำงานอยู่
version — เป็นคำสั่งที่ใช้ตรวจสอบ Version
คำสั่งในไฟล์ docker-compose.yml
version — เป็นการระบุว่าเราจะใช้ Compose file เวอร์ชั่นอะไร
services — เป็นการระบุ container ที่ต้องการใช้งาน
image — เป็นการเรียกใช้ Image จาก Docker Hub Registry
ports — เป็นการทำ port mapping ระหว่าง host กับ container
volumes — การสร้าง volumes มี 2 แบบ ซึ่งถ้าสร้างอยู่ภายในชื่อ service แต่ละตัวก็คือการเชื่อม volume แต่ถ้าอยู่ในระดับเดียวกับ services จะเป็นการสร้าง volume
build — การบอกว่าให้ใช้ image ที่สร้างจาก Dockerfile
links — เป็นการผูก service เข้าด้วยกัน ทำให้ service สามารถเรียกใช้งาน service ที่ link ได้
restart: alway — เป็นการกำหนดให้ service นั้น restart ตัวเองอัตโนมัติเมื่อเกิดข้อผิดพลาด หรือสั่งให้เริ่มต้นทำงานอัตโนมัติเมื่อเปิดเครื่องขึ้นมาใหม่
network — เป็นการใช้เพื่อสร้างเส้นทางสื่อสารกันระหว่าง container
memory limit — การจำกัดการใช้งาน container เพื่อไม่ให้ใช้ ram เกินที่ตั้งไว้
context — path ของ dockerfile เพื่อที่จะใช้ในการสร้าง container
memory reservations — การกำหนดค่าการใช้งาน ram ขั้นต่ำสำหรับ container
depens_on — สั่งให้ service นั้นเริ่มทำงานหลังจาก service ที่ depens_on อยู่เริ่มต้นทำงานเสร็จแล้ว
การสร้าง docker-compose ของ Service nginx, php-fpm, mariadb, phpmyadmin
สร้างไฟล์ที่ชื่อว่า docker-compose.yml ใส่ข้อมูลดังนี้ และทำการบันทึก
version: '3.9'
services:
web:
image: nginx:latest
container_name: web
restart: always
environment:
TZ: 'Asia/Bangkok'
ports:
- '80:80'
- '443:443'
volumes:
- /web:/var/www/html //กำหนด path ของเว็บ
links:
- php-fpm
php-fpm:
image: bucchub/php-fpm:5.6
container_name: php-fpm
restart: always
volumes:
- /web:/var/www/html //กำหนด path ของเว็บ
mysql:
image: mysql:5.5
container_name: mysql
restart: always
volumes:
- /mysql:/var/lib/mysql
environment:
TZ: 'Asia/Bangkok'
MYSQL_DATABASE: 'example' //กำหนดชื่อของฐานข้อมูล
MYSQL_USER: 'example' //กำหนดชื่อผู้ใช้งาน
MYSQL_PASSWORD: 'example' //กำหนดรหัสผ่านของผู้ใช้งาน
MYSQL_ROOT_PASSWORD: 'example' //กำหนดรหัสผ่านของ root
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: always
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
PMA_ARBITRARY: 1
restart: always
ports:
- 8081:80
networks:
default:
name: webหลังจากที่สร้างไฟล์ docker-compose.yml ให้ใช้คำสั่ง docker-compose up -d เพื่อทำการสร้าง container ตาม script ที่ได้กำหนดไว้
