通过wordpress我们可以很方便的搭建自己的博客系统,但是在备份和迁移方便有着诸多不便,尤其是数据库的迁移,因此想着可以将WordPress安装在docker中,方便了数据的迁移。
我的设备环境:
腾讯云服务器(centos 7.8)
文章目录
一、安装docker
docker的安装过程参考我另一篇博客:
https://blog.csdn.net/AnChenliang_1002/article/details/125397467
该链接的文章中第2.2节记录了docker的安装过程。
二、安装compose并创建compose脚本
2.1 什么是compose
使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,Docker Compose。
Dockerfile可以让用户管理一个单独的应用容器,而compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个project,即项目)
例如一个web服务再加上后端的数据库服务容器等
compose脚本可以实现自动化安装docker
更加详细的介绍可以参考以下文章:
Docker之compose介绍
Docker-Compose 简介
2.2 安装compose
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。
运行以下命令以下载 Docker Compose 的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果要安装其他版本的 Compose,将指令中的1.24.1换成你要使用的版本号即可。
#将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
#创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#测试是否安装成功:
docker-compose --version
结果如下图所示,说明compose安装成功了
2.3 通过compose安装WordPress容器和MySQL数据库容器
2.3.1 创建compose脚本(自动化安装docker)
cd /home
touch docker-compose.yml
然后将以下内容添加到docker-compose.yml中
version: '3.3'
services:
db:
image: mysql:5.5
container_name: "wordpress_mysql"
ports:
- "3307:3306"
volumes:
- $PWD/db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD:数据库root密码
MYSQL_DATABASE: wordpress
MYSQL_USER: yangfeiwu
MYSQL_PASSWORD: 数据库yangfeiwu用户密码
wordpress:
depends_on:
- db
image: wordpress:latest
container_name: "wordpress"
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: yangfeiwu
WORDPRESS_DB_PASSWORD: 数据库yangfeiwu用户密码
WORDPRESS_DB_NAME: wordpress
WORDPRESS_WPLANG: zh-CN
volumes:
- $PWD/wp-content:/var/www/html/wp-content
注意:
1、此脚本中指定了一个MySQL容器和WordPress容器,
2、其中MySQL容器使用的镜像是mysql:5.5
,创建出的容器名称是wordpress_mysql
,并将主机的3307端口映射到MySQL容器内的3306端口;
3、WordPress容器使用的镜像是wordpress:latest
,创建出的容器名称是wordpress
,并将主机的80端口映射到WordPress容器内的80端口,并且需要使用容器内的数据库3306端口;
4、上面我把mysql数据库端口映射到了3307,主机的3306先保留吧。
5、MySQL中和WordPress中需要填写名称和密码的地方,请自己设置并牢记。
我自己设置的密码记录在了https://blog.csdn.net/AnChenliang_1002/article/details/112613680,以防自己忘记。
2.3.2 执行compose脚本生成MySQL容器和WordPress容器
进入docker-compose.yml所在目录,执行以下脚本
cd /home
docker-compose up -d # -d 表示启动容器后进入后台运行
如果遇到以下报错:
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in "./docker-compose.yml", line 13, column 22
那就好好检查第13行的第22个字符的格式,yml对格式要求很严格,我这边的问题是:和密码
之间必须要有空格,而我当时多删除了一个空格的;其实用vim打开该文件可以看出来,如下图所示是正确的情况,冒号是红的,然后后面是个空格,在后面是用户名,是绿的
当然这里要附上错误的情况,如下图所示,则是中间少了个空格
最终脚本执行成功后的界面:
此时使用docker Images
可以看到刚刚生成的两个镜像,使用docker ps
可以看到正在运行的两个容器;如下图所示:
此时我们的运行在docker里的WordPress就搭建成功了。可以通过你服务器的ip地址(例如:http://192.168.1.200/)访问你的博客了。
2.3.3 博客系统初始化
经过上面的步骤,我们就可以通过我们服务器的ip(或者域名)来登录我们的博客系统了,输入ip(或域名)就进入了博客的初始化界面,如下图所示:
我这边选择了中文,一步步的往下操作即可,
登录后即可
然后我们可以发布一篇文章,用以验证备份和迁移后的效果。
三、WordPress的备份和迁移
3.1 备份容器
首先我们使用docker commit
指令将运行中的wordpress容器和mysql容器打包成镜像:
docker commit -a "anchenliang" -m "creat new wordpress img" c1a03af8bc57 worepress:worepress_bak_0325
docker commit -a "anchenliang" -m "creat new wordpress_mysql img" 6545fc7d6c54 worepress_mysql:worepress_mysql_bak_0325
然后docker images可以看到新生成了两个镜像;如下图
然后使用docker save指令将刚刚生成的镜像保存为tar文件:
docker save -o worepress_mysql_bak_0325.tar worepress_mysql:worepress_mysql_bak_0325
docker save -o worepress_bak_0325.tar worepress:worepress_bak_0325
然后可以看到当前目录下生成了这两个镜像的tar文件,如下图所示:
此时就可以将两个tar文件拷贝出来,转移到另一个服务器上;因为我只有一个服务器,因此我只能将原来的所有镜像都删掉,然后上传刚刚两个tar文件,在同一个服务器上模拟迁移过程。
先将运行的容器停止:
然后将容器删除,
再将所有的镜像删除:
此时服务器设备中没有了任何镜像,也没有任何容器;
3.2 迁移容器
将上一步生成的两个tar包放到新服务器的/home下,
用docker load
指令将镜像加载到系统中
此时可以看到系统中有了我们生成的两个镜像:
创建一个docker-compose.yml文件将以下内容添加到docker-compose.yml中
version: '3.3'
services:
db:
image: worepress_mysql:worepress_mysql_bak_0325
container_name: "wordpress_mysql"
ports:
- "3307:3306"
volumes:
- $PWD/db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: hik12345
MYSQL_DATABASE: wordpress
MYSQL_USER: anchenliang
MYSQL_PASSWORD: hik12345
wordpress:
depends_on:
- db
image: worepress:worepress_bak_0325
container_name: "wordpress"
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: anchenliang
WORDPRESS_DB_PASSWORD: hik12345
WORDPRESS_DB_NAME: wordpress
WORDPRESS_WPLANG: zh-CN
volumes:
- $PWD/wp-content:/var/www/html/wp-content
然后执行以下命令创建容器:
docker-compose up -d # -d 表示启动容器后进入后台运行
可以看到生成了对应的容器,
此时访问域名或ip,发现我们的博客系统也能正常访问,而且迁移之前发的博客也都还在