环境准备:
#docker的版本
[root@10-10-20-236 /]# docker info|grep Version
Server Version: 20.10.8
Cgroup Version: 1
Kernel Version: 5.4.127-1.el7.elrepo.x86_64
#创建目录
[root@10-10-20-236 php8]# mkdir -p /wp/{nginx,mysql,php,redis,www}
[root@10-10-20-236 php8]# tree /wp/
/wp/
├── mysql
├── nginx
├── php
├── redis
└── www
具体部署:
1.安装 Nginx,先将 nginx 的整个配置目录 copy 到宿主机,然后在运行的时候将目录绑定到 nginx 容器的配置目录,这样修改配置更加方便一些。可以起一个Nginx的容器,进去之后查看其配置编译的参数,然后设置自己的目录结构
将nginx配置目录copy宿主机
[root@10-10-20-236 wp]# docker run --name tmp-nginx -d nginx:1.19.0 [root@10-10-20-236 wp]# docker cp tmp-nginx:/etc/nginx /wp/ [root@10-10-20-236 wp]# docker cp tmp-nginx:/usr/lib/nginx/modules /usr/lib/nginx/modules [root@10-10-20-236 wp]# docker rm -f tmp-nginx
2.安装 php-fpm
因为这里需要安装一些开发时用到的 PHP 扩展,所以最好的办法是根据 Dockerfile 生成我们自己的镜像,如下是我的 Dockerfile,大家可以参考:
[root@10-10-20-236 php]# cat Dockerfile FROM php:8.0.10-fpm MAINTAINER teddylu ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtome && echo $TZ > /etc/timezon RUN apt-get update \ && apt install net-tools iputils-ping vim tree procps -y \ && apt install -y libwebp-dev libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libjpeg62-turbo-dev libmemcached-dev zlib1g-dev libevent-dev libzip-dev openssl libssl-dev libmagickwand-dev \ && pecl install igbinary \ && docker-php-ext-install -j$(nproc) pdo pdo_mysql pcntl sockets \ && pecl install redis \ && docker-php-ext-enable redis \ && pecl install imagick \ && docker-php-ext-enable imagick \ && pecl install mcrypt \ && docker-php-ext-enable mcrypt \ && pecl install memcached \ && docker-php-ext-enable memcached \ && docker-php-ext-configure opcache --enable-opcache \ && docker-php-ext-install opcache \ && docker-php-ext-install -j$(nproc) mysqli \ && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ && docker-php-ext-install -j$(nproc) gd \ && pecl install xdebug && docker-php-ext-enable xdebug \ && pecl install swoole && docker-php-ext-enable swoole
在 Dockerfile 所在目录下执行:
docker build -t php:8.0.10-lluvia .
-t 参数设置镜像名称和标签,请根据自己情况命名,镜像创建完成之后,可以像上面我们copy出nginx配置一样,将 php的相关配置也copy到宿主机。
[root@10-10-20-236 php]# docker run --name tmp-php -d php:8.0.10-lluvia [root@10-10-20-236 php]# docker cp tmp-php:/usr/local/etc /wp/php/ [root@10-10-20-236 php]# docker rm -f tmp-php
3.安装配置msyql
先创建mysql的配置文件和数据目录,并且提前准备好MySQL的配置文件,参考以下配置文件:
root@94ccf1e17970:/etc/mysql/conf.d# vi my.cnf bash: vi: command not found root@94ccf1e17970:/etc/mysql/conf.d# cat my.cnf # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL server-id = 21 log_bin = mysql-bin binlog_format = ROW sync_binlog = 1 expire_logs_days =14 gtid_mode=ON # 开启gtid enforce-gtid-consistency=ON #binlog_cache_size = 128m ##max_binlog_cache_size = 512m ##max_binlog_size = 256M general_log=ON slow_query_log=ON max_connections=4444 performance_schema_max_table_instances=400 table_definition_cache=400 performance_schema=off table_open_cache=64 innodb_buffer_pool_chunk_size=64M innodb_buffer_pool_size=64M # Custom config should go here !includedir /etc/mysql/conf.d/
[root@10-10-20-236 mysql]# mkdir -p /wp/mysql/{data,conf,mysql-files}
[root@10-10-20-236 mysql]# tree
.
├── conf
│ └── my.cnf
├── data
└── mysql-files
docker run \ --restart=always \ -v /etc/localtime:/etc/localtime:ro \ --name mysql8-lluvia \ -v /wp/mysql/data:/var/lib/mysql \ -v /wp/mysql/conf:/etc/mysql/conf.d \ -v /wp/mysql/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3306:3306 \ -d mysql:8.0.27
4.配置运行redis,创建相关的目录,并且提前准备好redis的配置文件
[root@10-10-20-236 redis]# mkdir -p /wp/redis/{data,conf}
[root@10-10-20-236 redis]# cp /wordpress/redis/conf/redis.conf /wp/redis/conf/
[root@10-10-20-236 redis]# tree
.
├── conf
│ └── redis.conf
└── data
docker run \ --restart=always \ -v /etc/localtime:/etc/localtime:ro \ -p 6379:6379 \ --name myredis6-lluvia \ -v /wp/redis/conf:/usr/local/etc/redis \ -v /wp/redis/data:/data \ -d redis:6.2.6 redis-server /usr/local/etc/redis/redis.conf
5.修改nginx,php的配置文件
重点,在Nginx的配置文件中的配置, vim /wp/nginx/conf.d/default.conf:
root /usr/share/nginx/html; location ~ \.php$ { fastcgi_pass php-fpm-container:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params;
修改的内容里面有一处需要说明,“php-fpm-container” 这个是创建的php-fpm 容器的别名,具体是在运行时候指定的,之后会用到
修改php 相关配置文件,进入 /wp/php/etc/php 下,将 php.ini-development 复制改名为 php.ini,配置内容根据自己情况修改即可
6.启动 php,nginx 容器
docker run \ --name myphp8-lluvia \ --restart=always \ --link myredis6-lluvia:redis-container \ --link mysql8-lluvia:mysql-container \ -v /etc/localtime:/etc/localtime:ro \ -v /wp/www:/var/www/html \ -v /wp/php/etc:/usr/local/etc \ -d php:8.0.10-lluvia
docker run \ --name mynginx-lluvia \ --restart=always \ -v /etc/localtime:/etc/localtime:ro \ -p 80:80 \ -p 443:443 \ --link myphp8-lluvia:php-fpm-container \ -v /wp/www:/usr/share/nginx/html \ -v /wp/nginx:/etc/nginx \ -v /wp/nginx/log:/var/log/nginx \ -d nginx:1.19.0
可选部署rabbitmq
docker run \ --name myrabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -v /rabbitmq/data:/var/lib/rabbitmq \ --hostname myRabbit \ -e RABBITMQ_DEFAULT_VHOST=my_vhost \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=123456 \ -d rabbitmq:3.9.13-management
参考:
1)https://learnku.com/articles/31344
2)https://learnku.com/articles/38186
3)https://blog.csdn.net/zhezhebie/article/details/73331335