[Docker EP.011] ทำความรู้จัก Docker compose

Natthakarn Pruksapong
Touch Technologies
Published in
3 min readJan 15, 2019
ผลการค้นหารูปภาพสำหรับ 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

“ เราไม่ได้ถูกต้องที่สุด แต่เราแสดงสิ่งที่เราทำ ”

--

--