วิธีทำ Docker Compose LAMP Stack Linux Apache MySQL PHP
ก่อนที่จะทำขั้นตอนนี้ ให้ทำการติดตั้ง Docker , Docker Compose ให้เรียบร้อยก่อนนะครับ
Docker Compose LAMP Stack Step 1
เตรียมโครงสร้าง Directory ไว้ตามรูปนี้ครับ
docker-web
www
- index.php
- docker-compose.yml
- Dockerfile
สร้าง folder docker-web ที่ข้างในประกอบด้วย
1. folder www เอาไว้เก็บ file web app ของเราครับตรงนี้จะ map path เข้ากับ
/var/www/html/ ของ apache ครับ
2. file docker-compose.yml ตรงนี้คือหัวใจในการ config Docker compose เรานั่นเอง
3. Dockerfile เอาไว้กำหนด docker images ที่เราต้องการใช้ครับ
Docker Compose LAMP Stack Step 2
ใส่ content ใน file Dockerfile ตามด้านล่างนี้เลย
FROM php:7.1.2-apache
RUN docker-php-ext-install mysqli
Docker Compose LAMP Stack Step 3
ใส่ content ใน file docker-compose.yml ตามด้านล่างนี้เลย
version: "3.3"
services:
www:
build: .
ports:
- "8001:80"
volumes:
- ./www:/var/www/html/
links:
- database
networks:
- default
database:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: testDb
MYSQL_USER: test_user
MYSQL_PASSWORD: test1234
MYSQL_ROOT_PASSWORD: root1234
volumes:
- persistent:/var/lib/mysql
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db:db
ports:
- 8000:80
volumes:
persistent:
แถม phpMyadmin ให้ด้วยเลยนะครับ
Docker Compose LAMP Stack Step 4
ลองเขียน PHP Connect MySQL ดูนะครับ แก้ไฟล์ index.php ด้วยคำสั่งนี้เลย
$conn = mysqli_connect('database', 'test_user', 'test1234', 'testDb');
Docker Compose LAMP Stack Step 5
เสร็จแล้วทำการ Start Docker compose ด้วยคำสั่งนี้เลย
docker-compose up -d
เพียงเท่านี้ก็เป็นอันเรียบร้อยครับ ลองเข้าใช้งาน web app เราได้ที่ port 8001 หรือ เข้าใช้งาน phpMyAdmin ได้ที่ port 8000 ได้เลยนะ
http://127.0.0.1:8001 (เข้า webapp เราเอง)
http://127.0.0.1:8000 (เข้า phpMyAdmin)
เพิ่มเติมครับหลังจากมีเพื่อนๆ ลองแล้ว ได้ error ตอน connect mysql
mysqli_connect(): the server requested authentication method unknown to the client [caching_sha2_password]
เป็นปัญหาตอน authen mysql 8 นะครับถ้าเราไม่ต้องการใช้ sha2
ให้เพิ่ม config ใน docker compose ตามนี้ครับ
command: ['mysqld','--default-authentication-plugin=mysql_native_password']
เพิ่มเติมครับหลังจากมีเพื่อนๆ ลองแล้ว ได้ error ตอน connect mysql
mysqli_connect() server sent charset (255) unknown to the client
เป็นปัญหาเรื่องการใช้ default charset ครับ
วิธีแก้ให้เพิ่ม config ใน docker compose ตามนี้ครับ
command: ['mysqld','--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
หรือหากใครเจอ error ทั้งสองตัวนี้ก็ใส่ command ทั้ง 3 ตัวเข้าไปพร้อมกันเลยนะครับ คั่นด้วย comma ไปเรื่อยๆ นะ เอาจริงๆ ขั้นตอนนี้ถ้าเราไม่ทำที่ Docker compose เราเข้าไปแก้ config ของ MySQL หลังจากที่ Deploy ไปแล้วก็ได้นะอันนี้แล้วแต่จะเลือกวิธีการแก้ปัญหาได้เลยครับ
ความคิดเห็น
แสดงความคิดเห็น