docker-compose 允许用户通过一个单独的docker-compose.yml.模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。
我一直想把自己的博客迁移到docker 上来,之前看docker实战,记得里面有利用docker-compose 配置wordpress 的说明,趁着周末,拿出点时间将博客完全迁移过来。
准备工作
备份
首先要做的是数据的备份,由于数据不多,我们首先利用mysqldump将mysql 中的数据备份出来。
mysqldump -u root -p wordpress_db >wordpress.2019.11.02.sql
然后将 wordpress 的程序 备份一下,避免出现问题。
安装 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.17.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
授权
sudo chmod +x /usr/local/bin/docker-compose
编写docker-compose.yml
编写docker-compose.yml, 在这之前需要查看自己之前的php 版本以及wordpress 版本,然后更改 以下文件的wordpress 镜像的版本。不然的化,迁移可能会有问题.
可以去docker hub(https://hub.docker.com/_/wordpress?tab=tags&page=1&ordering=-last_updated) 上查找版本,我们使用的是 apache 版本的。然后将挂载的文件夹建好。
version: "3" services: db: image: mysql:5.7 container_name: mysql-wp volumes: - /alidata/mysql/db_data:/var/lib/mysql ports: - "13306:3306" restart: always environment: MYSQL_ROOT_PASSWORD: mypassword MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpresspass wordpress: depends_on: - db image: wordpress:5.2.0-php7.1-apache ports: - "9000:80" container_name: wordpress volumes: - /alidata/www/wordpress:/var/www/html restart: always environment: WORDPRESS_DB_HOST: db:13306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpresspass
开始迁移
在 docker-compose.yml 同级目录执行以下命令
docker-compose up -d
查看日志:
docker-compose logs
将之前备份好的数据导入到 mysql 中。建议客户端连接之前的数据库,将sql文件导入。执行之前,如果域名有变化,需要将sql文件中的域名全部替换掉再执行。
然后服务器上将刚才的服务停掉
docker-compose stop
将挂载的wordpress 文件夹中的文件删掉,替换为自己的wordpress 文件。记得给文件夹赋权限。
docker-compose start
这样程序就迁移成功了。
配置nginx 代理
nginx 我们直接装在主机里面了,没有使用docker 管理。
编写nginx 配置文件。
server { listen 80; server_name xxx.xxx.com; location / { proxy_pass http://127.0.0.1:9000; proxy_redirect off; proxy_set_header Host $host; } }
将配置文件放在nginx 配置文件的 conf.d 文件夹中,重启nginx,访问域名即可。
之前的博客配置了固定链接 404 的问题
需要开启apache2 的 伪静态,
将容器中的配置文件拷贝出来修改
docker cp wordpress:/etc/apache2/apache2.conf .
将
AllowOverride None
改为
AllowOverride All
修改完拷贝进去
docker cp apache2.conf wordpress:/etc/apache2/apache2.conf
进入容器
docker exec -it wordpress /bin/bash
执行
a2enmod rewrite
退出容器后重启容器
docker restart wordpress
再次访问就不会404了