wordpress 迁移到 docker
1 环境&工具
- 环境:Ubuntu 16.04
- 工具:
- docker
- docker-compose
2 导出原博客数据
目前没有找到较好的docker数据迁移方法(太菜了),所以用wordpress的插件All-in-One Wp Migration
导出数据,迁移完成后再用此插件导入。
如图:

选择导出到文件
,博客内容将导出到xxx.wpress
文件。
3 安装Docker 和 Docker-compose
3.1 安装 Docker
#下载旧版本docker(如果有)
sudo apt-get remove docker docker-engine docker.io containerd runc
#更新索引包
sudo apt-get update
#安装必要软件,允许apt通过HTTPS使用存储库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
#添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#验证密钥
sudo apt-key fingerprint 0EBFCD88
#显示如下
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
#设置软件源信息
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
#更新索引包
sudo apt-get update
#安装Docker-ce
sudo apt-get install docker-ce docker-ce-cli containerd.io
#验证安装
sudo docker run hello-world
3.2 安装 Docker-compose
#下载docker-compose稳定版
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
#建立软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#验证安装
docker-compose --version
4 构建wordpress镜像
docker官方镜像默认不开启ssl,需要手动开启以及添加证书。
- 将ssl证书放到和
dockerfile
同一个目录下 - 证书文件有三个:
xxx.key
、xxx_chain.crt
、xxx_public.crt
- 将写好的
default-ssl.conf
放到和dockerfile
同一个目录下
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName Domain:443 #网站相应的域名
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
#三个证书文件
SSLCertificateFile /etc/apache2/cert/xxx_public.crt
SSLCertificateKeyFile /etc/apache2/cert/xxx.key
SSLCertificateChainFile /etc/apache2/cert/xxx_chain.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
- 编写dockerfile
dockerfile如下:
FROM wordpress:latest
RUN touch uploads.ini && \ #修改wordpress上传文件的大小限制(默认2M),修改为64M
echo file_uploads = On >> uploads.ini && \
echo memory_limit = 64M >> uploads.ini && \
echo upload_max_filesize = 64M >> uploads.ini && \
echo post_max_size = 64M >> uploads.ini && \
echo max_execution_time = 600 >> uploads.ini && \
mv uploads.ini /usr/local/etc/php/conf.d/ && \
a2enmod rewrite expires ssl && \ #启动ssl模块
mkdir /etc/apache2/cert/ #创建证书文件夹
#添加ssl证书到cert文件夹
COPY ./1628750_www.luckblog.top* /etc/apache2/cert/
#修改apache2ssl配置文件,直接覆盖原文件
COPY ./default-ssl.conf /etc/apache2/sites-available/
#建立软链并重启apache服务
RUN ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf && \
service apache2 restart
- 使用 dockerfile 构建镜像:
docker build -t wordpress:your_tag ./
5 使用docker-compose 构建服务
- 编写
docker-compose.yml
文件
version: "3.2"
services:
db:
image: mysql:5.7
volumes:
- type: bind
source: ./wp_data/
target: /var/lib/mysql/
restart: always
environment:
MYSQL_ROOT_PASSWORD: xxx
MYSQL_DATABASE: wordpress
MYSQL_USER: root
MYSQL_PASSWORD: xxx
wordpress:
depends_on:
- db
image: wordpress:64M-ssl #使用之前构建的镜像
ports:
- "8000:80"
- "443:443" #暴露443端口,以提供HTTPS服务
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: xxx
注:关于数据库的volumes选项
数据卷(volume)在docker中可以使数据独立于容器存在,便于数据管理、共享。在docker中数据卷的使用有3中类型:bind、volume、tmpfs。其中区别见官方文档:
bind类型:https://docs.docker.com/storage/bind-mounts/
volume类型:https://docs.docker.com/storage/volumes/
tmpfs类型:https://docs.docker.com/storage/tmpfs/
- 使用
docker-compose up -d
开启服务 - 在浏览器访问
https://domain
初始化wordpress
6 恢复数据
- 下载
All-in-One Wp Migration
插件 - 选择从文件导入之前的数据

- 至此wordpress迁移完成