บทความนี้สอนวิธีติดตั้ง PHP, NGINX, MySQL และ Adminer ด้วย Docker ผ่านเครื่องมือ Docker Compose ซึ่งใช้สำหรับจัดการ containers มากกว่า 1 containers พร้อมกันได้อย่างมีประสิทธิภาพ เราจะได้เรียนรู้วิธีการเขียนคำสั่งลงใน docker-compose.yml เพื่อติดตั้ง services ต่างๆ โดยมีรายละเอียดดังนี้
ตัวอย่าง โปรแกรมที่จะติดตั้งด้วย Docker Compose
1. PHP คือบริการสำหรับรันโค้ดภาษา PHP
2. NGINX คือ Web Server เพื่อรันเว็บไซต์
3. MySQL คือ ฐานข้อมูลที่ทำหน้าที่จัดเก็บข้อมูลของเว็บไซต์
4. Adminer คือ Web base interface เพื่อใช้งาน MySQL
ตัวอย่าง วิธีติดตั้ง PHP NGINX MySQL ด้วย Docker Compose
1. สร้าง docker-compose.yml ลงใน folder project ที่ต้องการ และเขียนคำสั่งดังนี้
version: '3'
services:
web:
image: nginx:latest
ports:
- "8000:80"
volumes:
- ./site:/var/www/html
- ./site.conf:/etc/nginx/conf.d/default.conf
links:
- php
php:
build:
context: php
dockerfile: Dockerfile
volumes:
- ./site:/var/www/html
adminer:
image: adminer:latest
restart: always
ports:
- 8080:8080
db:
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
จากตัวอย่างติดตั้งทั้งหมด 4 บริการ คือ
- web คือ ติดตั้ง NGINX เปิด ports 8000
- php คือ ติดตั้ง PHP
- adminer คือ ติดตั้ง Adminer เปิด ports 8080
- db คือ ติดตั้ง MySQL ให้เปลี่ยนรหัสผ่าน และชื่อ database ตามที่ต้องการ
2. สร้าง folder php และสร้าง Dockerfile ไว้ภายใน folder ดังกล่าว และเขียนคำสั่งด้านล่าง คือติดตั้ง PHP และ driver สำหรับเชื่อมต่อ MySQL แบบ PDO
FROM php:fpm
RUN docker-php-ext-install pdo_mysql
3. สร้างไฟล์ชื่อ site.conf เพื่อกำหนดการตั้งค่าให้กับ Service NGINX ดังนี้
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
4. สร้าง folder ชื่อ site เพื่อจัดเก็บไฟล์เว็บไซต์ และสร้างไฟล์ index.php พร้อมเขียนโค้ดเพื่อทดสอบการทำงาน
<?php
phpinfo();
?>
5. รัน Docker Compose ด้วยคำสั่ง
docker-compose up
6. ทดสอบเข้าเว็บไซต์ด้วย URL ด้านล่างหากไม่พบข้อผิดพลาดจะแสดงหน้ารายละเอียดของ PHP
http://localhost:8000
7. ทดสอบ MySQL และ Adminer ด้วย URL ด้านล่าง และเข้าสู่ระบบด้วย
Username = root
Password = rootpassword
หากมีการเปลี่ยน Password ให้เข้าด้วยข้อมูลที่กำหนดไว้
http://localhost:8080
8. ทดลองเขียนโค้ด PHP เชื่อมต่อ MySQL ผ่าน Service db ที่กำหนดไว้ใน Docker Compose เมื่อรันแล้วหากสำเร็จจะขึ้นข้อความว่า "เชื่อมต่อฐานข้อมูล MySQL สำเร็จ"
<?php
$host = "db";
$username = "myuser";
$password = "mypassword";
$dbname = "mydatabase";
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "เชื่อมต่อฐานข้อมูล MySQL สำเร็จ";
} catch(PDOException $e) {
echo "ไม่สามารถเชื่อมต่อได้เพราะ " . $e->getMessage();
}
?>
9. กรณีต้องการหยุดการทำงานของ Docker ให้ใช้คำสั่ง
docker-compose down