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


 

ความคิดเห็น

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

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

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

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