旧服务器到期,没有低价续费的机会了,所以把相关服务迁移到了现在的服务器上,为了方便以后类似的迁移,打算将服务全员容器化。
本篇文章容器化的服务有 MySQL、WordPress、Nginx。
首先安装 Docker 服务,这里参考官方文档
# 初始化 Repository
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 当然,推荐使用阿里的镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker 引擎
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动 Docker
systemctl enable docker
systemctl start docker
# 在家目录创建一个目录,作为 Docker 挂载点
cd ~
mkdir docker_data
然后,创建一个 Docker 网络,将我们需要的服务都纳入到这个网络下,方便容器间通信。
# 创建一个名为 web 的网络,采用桥接模式
docker network create --driver bridge web
# 查看是否创建成功
docker network ls
创建 MySQL 容器
# 拉取 MySQL 镜像
docker pull mysql:5.7
# MySQL~起洞!
docker run \
-d \
-p 3306:3306 \
--name mysql5.7 \
--network=web 网络 \
--env MYSQL_ROOT_PASSWORD=自定义密码 \
--env MYSQL_DATABASE=数据库名称,一般写 wordpress \
mysql:5.7
创建 WordPress 容器
# 拉取 WordPress 镜像
docker pull wordpress
# WordPress~起洞!
# 这里使用宿主机的 8080 端口,后面 Nginx 使用 80 端口
docker run \
-d \
-p 8080:80 \
--name wordpress \
--network=web \
--env WORDPRESS_DB_HOST=mysql5.7 \
--env WORDPRESS_DB_NAME=wordpress \
--env WORDPRESS_DB_USER=root \
--env WORDPRESS_DB_PASSWORD=自定义密码 \
--volume /root/docker_data/wordpress:/var/www/html \
wordpress
# 注意,这里的 mysql5.7 实际上是上面创建的 MySQL 容器名,因为他们都在同一个网络下,可以通过容器名通信
创建 Nginx 容器
# 拉取 Nginx 镜像
docker pull nginx
# Nginx~起洞!
# Nginx 的配置麻烦一些,因为涉及到各种配置文件
# 需要一步一步将文件 copy 出来,直接挂载空目录会报错
# 先去挂载点创建好目录
cd ~
mkdir -p docker_data/nginx/html
mkdir -p docker_data/nginx/conf
mkdir -p docker_data/nginx/log
cd docker_data/nginx
# 创建一个临时的 Nginx 容器,用于 copy 文件
docker run -d --rm --name nginx-tmp -p 80:80 nginx
# 将容器中的 /usr/share/nginx/html 下面的所有文件拷贝到挂载点(不能用*,要用.)
docker cp nginx-tmp:/usr/share/nginx/html/. ./html
# 将容器中的 /etc/nginx 下面所有的文件拷贝到挂载点
docker cp nginx-tmp:/etc/nginx/. ./conf
# 将容器中 /var/log/nginx 下面的文件拷贝到挂载点
docker cp nginx-tmp:/var/log/nginx/. ./log
# 所有挂载点都设置好后,就可以创建真正的 Nginx 容器了,删掉之前临时的容器
docker rm -f nginx-tmp
# Nginx~起洞!
docker run \
-d \
--name nginx \
-p 80:80 \
-p 443:443 \
-v 挂载点/html:/usr/share/nginx/html \
-v 挂载点/conf:/etc/nginx \
-v 挂载点/log:/var/log/nginx \
--network=web \
nginx
配置 Nginx 配置文件
server {
# SSL 访问端口号为 443
listen 443 ssl;
# 填写绑定证书的域名
server_name xxx.com www.xxx.com;
# 证书文件名称
ssl_certificate /etc/nginx/ssl/xxx.com.cert;
# 私钥文件名称
ssl_certificate_key /etc/nginx/ssl/xxx.com.key;
ssl_session_timeout 5m;
# 请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
# 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/wordpress.access.log;
error_log /var/log/nginx/wordpress.error.log;
location / {
# 注意,这里的 wordpress 实际上是上面创建的 WordPress 容器名,因为他们都在同一个网络下,可以通过容器名通信
proxy_pass http://wordpress/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
# 填写绑定证书的域名
server_name xxx.com www.xxx.com;
# 把http的域名请求转成https
return 301 https://$host$request_uri;
}
# 这里的证书相关文件放在了 Nginx 配置文件目录下,配置 HTTPS 的话需要自己准备好域名和证书
然后,输入域名,开始安装 WordPress。
参考资料