使用docker-compose构建PHP7.2 Apache MySQL phpMyAdmin环境


这是Docker学习笔记。

本文中的所有容器创建都是使用Docker Hub的图像完成的。
再次从Dockerfile创建映像。

目录结构

1
2
3
4
5
  .
  ├── docker-compose.yml
  └── html
  │    └── index.php
  └── php.ini

docker-compose.yml

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3'

services:
  php:
    image: php:7.2-apache
    volumes:
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=test
      - PMA_PASSWORD=test
    links:
      - mysql
    ports:
      - 4040:80
    volumes:
      - ./phpmyadmin/sessions:/sessions

index.php

html / index.php

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    php7.2-apache
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<?php phpinfo(); ?>
</body>
</html>

php.ini

php.ini

1
2
3
4
5
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

检查当前容器的运行状态

1
2
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

不显示任何内容,因为没有运行中的容器。

创建和启动容器

1
2
3
4
5
$ docker-compose up -d
Creating network "php72-apache_default" with the default driver
Creating php72-apache_mysql_1 ... done
Creating php72-apache_php_1        ... done
Creating php72-apache_phpmyadmin_1 ... done

检查容器的运行状态。

1
2
3
4
5
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS              PORTS                            NAMES
120e4b86b987        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   About a minute ago   Up About a minute   9000/tcp, 0.0.0.0:4040->80/tcp   php72-apache_phpmyadmin_1
bf42cd71d3d4        php:7.2-apache          "docker-php-entrypoi…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp             php72-apache_php_1
699f32a6424e        mysql:5.7               "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp              php72-apache_mysql_1

PHP检查

http://本地主机:8080 /

如果您更改本地html / index.php的内容,则会反映出来。

检查MySQL phpMyAdmin

http://本地主机:4040 /

服务中断

docker-compose.yml中列出的所有服务容器将被停止。

1
2
3
4
$ docker-compose stop
Stopping php72-apache_phpmyadmin_1 ... done
Stopping php72-apache_php_1        ... done
Stopping php72-apache_mysql_1      ... done

检查容器的运行状态。
使用-a选项显示已停止的容器。

1
2
3
4
5
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS               NAMES
120e4b86b987        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   3 minutes ago       Exited (0) 11 seconds ago                       php72-apache_phpmyadmin_1
bf42cd71d3d4        php:7.2-apache          "docker-php-entrypoi…"   3 minutes ago       Exited (0) 11 seconds ago                       php72-apache_php_1
699f32a6424e        mysql:5.7               "docker-entrypoint.s…"   3 minutes ago       Exited (0) 11 seconds ago                       php72-apache_mysql_1

服务开始

docker-compose.yml中列出的服务的容器运行。
容器需要预先创建。

1
2
3
4
$ docker-compose start
Starting php        ... done
Starting mysql      ... done
Starting phpmyadmin ... done
1
2
3
4
5
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                            NAMES
120e4b86b987        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   8 minutes ago       Up 10 seconds       9000/tcp, 0.0.0.0:4040->80/tcp   php72-apache_phpmyadmin_1
bf42cd71d3d4        php:7.2-apache          "docker-php-entrypoi…"   8 minutes ago       Up 11 seconds       0.0.0.0:8080->80/tcp             php72-apache_php_1
699f32a6424e        mysql:5.7               "docker-entrypoint.s…"   8 minutes ago       Up 12 seconds       3306/tcp, 33060/tcp              php72-apache_mysql_1

删除容器

停止docker-compose.yml中列出的服务的容器,该容器和网络将被删除。

1
2
3
4
5
6
7
8
$ docker-compose down
Stopping php72-apache_phpmyadmin_1 ... done
Stopping php72-apache_php_1        ... done
Stopping php72-apache_mysql_1      ... done
Removing php72-apache_phpmyadmin_1 ... done
Removing php72-apache_php_1        ... done
Removing php72-apache_mysql_1      ... done
Removing network php72-apache_default
1
2
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES