Home Docker 容器化部署wordpress By FreelyTomorrow Jul 18, 2023 4 min read 容器化部署wordpress 通过dockerfile,supervisior和docker-compose容器化搭建wordpress博客 使用Dockerfile构建通过Supervisor管理进程的wordpress镜像 FROM centos:7.9.2009 #配置镜像的yum源,方便后面下载软件 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \ && yum install wget -y \ && wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \ && yum makecache fast \ #配置PHP8.0以上版本的yum源 && yum install yum-utils -y \ && yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \ && yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm \ && yum-config-manager --disable 'remi-php*' \ && yum-config-manager --enable 'remi-php80' \ && yum install php-cli php-common php-devel php-embedded php-gd php-mcrypt php-mbstring php-pdo php-xml php-fpm php-mysqlnd php-opcache php-pecl-memcached php-pecl-redis php-pecl-mongodb php-json php-pecl-apcu php-pecl-apcu-devel -y \ #创建PHP-FPM的运行目录(pid文件存放路径) && mkdir -p /run/php-fpm \ #配置php-fpm运行用户 && sed -i '/^user/c user = nginx' /etc/php-fpm.d/www.conf \ && sed -i '/^group/c group = nginx' /etc/php-fpm.d/www.conf \ #安装Nginx && yum install nginx -y \ #安装Supervisor容器多进程管理软件 && yum install supervisor -y \ #安装unzip以便后续解压wordpress压缩包 && yum install unzip -y \ #下载并解压缩wordpress && wget -O /latest-zh_CN.zip https://cn.wordpress.org/latest-zh_CN.zip \ && unzip /latest-zh_CN.zip \ && rm -rf /latest-zh_CN.zip \ #重设wordpress文件属主为nginx(与nginx,php-fpm的运行用户保持一致)_ && chown -R nginx.nginx /wordpress \ #关闭Supervisor的后台运行 && sed -i 's/nodaemon=false/nodaemon=true/g' /etc/supervisord.conf \ #清除yum cache,减小镜像文件大小 && yum clean all #将Supervisor进程管理文件复制到指定目录下(supervisor.ini文件内容在后面) COPY supervisor.ini /etc/supervisord.d/ #暴露端口 EXPOSE 80 EXPOSE 443 #设置工作目录,这样当我们想要操作容器时,一进来就是这个目录 WORKDIR /wordpress #通过Supervisor去启动nginx和php-fpm CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"] 使用Supervisor管理容器中的Nginx和php-fpm Supervisor让容器能够在前台运行多个进程,并实时侦测进程状态,当进程意外终止时,Supervisor自动重新启动进程。 [program:nginx] command=nginx -g 'daemon off;' autostart=true autorestart=true startsecs=5 redirect_stderr=true stdout_logfile_maxbytes=20MB stdout_logfile_backups=20 stdout_logfile=/var/log/supervisor/nginx.log [program:php-fpm] command=/usr/sbin/php-fpm autostart=true autorestart=true startsecs=5 redirect_stderr=true stdout_logfile_maxbytes=20MB stdout_logfile_backups=20 stdout_logfile=/var/log/php-fpm/phpfpm.log 参数讲解: command=nginx -g 'daemon off;' 启动进程的命令 autostart=true 当容器启动时自动执行进程 autorestart=true 发现进程终止后自动重启进程 startsecs=5 只有进程启动并成功运行指定时间后才认定为启动成功 redirect_stderr=true 重定向进程的stderr输出给supervisord stdout_logfile_maxbytes=20MB 日志文件的最大比特值 stdout_logfile_backups=20 由于进程标准输出日志文件轮换而要保留的备份数量 stdout_logfile=/var/log/php-fpm/phpfpm.log 日志存放路径 详情参见:http://supervisord.org/configuration.html#program-x-section-settings 使用docker-compose创建并管理多个容器 由于wordpress需要使用mysql作为后台数据库,因此我们还需要一个mysql镜像,使用docker-compose可以快速部署两个镜像,并完成部分基本配置 创建docker-compose.yml配置文件如下: version: "3" services: db: image: mysql:5.7.25 command: - --default_authentication_plugin=mysql_native_password - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wcy199545.. MYSQL_DATABASE: my_blog MYSQL_USER: wordpress MYSQL_PASSWORD: wcy199545.. networks: mynet1: ipv4_address: 172.19.0.2 wordpress: depends_on: - db image: chunyiwang/wordpress:v1 ports: - "80:80" - "443:443" volumes: - nginxconf:/etc/nginx/ - wordpressfiles:/wordpress/ restart: always networks: mynet1: ipv4_address: 172.19.0.3 volumes: db_data: nginxconf: wordpressfiles: networks: mynet1: ipam: config: - subnet: 172.19.0.0/24 启动容器 docker-compose -f docker-compose.yml up -d 修改nginx配置文件,配置proxy_pass将请求转发给9000端口的php-fpm,接下来并访问IP地址,就可以进入到wordpress安装界面了。 Read Next By FreelyTomorrow Aug 16, 2024 使用Terraform在Ubuntu中部署KVM虚拟机 使用Terraform部署KVM虚拟机的详细流程 运维技术 Terraform KVM By FreelyTomorrow Jun 11, 2024 MySQL/Redis相关面试题 数据库运维(MySQL和Redis)的面试题总结 运维技术 MySQL Redis By FreelyTomorrow May 9, 2024 事件源模式和传统数据库方法在数据管理上的优劣分析 对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践 云原生 By FreelyTomorrow Apr 24, 2024 关于Metrics_server在自托管环境下无法使用的问题 修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。 Kubernetes
By FreelyTomorrow Aug 16, 2024 使用Terraform在Ubuntu中部署KVM虚拟机 使用Terraform部署KVM虚拟机的详细流程 运维技术 Terraform KVM
By FreelyTomorrow May 9, 2024 事件源模式和传统数据库方法在数据管理上的优劣分析 对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践 云原生
By FreelyTomorrow Apr 24, 2024 关于Metrics_server在自托管环境下无法使用的问题 修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。 Kubernetes
使用Dockerfile构建通过Supervisor管理进程的wordpress镜像
使用Supervisor管理容器中的Nginx和php-fpm
Supervisor让容器能够在前台运行多个进程,并实时侦测进程状态,当进程意外终止时,Supervisor自动重新启动进程。
参数讲解:
详情参见:http://supervisord.org/configuration.html#program-x-section-settings
使用docker-compose创建并管理多个容器
由于wordpress需要使用mysql作为后台数据库,因此我们还需要一个mysql镜像,使用docker-compose可以快速部署两个镜像,并完成部分基本配置
创建docker-compose.yml配置文件如下:
启动容器
修改nginx配置文件,配置proxy_pass将请求转发给9000端口的php-fpm,接下来并访问IP地址,就可以进入到wordpress安装界面了。
Read Next
使用Terraform在Ubuntu中部署KVM虚拟机
使用Terraform部署KVM虚拟机的详细流程
MySQL/Redis相关面试题
数据库运维(MySQL和Redis)的面试题总结
事件源模式和传统数据库方法在数据管理上的优劣分析
对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践
关于Metrics_server在自托管环境下无法使用的问题
修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。