Devdit
 

วิธีติดตั้ง PHP NGINX MySQL ด้วย Docker Compose

1.3K

บทความนี้สอนวิธีติดตั้ง 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

 

สรุป บทความนี้เราได้เรียนรู้วิธีการติดตั้ง PHP NGINX MySQL และ Adminer เพื่อพัฒนาเว็บไซต์บน Docker ด้วยเครื่องมือ Docker Compose ซึ่งรองรับการจัดการ containers พร้อมกันได้อย่างมีประสิทธิภาพ พร้อมกับวิธีการทดสอบ และการพัฒนาเว็บไซต์ด้วยสภาพแวดล้อม Docker

แก้ไข 1 ปีที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ