[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

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

--

--