วิธีทำ 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 ไปแล้วก็ได้นะอันนี้แล้วแต่จะเลือกวิธีการแก้ปัญหาได้เลยครับ


 

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Oracle date format จัด format date ให้แสดง พศ และ เดือน ภาษาไทยหรือตามภาษาที่เราเลือก

java -Xms , java -Xmx กำหมด memory ให้ JVM เพื่อป้องกันปัญหา Out of Memory

Java this กับ super การใช้งานคำสั่ง this กับ super ใน ภาษา Java