使用Docker构建PHP开发环境(PHP + MySQL + Nginx)
背景
我安装了Docker,所以我想立即尝试搭建PHP的开发环境,并将我调查的内容整理了起来。
一旦过了前一半,后面几乎变成了工作般的内容,只有在彻底理解每个部分所指的地方后,我才打算添加备注。
环境
-
- Mac OS Mojave Version 10.14
- Docker for Mac
Docker镜像
在进行环境搭建之前,先将Docker环境搭建图像放在脑海中。
-
- 首先,启动Docker即可创建一个蓝框的Docker主机。
-
- 在Docker主机中,可以运行像Nginx或Apache这样的Web服务器、MySQL或PostgreSQL这样的数据库、以及PHP或Ruby等编程环境。
-
- 在云上的Docker注册表(DockerHub)中,存储了像Nginx和MySQL等Docker镜像,下载它们后会保存在Docker主机上作为Docker镜像。
-
- Docker镜像可以使用Dockerfile自行制作。
- 通过将Docker镜像作为Docker容器运行,可以实际使用它们。
如果把它们比作冷冻食品的话,就是这样的感觉。
使用Docker进行环境配置的方法
首先,在使用Docker搭建PHP开发环境时,最基本的需要有Web服务器、PHP和数据库这三项。
接下来,用Docker准备这些必需物品的方法可以大致分为两种模式。
-
- Dockerレジストリ(DockerHub)から1つずつインストールする方法
- docker-compose.ymlファイルに記載してまとめてインストールする方法
我认为在docker-compose.yml文件中一起安装会更轻松且不容易混乱,所以我想使用这种方法。
Docker Compose:通过中文本地化描述
当你在docker-compose.yml文件中进行批量安装时,通过使用名为Docker Compose的工具来进行统一管理。(上图中的章鱼代表Docker Compose的形象)
Docker Compose是一个用于自动启动多个Docker容器的配置管理工具。它应该在安装Docker时一同安装。(如果有疑问,可以尝试在命令行中进行确认)
只要显示Docker Compose的版本信息,就没有问题。
$ docker-compose version
$ docker-compose version 1.23.2, build 1110ad01
1. 步骤 (bù
Docker Compose根据docker-compose.yml文件中的内容来管理容器。
首先准备一个文件夹,并准备以下文件结构。这只是一个例子,可以根据自己的喜好进行更改和调整。
├── docker-compose.yml
├── nginx
│ └── nginx.conf
├── php
│ ├── Dockerfile
│ └── php.ini
├── mysql
│ └── data
└── www
└── html
└── index.php
请将以下内容进行中文本地化,只需要一种选项:
“`
docker-compose.yml
“`
“`
Docker 配置文件
“`
接下来,我们要创建基础的docker-compose.yml文件。
Docker Compose根据docker-compose.yml文件中的内容来管理容器。
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 8080:80
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./www/html:/var/www/html
depends_on:
- php
php:
build: ./php
volumes:
- ./www/html:/var/www/html
depends_on:
- db
db:
image: mysql:5.7
ports:
- 13306:3306
volumes:
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- 8888:80
depends_on:
- db
nginx配置文件
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP的Dockerfile
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
php.ini -> PHP配置文件
date.timezone = "Asia/Tokyo"
www/html/index.php 可以被 paraphrase 成:
网站/html/index.php
<php
phpinfo();
启动容器
当所有的文件准备好后,使用cd命令将工作目录切换至相应位置。
输入docker-compose up -d命令将安装PHP、MySQL和Nginx三个组件。
3. 输入”$ docker ps”,以确认容器是否已经启动。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c8d70c32262 nginx:latest "nginx -g 'daemon of…" 31 minutes ago Up 31 minutes 0.0.0.0:8080->80/tcp phpproject_nginx_1
c7394112b393 phpmyadmin/phpmyadmin:latest "/run.sh supervisord…" 31 minutes ago Up 31 minutes 9000/tcp, 0.0.0.0:8888->80/tcp phpproject_phpmyadmin_1
73174d360ed4 phpproject_php "docker-php-entrypoi…" 31 minutes ago Up 31 minutes 9000/tcp phpproject_php_1
ff496b0a3cdd mysql:5.7 "docker-entrypoint.s…" 31 minutes ago Up 31 minutes 33060/tcp, 0.0.0.0:13306->3306/tcp phpproject_db_1
e1b4fae8bea7 newdeveloper/apache-php:latest "/bin/bash /run.sh" 6 hours ago Up 6 hours 0.0.0.0:32768->80/tcp apache-php
4. 访问本地主机,如果显示phpinfo,则表示正常。
使用’docker-compose up -d’命令,可以在后台启动并持续运行容器。
如果想停止容器,可以使用’$ docker-compose stop’命令。
$ docker-compose stop
Stopping phpproject_nginx_1 ... done
Stopping phpproject_phpmyadmin_1 ... done
Stopping phpproject_php_1 ... done
Stopping phpproject_db_1 ... done
要移动到工作目录,可以使用cd命令,然后使用$ docker-compose up命令来启动。
$ docker-compose up
Starting phpproject_db_1 ... done
Starting phpproject_phpmyadmin_1 ... done
Starting phpproject_php_1 ... done
Starting phpproject_nginx_1 ... done
总结
我使用的参考网站是这个。
老实说,我明白Docker很厉害,但也有很多不太懂的地方,所以我想要更多地学习。