Personal learning records
wordpress容器化改造
wordpress容器化改造

wordpress容器化改造

DockerFile

wordpress基于centos7.9.2009,首先在ecs中下载docker-ce,并配置阿里云ACR镜像加速器(详见阿里云容器镜像加速器-阿里云开发者社区 (aliyun.com)

  • FROM centos:centos7.9.2009
    • 使用CentOS 7.9.2009作为基础镜像。
  • LABEL maintainer="normal 18893004336@163.com"
    • 设置我的信息。
  • RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \
    • 下载安装阿里云的EPEL源,主要用于下载nginx软件包。
  • && yum install -y nginx \
    • 安装Nginx。
  • && yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm \
    • 安装Remi仓库,用于获取更多版本的PHP。
  • && yum install -y php80-php-xsl php80-php php80-php-cli php80-php-devel php80-php-gd php80-php-pdo php80-php-mysql php80-php-fpm
    • wordpress后端基于php,需要安装php相关扩展
  • ADD wordpress-6.4.2-zh_CN.tar.gz /usr/share/nginx
    • 将WordPress解压到Nginx的Web发布目录。
  • COPY nginx.conf /etc/nginx/
    • 将本地的nginx.conf复制到容器内nginx的配置目录下。
  • COPY docker-entrypoint.sh /
    • 将Docker启动脚本移动至根目录。
  • CMD ["sh","/docker-entrypoint.sh"]
    • 指定容器启动时运行的默认命令,运行上一步的docker-entrypoint.sh脚本

Dockerfile

FROM centos:centos7.9.2009
LABEL maintainer=”normal 18893004336@163.com
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \
&& yum install -y nginx \
&& yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm \
&& yum install -y php80-php-xsl php80-php php80-php-cli php80-php-devel php80-php-gd php80-php-pdo php80-php-mysql php80-php-fpm
ADD wordpress-6.4.2-zh_CN.tar.gz /usr/share/nginx
COPY nginx.conf /etc/nginx/
COPY docker-entrypoint.sh /
CMD [“sh”,”/docker-entrypoint.sh”]

运行脚本将wordpress的安装目录权限改为777,方便存入wordpress生成的wp-config.php文件(文件中存着数据库的连接信息,在wordpress初始化时生成)。

nginx命令用来qidongnginx服务

/opt/remi/php80/root/usr/sbin/php-fpm用来启动php-fpm

tail -f /var/log/nginx/*则是为了夯住容器,防止容器在运行后直接退出

docker-entrypoint.sh

chmod 777 /usr/share/nginx/wordpress -R
nginx
/opt/remi/php80/root/usr/sbin/php-fpm
echo “nginx 和 php 启动成功”
tail -f /var/log/nginx/*

docker-compose

核心思想为定义两个服务,web以及db,web就是Docker封装的wordpress镜像。

  • web:
  • image: 使用WordPress:v4.0的Docker镜像,这是构建的第四版wordpress
  • restart: 容器崩溃时尝试重启。
  • container_name: 将容器的名称设为 w-web
  • hostname: 设置主机名为 wordpress
  • ports: 将主机的80端口映射到容器的80端口,浏览器通过访问本博客。
  • networks: 将服务连接到名为 wordpress 的Docker网络,这个网络是我提前创建好的,在compose的最后使用
    – networks:
    wordpress:
    external: true。
    表明网络是外部创建的,负责会一直报名为wordpress未定义的错误。
  • depends_on: 表示web服务依赖于 db 服务,确保 db 服务在 web 启动之前启动。
  • db:
  • image: 使用提前拉下来的MySQL版本为5.7.44的Docker镜像。
  • restart: 容器崩溃时尝试重启。
  • container_name: 将容器的名称设为 w-db,在wordpress进行初始化时可以通过这个名称来连接到数据库上。
  • hostname: 设置主机名为 mysql
  • environment: 设置MySQL容器的环境变量,包括root密码、新建的数据库名和上海时区。
  • ports: 将主机的3306端口映射到容器的3306端口,允许通过外部工具连接到MySQL数据库。
  • volumes: 将本地 ./db_data 目录映射到容器内的 /var/lib/mysql 目录,以保持MySQL数据的持久化,保证db容器崩溃时数据不丢失。
  • command: 额外的MySQL启动参数,包括一些mysql最大连接数,字符集等。
  • networks: 将服务连接到名为 wordpress 的Docker网络。
  • healthcheck: 设置健康检查,每10秒检查一次MySQL是否可用。超时时间为10s,尝试次数为3次。

docker-compose.yml

version: ‘3’
services:
web:
image: wordpress:v4.0
restart: always
container_name: w-web
hostname: wordpress
ports:
– “80:80”
networks:
– wordpress
depends_on:
– db
db:
image: mysql:5.7.44
restart: always
container_name: w-db
hostname: mysql
environment:
MYSQL_ROOT_PASSWORD: J***********
MYSQL_DATABASE: wordpress
TZ: Asia/Shanghai
ports:
– 3306:3306
volumes:
– ./db_data:/var/lib/mysql
command:
–max_connections=1000
–character-set-server=utf8mb4
–collation-server=utf8mb4_general_ci
–default-authentication-plugin=mysql_native_password
networks:
– wordpress
healthcheck:
test: [“CMD-SHELL”, “curl –silent localhost:3306 >/dev/null || exit 1”]
interval: 10s
timeout: 10s
retries: 3
– networks:
wordpress:
external: true

通过运行docker-compose -f docker-compose.yml up -d,在后台启动docker-compose,wordpress通过连接w-db名来连接到数据库上。浏览器访问网站正常,容器化改造完成。

发表回复

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