[Docker EP.011] ทำความรู้จัก Docker compose
Docker Compose คืออะไร
Docker compose นั้นว่าง่ายๆ จะคล้ายๆกับ script คำสั่ง ที่เอาไว้สร้าง container หลายๆอันขึ้นมาพร้อมกัน โดยใช้คำสั่งเดียว ซึ่งปกติเราเวลาจะสร้างเจ้า container จะสร้างจาก image ตัวอย่างเช่น ถ้าจะทดสอบ wordpress เราจะต้องสร้างเจ้า container mysql , container httpd หรือ container nginx หรือ อาจมากกว่านั้นในกรณีที่เป็นโปรเจคอื่นที่ใช้ technology/service เยอะๆ และมันเชื่อมต่อกัน
ปัญหาคือเราก็ต้องมาสร้าง container ทีละอัน และทำการ config ทีละอัน อีกที ซึ่งมันจะเสียเวลาอย่างมาก
เพราะปัญหาที่กล่าวมาข้างต้นเลยเกิด docker compose ขึ้นมา คือเราสามารถกำหนดไว้ในไฟล์ docker-compose.yml เลย ว่าใช้ services อะไรบ้าง ตั้งค่าไรบ้าง จากนั้นก็ใช้คำสั่ง run command เจ้า docker-compose โดยใช้คำสั่ง docker-compose up -d
แค่บรรทัดเดียว มันก็จะทำการสร้าง container ทุกๆอันให้เราอัตโนมัติ ตามค่า config ที่เราตั้งไว้
คำสั่งใน 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 อยู่เริ่มต้นทำงานเสร็จแล้ว
เรามาลองเชื่อม MySQL phpmyadmin mongodb กัน
สร้างไฟล์ที่ชื่อว่า docker-compose.yml ใส่โค้ดดังนี้ และทำการ savefile จากนั้นสร้าง Folder เพื่อเก็บ Data ขึ้นมา 2 Folder ในที่นี้ชื่อว่า data และ datamongo โดยทั้งหมดนี้อยู่ใน Folder เดียวกัน
version: '3.1'
services:
mysql:
image: mysql:5.7
ports:
- 3308:3306
volumes:
- "./data:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: testhaha
mongo:
image: mongo
restart: always
volumes:
- "./datamongo:/data/db"
ports:
- 27017:27017
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8000:80
environment:
PMA_PASSWORD: 1234
PMA_USER: root
PMA_HOSTS: mysql
ก่อนที่เราจะใช้ docker ทุกครั้งต้องทำการตรวจสอบก่อนว่าได้เปิด docker แล้วหรือไม่ โดยใช้คำสั่ง docker-machine start
และเราต้องตรวจสอบให้แน่ใจว่าที่เราจะเขียน command นั้นอยู่ที่ Folder ที่เราสร้างมาแล้วหรือไม่
จากนั้นใช้คำสั่ง docker-compose up -d
หากไม่ขึ้นตามภาพให้ลองเปลี่ยน Port ตัวหน้าแล้วลองทำการ up อีกครั้ง
จากนั้นลองเข้าไปดูที่หน้า web 192.168.99.100:8000 โดย ip นี้สามารถเช็คได้โดยใช้คำสั่ง docker-machine ip
ตอนนี้เราก็จะสามารถเชื่อมต่อตัว phpMyAdmin กับ mySQL แล้วส่วน Mongo เราจะเข้าไปเช็คที่ โปรแกรม NoSQLBooster for MongoDB โดยครั้งแรกเข้าโปรแกรมแล้วกดที่ Connect > Create จากนั้นใส่ ip และกด Test Connection
Touch Technologies
“ เราไม่ได้ถูกต้องที่สุด แต่เราแสดงสิ่งที่เราทำ ”