ไม่ขอเกริ่นเกี่ยวกับ Docker นะครับ สำหรับการ Deploy แอปพลิเคชันสมัยใหม่แบบ Docker-based application (แบบเดิม monolithic applications) ด้วย Docker images บนตัว Docker รันไทม์หลัก ๆ แล้ว images มาจาก 3 แหล่งครับ
- คลัง Docker Hub registry
- Public registry (community images/Docker Native)
- และ Private registry image (Custom Docker Containers)
โดยที่คลังเก็บ images บน Docker Hub registry จะแบ่งประเภทของ images ไว้ 2 ประเภทคือ
- Official Images
เป็น Official Images ดูแลโดย Docker เป็น open-source images ที่ drop-in เข้ามาให้จาก Docker อยู่แล้ว คล้ายกับ repositories ดิสโทร Linux ของแต่ละค่ายนั้นแหละครับ
เช่น NGINX, MongoDB, Redis, MySQL, MariaDB เป็นต้น - และ Verified Publisher
จะเป็นพวก images จากเจ้าของผลิตภัฑณ์ซอฟต์แวร์ดูแลเอง
เป็น private repositories ที่ certified infrastructure ให้กับแพลตฟอร์ม
เช่น SAP HANA โดย SAP SE.
Certified containers กับ Docker containers ต่างกันอย่างไร?
Certified containers | Docker containers | |
SSH access level | สิทธิ์ผู้ใช้ | สิทธิ์ root |
Server security patching | PasS เช่น Jelastic* | Customer |
Automatic config. tuning และ optimization | yes | no |
Advanced orchestration integration (deployment, SSL installation อื่นๆ) | yes | |
Technical support | yes | |
Server software quality | production-grade |
* Architecture ของ Jelastic ค่อนข้างแตกต่างกับ GCP หรือ AWS ที่เป็นตัวติดต่อกับคอนเทนเนอร์รันไทม์
ที่นี้หากเราจับ containers โดยใช้ images จาก Certified containers หรือ Community มามัดรวมกันเราจะเรียก Docker Composeโดยลักษณะนี้จะอยู่บน Marketplace ที่เจ้าของแพลฟอร์ม ทำ preconfigured ปรับจูน Stack มาให้เสร็จสรรพแล้วครับ
หรือให้เข้าใจได้ง่าย ๆ ก็คือ Docker Compose มันเอาไว้รัน multi-container applications บน Docker นั้นเองครับ (สร้าง containers หลาย ๆ อันขึ้นมาเป็น Stack เช่น PHP Application Stack เป็นต้น)
โดย Stack ที่ว่านี้อาจประกอบไปด้วย images ของซอฟต์แวร์ต่าง ๆ ดังนี้
- nginx
- mariadb
- memcached
- phpmyadmin
- และ php-fpm
เมื่อเขียนไฟล์เสร็จสรรพแล้วก็สั่ง build service ด้วย command “docker-compose up -d”เพื่อสร้าง containers
ซึ่งใน Compose file ของ WordPress Cluster Stack จะมีการ deploy images ต่าง ๆ ประกอบร่างขึ้นเป็น Environment พร้อมใช้
ตัวอย่าง ไฟล์ docker-compose.yml
services:
db:
image: mariadb:latest
container_name: phppos_mariadb
restart: always
volumes:
- ./mariadb/initdb/:/docker-entrypoint-initdb.d
- ./mariadb/data/:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root456
- MYSQL_DATABASE=phpapp
- MYSQL_USER=phpapp
- MYSQL_PASSWORD=phpapp456
php:
build: ./php
container_name: phppos_php-fpm
restart: always
volumes:
- ./www/:/var/www/html
expose:
- "9000"
nginx:
image: nginx:stable-alpine
container_name: phppos_nginx
restart: always
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./logs/nginx:/var/log/nginx
volumes_from:
- php
ports:
- "8080:80"
memcache:
image: memcached
container_name: phppos_memcached
ports:
- "11211:11211"
pma:
image: phpmyadmin/phpmyadmin
container_name: phppos_phpmyadmin
restart: always
ports:
- "8000:80"
เช่นเดียวกันหากคุณต้องการ Deploy แอปพลิเคชันบน Cloud ก็ทำวิธีเดียวกันนี้ครับ
ปกติผู้ให้บริการคลาว์ดพร้อมเสริฟให้คุณบน Marketplace อยู่แล้ว ส่วนจะ Deploy บน Orchestration เช่น Kubernetes (K8s), Jelastic Orckestrator หรือ System containers ไหนก็แล้วแต่เงินในกระเป๋าเลย 55++)
ไม่ต้องควักตังค์มาก มีทอน เช่น LXC/LXD, OpenVZ/Virtuozzo, BSD jails, Linux vServer, อื่นๆ
สำหรับแพลตฟอร์ม Jelastic PaaS อาวุธปล่อยนำวิถีใช้ Virtuozzo ครับ.