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官方文档

 #下载旧版本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官方文档

#下载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.keyxxx_chain.crtxxx_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迁移完成

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注