Docker部署Nginx+Php-fpm+mysql+wordpress

内容纲要

使用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;
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注