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/*则是为了夯住容器,防止容器在运行后直接退出
chmod 777 /usr/share/nginx/wordpress -R
docker-entrypoint.sh
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镜像,这是构建的第四版wordpressrestart
: 容器崩溃时尝试重启。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
名来连接到数据库上。浏览器访问网站正常,容器化改造完成。