การใช้ container ใน docker เพื่อพัฒนา php web application

การใช้ container ใน docker เพื่อพัฒนา php web application

สมมติเราพัฒนาใน windows โครงสร้างประมาณนี้
 
C:\docker\server  // จัดการ container
C:\docker\mysql_data  // กับข้อมูลของฐานข้อมูล mysql
C:\docker\server\www  // สำหรับเก็บไฟล์ php

1. สร้างไฟล์ docker-compose.yml ใน



version: '3.7'

services:
  mysql:
  #  image: mysql:latest
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: examplepassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
      MYSQL_CHARSET: utf8mb4
      MYSQL_COLLATION: utf8mb4_unicode_ci       
    ports:
      - "3306:3306"
    volumes:
      - ../mysql_data:/var/lib/mysql

  php_apache:
    image: php:8.1-apache
  #  image: php
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./www:/var/www/html
    depends_on:
      - mysql

  phpmyadmin:
 #   image: phpmyadmin/phpmyadmin
    image: phpmyadmin
    restart: always
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: examplepassword
    depends_on:
      - mysql

2. รันคำสั่ง ผ่าน command ใน path ส่วนจัดการ container

docker-compose up -d





3. ไฟล์ index.php สำหรับทดสอบ

<?php  
// สังเกตว่าตรง localhost เราจะต้องเปลี่ยนเป็นชื่อ container ฐานข้อมูล
// เนื่องจากในที่นี่กำหนดเป็นชื่อ mysql ในไฟล์ docker-compose.yml
$mysqli = new mysqli("mysql", "root","examplepassword","mydb");  
if ($mysqli->connect_errno) {  
    printf("Connect failed: %s\n", $mysqli->connect_error);  
    exit();  
}  
if(!$mysqli->set_charset("utf8")) {  
    printf("Error loading character set utf8: %s\n", $mysqli->error);  
    exit();  
}

phpinfo();

3. ถ้า mysqli ไม่ทำงานหรือ ᩴextension ของ php ตัวใดไม่ทำงาน ให้ไปที่ส่วนของ container ที่เป็น php apache ที่เราใช้งาน
จากนั้นเรียกใช้คำสั่ง 2 คำสั่งนี้ในส่วนของ command ดังตัวอย่างด้านล่าง

docker-php-ext-install mysqli
apachectl restart

รันคำสั่งพร้อมกัน ก็จะสามารถใช้งาน การเชื่อมต่อกับฐานข้อมูล





< Back รวม Snippets










เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ