Install PHP MySQL in Docker


Hôm nay chúng ta sẽ cài đặt PHP, MySQL và phpmyadmin trên docker.

Đầu tiên ta cài docker, xem bài viết sau. install docker on arch linux

Sau đó ta cài docker-compose. Download tại đây.

https://github.com/docker/compose/releases

Sau đó gõ các câu lệnh sau:

cd $HOME/Downloads
tar -xvf compose-2.2.3.tar.gz
cd compose-2.2.3
sudo make
bin/docker-compose version
mv bin/docker-compose $HOME/.local/bin/
docker-compose version

Ta tạo thư mục project tại

/run/media/dt/HDD_1T_NTFS/IT_PROJECTS/PHP_CODE/php_basic/docker_php_mysql
|-docker_php_mysql
  |-- src
     |-- index.php
  |-- Dockerfile
  |-- docker-compose.yml

Dockerfile

FROM php:7.4-apache
RUN docker-php-ext-install pdo_msql 

docker-compose.yml

version: "3.7"

services:
  # PHP container
  php:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:80
    volumes:
      - ./src:/var/www/html/

  # MySQL container
  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - "mysql_data:/var/lib/mysql" # data container
  # PHPmyadmin
  phpmyadmin:
    image: phpmyadmin
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mysql
    depends_on:
      - mysql

volumes:
    mysql_data:
        driver: local

index.php

<?php
$servername = "mysql";
$username = "root";
$password = "123456";

try {
  $conn = new PDO("mysql:host=$servername;dbname=test", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>

Ta gõ lệnh sau để tạo các container

docker-compose up -d
dt]% docker-compose up -d
[+] Running 3/0
 ⠿ Container docker_php_mysql-mysql-1       Running 0.0s
 ⠿ Container docker_php_mysql-phpmyadmin-1  Running 0.0s
 ⠿ Container docker_php_mysql-php-1         Running 0.0s
[dt-arco:docker_php_mysql]

Muốn remove container ta gõ lệnh

docker-compose down
[dt]% docker-compose down 
[+] Running 4/4
 ⠿ Container docker_php_mysql-php-1         Removed 1.6ss
 ⠿ Container docker_php_mysql-phpmyadmin-1  Removed 1.7ss
 ⠿ Container docker_php_mysql-mysql-1       Removed 2.0ss
 ⠿ Network docker_php_mysql_default         Removed 0.2ss
[dt-arco:docker_php_mysql]

Liệt kê các container

docker ps

Ta có thể xem các volume lưu trữ data.

docker volume ls

Ta truy cập web

http://localhost:8080

Ta truy cập vào mysql dùng phpmyadmin với user là root , pass là 123456.

http://localhost:8081

Ta có thể truy xuất vào mysql dùng lệnh sau, với user là root, pass là 123456

docker exec -it docker_php_mysql-mysql-1 mysql -uroot -p123456

Stop chính xác container ecda01429f85.

docker container stop ecda01429f85

Remove container ecda01429f85.

docker container remove ecda01429f85

Như vậy là ta đã setup xong php và mysql trên arch linux. Cùng nhau chiến PHP nào.