0. 准备:
# 运行docker
sudo systemctl start docker
# 创建网络
docker network create nm
1. 复制配置文件到宿主机:
# 创建宿主机目录结构
mkdir -p /www/nginx/logs
mkdir -p /www/php71
mkdir -p /www/php72
mkdir -p /www/web
# 创建 nginx 容器
docker run -d --name nginx -p 80:80 --network nm nginx
# 复制 nginx 配置文件
docker cp nginx:/etc/nginx/conf.d /www/nginx
docker cp nginx:/etc/nginx/nginx.conf /www/nginx
# 创建 php 容器
docker run -d --name php71 -p 9001:9000 --network nm php:7.1-fpm
docker run -d --name php72 -p 9002:9000 --network nm php:7.2-fpm
# 复制 php 配置文件
docker cp php71:/usr/local/etc/php-fpm.d/www.conf /www/php71
docker cp php71:/usr/local/etc/php/php.ini-development /www/php71/php.ini
docker cp php72:/usr/local/etc/php-fpm.d/www.conf /www/php72
docker cp php72:/usr/local/etc/php/php.ini-development /www/php72/php.ini
# 销毁容器
docker rm -vf nginx php71 php72
2. 创建容器, 挂载目录:
# 创建 nginx 容器
# -v 说明:
# 第1个: 挂载 nginx 主配置文件
# 第2个: 挂载 nginx 站点配置目录
# 第3个: 挂载日志
# 第4个: 挂载 html 文件目录
docker run -d --name nginx -p 80:80 --network nm \
-v /www/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /www/nginx/conf.d:/etc/nginx/conf.d \
-v /www/nginx/logs:/var/log/nginx \
-v /www/web:/www/web \
nginx
# 创建 php 容器
# -v 说明:
# 第1个: 挂载 php-fpm 配置文件
# 第2个: 挂载 php 配置文件
# 第3个: 挂载 html 文件目录
docker run -d --name php71 -p 9001:9000 --network nm \
-v /www/php71/www.conf:/usr/local/etc/php-fpm.d/www.conf \
-v /www/php71/php.ini:/usr/local/etc/php/php.ini \
-v /www/web:/www/web \
php:7.1-fpm
docker run -d --name php72 -p 9002:9000 --network nm \
-v /www/php72/www.conf:/usr/local/etc/php-fpm.d/www.conf \
-v /www/php72/php.ini:/usr/local/etc/php/php.ini \
-v /www/web:/www/web \
php:7.2-fpm
3. 安装php扩展gdiconvpdomysql(参考:https://hub.docker.com//php):
# 进入容器
docker exec -it php71 bash
# 安装`pdo_mysql`扩展:
docker-php-ext-install pdo_mysql
# 安装`gd`和`iconv`扩展(如果失败, 请去官网复制):
apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
# 退出容器
exit
4. 配置站点:
4.1. 默认站点:
server {
listen 80;
server_name default.ddd;
root /www/web/default;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location = /50x.html {
root /www/web/default;
}
location ~ \.php$ {
# root html;
fastcgi_pass php71:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
4.2. 默认其它站点:
server {
listen 80;
server_name pintuu.ddd;
root /www/web/pintuu;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location = /50x.html {
root /www/web/pintuu;
}
location ~ \.php$ {
# root html;
fastcgi_pass php72:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
4.3. 上传网站代码;
4.4. 重启nginx:
docker restart nginx
5. 安装mysql
5.1. 复制配置文件到宿主机:
# 创建目录(该目录在启动镜像之前要保证为空, 否则密码可能错误)
mkdir -p /www/mysql/data
# 创建容器
docker run -d --name mysql --rm -p 3306:3306 --network nm \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7.25
# 复制配置文件
docker cp mysql:/etc/mysql/conf.d /www/mysql
# 删除容器
docker rm -vf mysql
5.2. 创建mysql容器,挂载目录:
docker run -d --name mysql --rm -p 3306:3306 --network nm \
-v /etc/localtime:/etc/localtime \
-v /www/mysql/mysql_data:/var/lib/mysql \
-v /www/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7.25
5.3. 测试连接:
docker exec -it mysql mysql -uroot -p123456