内容纲要
使用docker部署nginx、php-fpm、mysql服务,并且把对应的配置和数据文件都挂载到宿主机文件夹下。当是容器销毁后重建时能够还原配置和数据,只需要对宿主机的文件就行备份即可。
docker安装过程不再记录,有兴趣可以查看ubuntu20.04版本下docker安装。
1.准备工作
#创建网络
docker network create mynetwork
#创建所需的宿主机目录
mkdir /home/nginx/ /home/logs/ /home/mysql
2.使用容器部署mysql,这里使用mysql5.7版本
# 获取image
docker pull mysql:5.7
# 运行mysql容器
docker run --name mysql-5.7 \
-v /home/mysql/mysql-data:/var/lib/mysql \
-v /home/mysql/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=你的root密码 \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress数据库密码 \
-e MYSQL_DATABASE=wordpress \
--net mynetwork \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
#容器销毁后重新创建,直接使用上面创建的数据库配置
docker run --name mysql-5.7 \
-v /home/mysql/mysql-data:/var/lib/mysql \
-v /home/mysql/my.cnf:/etc/mysql/my.cnf \
--net mynetwork \
-d mysql:5.7
3.创建php-fpm,让nginx可以运行php网站
#制作Dockerfile,给官方image增加mysqli数据库连接组件
FROM php:7.4.33-fpm-alpine
RUN docker-php-ext-install mysqli
CMD ["php-fpm"]
#构建镜像
docker build -t myphp7.4
#启动容器
#将容器内/var/www 目录映射出来,这样nginx转发的php项目可以放在
#宿主机的/home/www是顶级目录,php项目都可以放置在这个目录下
#比如wordpress路径为/home/www/wordpress
#比如phpadmin路径为/home/www/phpadmin
docker run --name myphp7.4 \
-v /home/www/:/var/www/ \
--net mynetwork \
-d \
myphp7.4
4.创建nginx
#拉取进行image
docker pull nginx:1.23.4-alpine
#创建一个临时容器,将nginx的配置文件复制到宿主机挂载目录
docker run -it -d --name testNginx nginx:1.23.4-alpine
docker exec -it testNginx sh
docker cp testNginx:/etc/nginx/nginx.conf /home/nginx/
docker cp testNginx:/etc/nginx/conf.d /home/nginx/
docker stop testNginx
docker rm testNginx
#启动容器
docker run --name nginx \
-v /home/www/:/var/www/ \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/logs/nginx/:/var/log/nginx \
-e TZ="Asia/Shanghai" \
--net mynetwork \
-p 80:80 \
-p 443:443 \
-d \
nginx:1.23.4-alpine
nginx配置文件
server {
listen 80;
listen [::]:80;
server_name www.example.com;
index index.php index.html index.htm;
root /var/www/wordpress;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/wordpress;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
root /var/www/wordpress; #这里的地址是php-fpm容器中的目录路径
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}