烂泥:wordpress迁移到docker

本文由ilanniweb提供友情赞助,首发于烂泥行天下

jenkins技术分享QQ群:571981257

这几天抽了个时间,终于把自己阿里云ecs的os升级到了centos7,所以也打算把博客wordpress也升级下,同时还要使用现在比较火的docker技术。

下面把相关wordpress迁移到docker中的相关步骤记录下。

PS:强烈建议OS使用3.0以上内核。

一、备份wordpress数据

在正式迁移wordpress之前,我们需要备份wordpress的相关数据,包括数据库、图片以及主题。

有关wordpress数据库的备份,就是个仁者见仁智者见智的事情了,你通过什么方法都可以备份的。我这边的做法是在本地的一个环境上,使用navicat这个mysql数据库管理工具,把数据传输到本地的环境上。

wordpress图片和主题都在wp-content这个目录下,我们只需要备份这个目录即可。

二、安装docker及其相关软件

wordpress相关数据备份完毕后,我们现在开始安装docker及其相关软件。

2.1 安装docker

docker的安装我们可以分为使用脚本快速安装和配置yum源安装,下面分别介绍下。

2.1.1 脚本快速安装

docker的安装比较简单,我们可以直接使用官方提供的脚本快速安装命令进行安装,如下:

curl -fsSL https://get.docker.com/ | sh

当然我们也可以使用国内提供的脚本快速安装命令,如下:

curl -sSL https://get.daocloud.io/docker | sh

2.1.2 配置yum源安装

通过配置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

2.1.3 普通用户添加docker权限

如果我们想让普通用户也具有使用docker权限,只需要把该用户添加到docker用户组即可。现在以ilanni这个用户为例,如下:

cat /etc/group |grep docker

sudo usermod -aG docker ilanni

su – ilanni

docker ps

2.1.4 docker开机启动

默认情况下docker是没有开机启动的,使用下面命令使docker开机启动,如下:

systemctl start docker && systemctl enable docker

2.2 安装docker-compose

因为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

2.3 安装iptables

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。

3.1 下载mysql5.5镜像

因为我现在wordpress的数据库使用的mysql5.5版本,所以我们也要下载mysql5.5的docker镜像,使用如下命令:

docker pull hub.c.163.com/library/mysql:5.5

如果要使用官方提供的mysql5.5镜像,使用如下命令:

docker pull mysql:5.5

3.2 下载wordpress镜像

wordpress镜像我们使用最新的版本即可,下载最新版本的镜像命令如下:

docker pull hub.c.163.com/library/wordpress

如果要使用官方提供的wordpress镜像,使用如下命令:

docker pull wordpress

对于wordpress提供的多个版本,我们使用的是包含有apache、php、php-fpm的latest版本。

对于只提供wordpress功能的版本,我们会在以后的文章进行相关讲解。

四、编写docker-compose.yml文件

为了管理容器的方便在此我们使用的是docker-compose来进行的,当然你也可以对每个docker镜像单独来运行。

但是在这为了迁移的方便,我们在这直接使用docker-compose来进行管理。

对于docker-compose,我们只需要编写docker-compose.yml文件,即可。示例如下:

vim docker-compose.yml

version: ‘2‘

services:

mysqldb:

image: 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

image: 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/

五、导入wordpress备份数据

通过上述章节,我们可以看到ilanni_mysql容器已经正常启动了。

现在我们把wordpress备份的数据导入到新的数据库中,使用navicat进行数据传输如下:

通过上图,我们可以看到wordpress数据已经被恢复到新的数据库ilanni_mysql中了。

其他的备份数据,我们只需要复制到对应的目录下即可。

六、启动容器

其实我们在前面已经启动了容器,之所以我们再次说要启动容器,是因为我们在第五章节中刚刚把原来备份的数据恢复到新的环境中。

现在我们只需要重启容器即可,使用如下命令:

docker-compose restart

现在我们来访问下刚刚恢复数据后的wordpress,如下:

通过上图,我们可以看出wordpress已经全部迁移过去了。

七、配置iptables规则

因为没有启用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

ip a    

八、配置wordpress上传图片权限

按照上述步骤迁移完毕后,在发布文章时,你会发现wordpress提示你没有上传图片的权限。

这个应该是wordpress镜像的一个bug,需要我们修改wordpress镜像的upload目录的权限,如下:  
docker exec -it ilanni_wordpress /bin/bash

chown www-data:www-data -R wp-content/uploads/

时间: 2024-11-10 11:37:05

烂泥:wordpress迁移到docker的相关文章

WordPress迁移Azure之二WordPress部署

上一篇:WordPress迁移Azure之一PHP环境部署 通过上一篇文章,我们已经在环境中成功的部署了PHP环境,下面我们要做的是下载wordpress程序,并进行部署. 上篇文章中未描述关于My SQL的部署,基本都是普通配置,如果有特殊需求,可以查询My SQL帮助文档. wordpress 下载地址:http://cn.wordpress.org/ 在开始之前,我们先安装一个MySQL工具,PHPMyAdmin 在inetpub\wwwroot\路径下创建phpadmin目录 打开 li

面面观 | 从服务迁移到docker的想法和总结

01关于docker 最近在研究把服务从以前的虚拟机的方式,迁移到Docker的方式. 这样做的好处非常多.并且感觉上也是未来的趋势. 创业公司在做软件的时候,开始总是纠结成本.对比发现,其实做互联网创业真的是越来越容易了,首先不用像早期一样去购买机器,然后跑IDC,安装调试系统了,直接去aws申请个账号,就可以有服务器了,而且服务器增加随时都可以,只要鼠标点几下就可以了,大大节省了运维成本.新智云(www.enncloud.cn) 02docker的优势 既然越来越多的公司开始接受aws,这样

wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]

总的问题有两个,一是apache的配置,二是mysql的导出和导入.以及迁移后遇到的一些问题解决过程和方法. A机器为老server.B为新server,A机器使用Appserv,B使用wmap,在配置多网站时候,遇到了一点儿不同. 除了都要打开httpd.conf Include conf/extra/httpd-vhosts.conf LoadModule rewrite_module modules/mod_rewrite.so 在httpd-vhosts.conf中配置多网站相应的文件夹

wordpress 迁移网站更改域名解决图片无法显示

1.两种方法 (1).允许mysql远程登录 命令>CREATE USER 'root'@'%' IDENTIFIEDBYPASSWORD'*password';GRANTALLPRIVILEGESON*.*TO'root'@'%' IDENTIFIEDBYPASSWORD'*password' WITHGRANTOPTIONMAX_QUERIES_PER_HOUR 0MAX_CONNECTIONS_PER_HOUR 0MAX_UPDATES_PER_HOUR 0MAX_USER_CONNECT

WordPress迁移Azure之一PHP环境部署

原文链接:http://www.jerrysay.com/394.html 今天做为本套课程的第一部分,我们先来带大家进行本地的PHP环境部署,便于我们进行POC测试以及模拟客户的生产环境.好了不讲故事了,我们开始吧. 环境介绍: 1. Microsoft Windows Server 2008 R2 2. IIS 3. php-5.6.4-nts-Win32-VC11-x64 a) 下载地址:http://windows.php.net/download/ b) c) 为什么选择Non Thr

docker 构建lamp 之wordpress发布(中)

内网:172.16.1.66 外网:10.0.0.66   基于wordpress 镜像构建worpress容器 [[email protected] ~]# docker built -t csphere/wordpress:4.2  ./docker-training/wordpress/ [[email protected] ~]# docker run -d -p 80:80  --name  wordpress  -e WORDPRESS_DB_HOST=172.16.1.66 -e 

无忧之道:Docker中容器的备份、恢复和迁移

原创:LCTT https://linux.cn/article-5967-1.html译者: GOLinux本文地址:https://linux.cn/article-5967-1.html 2015-8-6 15:02    评论: 2 收藏: 3 今天,我们将学习如何快速地对docker容器进行快捷备份.恢复和迁移.Docker是一个开源平台,用于自动化部署应用,以通过快捷的途径在称之为容器的轻量级软件层下打包.发布和运行这些应用.它使得应用平台独立,因为它扮演了Linux上一个额外的操作

Docker教程:Docker镜像导出及迁移

http://blog.csdn.net/pipisorry/article/details/51330126 Docker目录分析 安装docker时,默认的安装位置是/var/lib/docker. $sudo ls /var/lib/docker/ aufs  containers  graph  init  linkgraph.db  repositories-aufstmp  trust  volumes repositories-aufs:记录了镜像名称以及对应的Id的json文件

用docker快速搭建wordpress博客

WordPress是一个非常著名的PHP编写的博客平台,发展到目前为止已经形成了一个庞大的网站平台系统.在WP上有规模庞大的插件和主题,可以帮助我们快速建立一个博客甚至网站. 在Windows上可以非常方便的安装WordPress,因为IIS上集成了WordPress的一键安装包.而在Linux上安装WordPress就比较复杂了,我们需要配置PHP环境.Apache或者Nginx服务器.MySQL数据库以及各种权限和访问问题.所以在Linux上最好的办法就是使用Docker来安装WordPre