使用docker部署wordpress的最佳升级方式

如果是在机器上直接部署的wordpress,升级只需要在后台点击升级即可.

如果使用docker部署wordpress当然也可以在后台点击升级,但是这样就破坏了docker部署项目的”不可变基础设施”的原则,带来的问题就是当你使用同一个镜像启动了两个应用,但是应用内部的代码可能是不一样的.如果新版本的wordpress用到了特定PHP版本的某个特性,老版本的镜像中不一定有这个特性.

因此,升级wordpress应该使用直接升级镜像的方式.但是在升级时,有几个需要注意的地方:

  1. 数据库不可以在当前容器内
  2. 挂载内容可能发生了变化的目录`- ./wp-content:/var/www/html/wp-content`
  3. 如果修改了配置文件,需要挂载配置文件`- ./wp-config.php:/var/www/html/wp-config.php`(配置文件中的值一般都取自于环境变量,很少会有修改的情况)

但是,当首次启动服务的时候,本地并没有wp-content文件夹和wp-config.php文件,应该怎么办呢?

只需要先临时启动一个wordpress容器,再将容器中的这个文件夹和文件复制出来即可.

以下是我启动wordpress的docker-compose.yml

services:
  wordpress:
    image: wordpress #这里也可以指定版本
    restart: always
    ports:
      - 1524:80
    environment:
      WORDPRESS_DB_HOST: 192.168.1.100:3306
      WORDPRESS_DB_USER: admin
      WORDPRESS_DB_PASSWORD: admin123456
      WORDPRESS_DB_NAME: wordpress_demo
    volumes:
      - ./wp-content:/var/www/html/wp-content
      # - ./wp-config.php:/var/www/html/wp-config.php #如果改了配置文件,就加上这个

下面开始升级

备份数据库和程序

如果你懒得备份程序,问题也不大,但是一定要记着备份数据库,尤其时当你的数据在容器里的情况,有些人搞不明白容器保存数据的逻辑,甚至没把数据库的数据映射到本地,这样一重启数据库容器,所有数据就都没了.

下载最新镜像

docker compose pull wordpress

这个命令中的wordpress是docker-compose.yml的服务名,image后面写的是什么版本,这里下载下来的就是什么版本

停止原容器

docker compose down wordpress

启动新容器

docker compose up -d

手动访问一次网站

为什么要手动访问网站呢?因为如果该版本的wordpress升级时,改动了数据库,但是我们的数据库中并没有这些改动,就会导致表和程序不匹配.

wordpress有一个升级数据库的机制,在数据库的wp_options表中,有一个option_name字段,里面保存着当前数据库的版本.

当每次运行程序时,wordpress程序会用自己的版本号和数据库中的版本号做对比,如果数据库的版本号比较低,则会触发升级数据库逻辑.

升级完毕

over.