爛泥:wordpress遷移到docker

本文由ilanniweb提供友情贊助,首發於爛泥行天下php

jenkins技術分享QQ羣:571981257html

這幾天抽了個時間,終於把本身阿里雲ecs的os升級到了centos7,因此也打算把博客wordpress也升級下,同時還要使用如今比較火的docker技術。 mysql

下面把相關wordpress遷移到docker中的相關步驟記錄下。 git

PS:強烈建議OS使用3.0以上內核。github

1、備份wordpress數據

在正式遷移wordpress以前,咱們須要備份wordpress的相關數據,包括數據庫、圖片以及主題。 web

有關wordpress數據庫的備份,就是個仁者見仁智者見智的事情了,你經過什麼方法均可以備份的。我這邊的作法是在本地的一個環境上,使用navicat這個mysql數據庫管理工具,把數據傳輸到本地的環境上。 sql

wordpress圖片和主題都在wp-content這個目錄下,咱們只須要備份這個目錄便可。 docker

2、安裝docker及其相關軟件

wordpress相關數據備份完畢後,咱們如今開始安裝docker及其相關軟件。 數據庫

2.1 安裝docker

docker的安裝咱們能夠分爲使用腳本快速安裝和配置yum源安裝,下面分別介紹下。 apache

2.1.1 腳本快速安裝

docker的安裝比較簡單,咱們能夠直接使用官方提供的腳本快速安裝命令進行安裝,以下:

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

clip_p_w_picpath001

固然咱們也可使用國內提供的腳本快速安裝命令,以下:

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

clip_p_w_picpath002

yum倉庫配置完畢後,咱們如今開始安裝docker,以下:

yum -y install docker-engine

clip_p_w_picpath003

2.1.3 普通用戶添加docker權限

若是咱們想讓普通用戶也具備使用docker權限,只須要把該用戶添加到docker用戶組便可。如今以ilanni這個用戶爲例,以下:

cat /etc/group |grep docker

sudo usermod -aG docker ilanni

su – ilanni

docker ps

clip_p_w_picpath004

2.1.4 docker開機啓動

默認狀況下docker是沒有開機啓動的,使用下面命令使docker開機啓動,以下:

systemctl start docker && systemctl enable docker

clip_p_w_picpath005

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

clip_p_w_picpath006

2.3 安裝iptables

centos7默認狀況使用的是firewalld做爲防火牆,可是對firewalld非常不熟悉,因此仍是打算使用iptables。

下面安裝iptables,使用以下命令:

yum -y install iptables-services iptables

clip_p_w_picpath007

把iptables加入到系統服務,使用以下命令:

cp /usr/libexec/iptables/iptables.init /etc/init.d/iptables

/etc/init.d/iptables start

/etc/init.d/iptables status

clip_p_w_picpath008

把iptables設置爲開機啓動,使用以下命令:

systemctl enable iptables

systemctl list-unit-files | grep iptables

clip_p_w_picpath009

關閉firewalld服務,使用以下命令:

systemctl disable firewalld.service

systemctl status firewalld.service

clip_p_w_picpath010

PS:docker及其相關軟件安裝完畢後,強烈建議重啓服務器。

3、下載鏡像

在本次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

clip_p_w_picpath011

clip_p_w_picpath012

若是要使用官方提供的mysql5.5鏡像,使用以下命令:

docker pull mysql:5.5

clip_p_w_picpath013

3.2 下載wordpress鏡像

wordpress鏡像咱們使用最新的版本便可,下載最新版本的鏡像命令以下:

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

clip_p_w_picpath014

若是要使用官方提供的wordpress鏡像,使用以下命令:

docker pull wordpress

clip_p_w_picpath015

對於wordpress提供的多個版本,咱們使用的是包含有apache、php、php-fpm的latest版本。

對於只提供wordpress功能的版本,咱們會在之後的文章進行相關講解。

4、編寫docker-compose.yml文件

爲了管理容器的方便在此咱們使用的是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

clip_p_w_picpath016

clip_p_w_picpath017

上述的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

clip_p_w_picpath018

經過上圖咱們能夠很明顯的看出,ilanni_mysql和ilanni_wordpress這個容器已經建立完畢。

PS:上述docker-compose.yml文件相關的環境變量中,咱們均可以在對應docker鏡像中看到對應的函數。

mysql鏡像的對應變量,能夠經過以下鏈接進行查看:

https://hub.docker.com/r/library/mysql/

clip_p_w_picpath019

wordpress鏡像的對應變量,能夠經過以下鏈接進行查看:

https://hub.docker.com/r/library/wordpress/

clip_p_w_picpath020

5、導入wordpress備份數據

經過上述章節,咱們能夠看到ilanni_mysql容器已經正常啓動了。

如今咱們把wordpress備份的數據導入到新的數據庫中,使用navicat進行數據傳輸以下:

clip_p_w_picpath021

clip_p_w_picpath022

clip_p_w_picpath023

經過上圖,咱們能夠看到wordpress數據已經被恢復到新的數據庫ilanni_mysql中了。

其餘的備份數據,咱們只須要複製到對應的目錄下便可。

6、啓動容器

其實咱們在前面已經啓動了容器,之因此咱們再次說要啓動容器,是由於咱們在第五章節中剛剛把原來備份的數據恢復到新的環境中。

如今咱們只須要重啓容器便可,使用以下命令:

docker-compose restart

clip_p_w_picpath024

如今咱們來訪問下剛剛恢復數據後的wordpress,以下:

clip_p_w_picpath025

clip_p_w_picpath026

經過上圖,咱們能夠看出wordpress已經所有遷移過去了。

7、配置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

clip_p_w_picpath027

上述iptables規則中,咱們須要關注nat規則和filter規則,對於nat規則中咱們只須要關注POSTROUTING中ip地址便可。

該ip地址就是docrer0網卡的ip地址,咱們能夠經過ip a命令進行查看,以下:

ip add

clip_p_w_picpath028

對於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    
clip_p_w_picpath029

8、配置wordpress上傳圖片權限

按照上述步驟遷移完畢後,在發佈文章時,你會發現wordpress提示你沒有上傳圖片的權限。

這個應該是wordpress鏡像的一個bug,須要咱們修改wordpress鏡像的upload目錄的權限,以下:  
docker exec -it ilanni_wordpress /bin/bash

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

相關文章
相關標籤/搜索