Back

การสร้าง 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 ที่ได้กำหนดไว้