本文由ilanniweb提供友情赞助,首发于烂泥行天下php
jenkins技术分享QQ群:571981257html
这几天抽了个时间,终于把本身阿里云ecs的os升级到了centos7,因此也打算把博客wordpress也升级下,同时还要使用如今比较火的docker技术。 mysql
下面把相关wordpress迁移到docker中的相关步骤记录下。 git
PS:强烈建议OS使用3.0以上内核。github
在正式迁移wordpress以前,咱们须要备份wordpress的相关数据,包括数据库、图片以及主题。 web
有关wordpress数据库的备份,就是个仁者见仁智者见智的事情了,你经过什么方法均可以备份的。我这边的作法是在本地的一个环境上,使用navicat这个mysql数据库管理工具,把数据传输到本地的环境上。 sql
wordpress图片和主题都在wp-content这个目录下,咱们只须要备份这个目录便可。 docker
wordpress相关数据备份完毕后,咱们如今开始安装docker及其相关软件。 数据库
docker的安装咱们能够分为使用脚本快速安装和配置yum源安装,下面分别介绍下。 apache
docker的安装比较简单,咱们能够直接使用官方提供的脚本快速安装命令进行安装,以下:
curl -fsSL https://get.docker.com/ | sh
固然咱们也可使用国内提供的脚本快速安装命令,以下:
curl -sSL https://get.daocloud.io/docker | sh
经过配置yum源方式安装docker就比较简单,只须要在本地配置yum仓库配置便可。在此咱们使用的中科大的docker仓库,配置以下:
vim /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
yum仓库配置完毕后,咱们如今开始安装docker,以下:
yum -y install docker-engine
若是咱们想让普通用户也具备使用docker权限,只须要把该用户添加到docker用户组便可。如今以ilanni这个用户为例,以下:
cat /etc/group |grep docker
sudo usermod -aG docker ilanni
su – ilanni
docker ps
默认状况下docker是没有开机启动的,使用下面命令使docker开机启动,以下:
systemctl start docker && systemctl enable docker
由于wordpress须要使用多个docker镜像,因此在此咱们使用docker-compose编排工具,进行管理。
安装docker-compose,使用以下命令:
curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose –version
centos7默认状况使用的是firewalld做为防火墙,可是对firewalld非常不熟悉,因此仍是打算使用iptables。
下面安装iptables,使用以下命令:
yum -y install iptables-services iptables
把iptables加入到系统服务,使用以下命令:
cp /usr/libexec/iptables/iptables.init /etc/init.d/iptables
/etc/init.d/iptables start
/etc/init.d/iptables status
把iptables设置为开机启动,使用以下命令:
systemctl enable iptables
systemctl list-unit-files | grep iptables
关闭firewalld服务,使用以下命令:
systemctl disable firewalld.service
systemctl status firewalld.service
PS:docker及其相关软件安装完毕后,强烈建议重启服务器。
在本次wordpress迁移到docker中,咱们须要两个镜像mysql镜像和wordpress镜像。其中wordpress镜像中包含apache、php和wordpress,而mysql镜像提供数据库服务。
PS:不管是wordress镜像仍是mysql镜像都提供了多个版本,好比:wordpress镜像中有的只提供wordpress功能,没有提供php功能等等。
可是此次为了迁移的方便,咱们只使用wordpress提供的所有功能。
除此以外,考虑到众所周知的缘由,咱们使用国内网易的蜂巢docker。
由于我如今wordpress的数据库使用的mysql5.5版本,因此咱们也要下载mysql5.5的docker镜像,使用以下命令:
docker pull hub.c.163.com/library/mysql:5.5
若是要使用官方提供的mysql5.5镜像,使用以下命令:
docker pull mysql:5.5
wordpress镜像咱们使用最新的版本便可,下载最新版本的镜像命令以下:
docker pull hub.c.163.com/library/wordpress
若是要使用官方提供的wordpress镜像,使用以下命令:
docker pull wordpress
对于wordpress提供的多个版本,咱们使用的是包含有apache、php、php-fpm的latest版本。
对于只提供wordpress功能的版本,咱们会在之后的文章进行相关讲解。
为了管理容器的方便在此咱们使用的是docker-compose来进行的,固然你也能够对每一个docker镜像单独来运行。
可是在这为了迁移的方便,咱们在这直接使用docker-compose来进行管理。
对于docker-compose,咱们只须要编写docker-compose.yml文件,便可。示例以下:
vim docker-compose.yml
version: '2'
services:
mysqldb:
p_w_picpath: hub.c.163.com/library/mysql:5.5
container_name: ilanni_mysql
ports:
- "33033:3306"
volumes:
- ./data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: ilanni
MYSQL_USER: wwwilanni
MYSQL_PASSWORD: ilanni123
wordpress:
depends_on:
- mysqldb
p_w_picpath: hub.c.163.com/library/wordpress
container_name: ilanni_wordpress
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: ilanni_mysql:3306
WORDPRESS_DB_NAME: ilanni
WORDPRESS_DB_USER: wwwilanni
WORDPRESS_DB_PASSWORD: ilanni123
volumes:
- ./wp-content/themes/xiu_ilanni:/var/www/html/wp-content/themes/xiu_ilanni
- ./wp-content/plugins:/var/www/html/wp-content/plugins
- ./wp-content/uploads:/var/www/html/wp-content/uploads
- ./favicon.ico:/var/www/html/favicon.ico
- ./alivv.txt:/var/www/html/alivv.txt
上述的docker-compose.yml文件中,咱们建立了两个容器ilanni_mysql和ilanni_wordpress,其中- ./data:/var/lib/mysql的意思是把容器中的/var/lib/mysql目录映射到本地的data目录下。
- ./alivv.txt:/var/www/html/alivv.txt意思是把本地的alivv.txt文件挂载到容器为/var/www/html/alivv.txt文件。
- "33033:3306"意思是把容器中的3306端口映射为本地33033端口。
depends_on意思是一个容器依赖与另一个容器。
docker-compose.yml文件编写完毕后,咱们就能够启动容器了。使用以下命令:
docker-compose up -d
docker ps
经过上图咱们能够很明显的看出,ilanni_mysql和ilanni_wordpress这个容器已经建立完毕。
PS:上述docker-compose.yml文件相关的环境变量中,咱们均可以在对应docker镜像中看到对应的函数。
mysql镜像的对应变量,能够经过以下链接进行查看:
https://hub.docker.com/r/library/mysql/
wordpress镜像的对应变量,能够经过以下链接进行查看:
https://hub.docker.com/r/library/wordpress/
经过上述章节,咱们能够看到ilanni_mysql容器已经正常启动了。
如今咱们把wordpress备份的数据导入到新的数据库中,使用navicat进行数据传输以下:
经过上图,咱们能够看到wordpress数据已经被恢复到新的数据库ilanni_mysql中了。
其余的备份数据,咱们只须要复制到对应的目录下便可。
其实咱们在前面已经启动了容器,之因此咱们再次说要启动容器,是由于咱们在第五章节中刚刚把原来备份的数据恢复到新的环境中。
如今咱们只须要重启容器便可,使用以下命令:
docker-compose restart
如今咱们来访问下刚刚恢复数据后的wordpress,以下:
经过上图,咱们能够看出wordpress已经所有迁移过去了。
由于没有启用firewalld服务,因此这个牵涉到有关iptables规则的配置。
下面是正确配置的iptables规则,以下:
cat /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [263:15384]
:INPUT ACCEPT [135:7704]
:OUTPUT ACCEPT [104:6272]
:POSTROUTING ACCEPT [232:13952]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.1/16 ! -o docker0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
-A INPUT -i br-eaa791e079d2 -j ACCEPT
-A FORWARD -o br-eaa791e079d2 -j DOCKER
-A FORWARD -o br-eaa791e079d2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br-eaa791e079d2 ! -o br-eaa791e079d2 -j ACCEPT
-A FORWARD -i br-eaa791e079d2 -o br-eaa791e079d2 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22022 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
上述iptables规则中,咱们须要关注nat规则和filter规则,对于nat规则中咱们只须要关注POSTROUTING中ip地址便可。
该ip地址就是docrer0网卡的ip地址,咱们能够经过ip a命令进行查看,以下:
ip add
对于filter规则中,须要咱们关注以下规则:
:DOCKER - [0:0]
-A FORWARD -o br-d63b827b6fc9 -j DOCKER
-A FORWARD -o br-d63b827b6fc9 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br-d63b827b6fc9 ! -o br-d63b827b6fc9 -j ACCEPT
-A FORWARD -i br-d63b827b6fc9 -o br-d63b827b6fc9 -j ACCEPT
其中br-d63b827b6fc9为docker所在机器的桥接网卡地址,若是docker所在机器有多块网卡的话,咱们能够经过登陆进入docker容器查看ip地址,就能够获得该容器运行时所使用的宿主机的网卡。
示例以下:
docker exec -it ilanni_mysql /bin/bash
按照上述步骤迁移完毕后,在发布文章时,你会发现wordpress提示你没有上传图片的权限。
这个应该是wordpress镜像的一个bug,须要咱们修改wordpress镜像的upload目录的权限,以下:
docker exec -it ilanni_wordpress /bin/bash
chown www-data:www-data -R wp-content/uploads/