在Docker容器中更新WordPress插件

11

这是我的场景:

我一直在开发一个插件,这个插件会经常被修改。我需要创建一个使用Docker的映像,其中安装了最新版本的WordPress,并从开发环境中导入所有数据库和插件(该插件位于GitHub上)。

我已经使用https://github.com/eugeneware/docker-wordpress-nginx在Docker上安装了WordPress。

现在有以下问题:

1-在WordPress在Docker中安装后,是否有办法修改WordPress文件和文件夹(用于安装插件和使用命令行,而不是WordPress GUI)?

2-如果我想实现上述内容,最好的工作流程是什么?


一般情况下,您应该使用docker卷。在主机上克隆WordPress并使用 --volume /dir/where/wp/is/on/host:/usr/share/nginx/www 运行映像。 - Tad Lispy
2个回答

6

虽然有些晚了,但我有一个不错的解决方案。它与其他答案不同,对未来的读者也应该有用。

我在 ec2 t2-micro 实例上轻松运行了这个方案,到目前为止它工作得非常完美。WordPress、MySQL 和 Nginx 都以自己的容器安装(通过 Docker compose),Docker 卷用于维护 MySQL 和 WordPress 的状态。关于 Nginx 设置的代码和其他信息可以从这里获取。

docker-compose.yml:

version: '3.6'

 services:
    db:
      image: mysql:5.7
      volumes:
        - db_data:/var/lib/mysql
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: db_root_pass
        MYSQL_DATABASE: db
        MYSQL_USER: db_user
        MYSQL_PASSWORD: db_pass
    nginx:
      depends_on:
        - wordpress
      image: nginx:latest
      restart: always
      ports:
        - "80:80"
      volumes:
        - ./nginx.conf:/etc/nginx/nginx.conf
    wordpress:
      depends_on:
        - db
      volumes:
        - wp_data:/var/www/html/wp-content
      image: wordpress:latest
      restart: always
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: db_user
        WORDPRESS_DB_PASSWORD: db_pass
 volumes:
    db_data:
    wp_data:

db_data数据卷映射到mySQL容器内的数据目录,而wp_data数据卷则映射到Wordpress容器内的内容目录。您可以配置CLI将写入wp_data主机上的目录中,这些更改将显示在Wordpress网站上,无需重建任何容器!


5

针对您的问题,有两种可能的解决方案。我现在也正在努力解决这个问题,所以可能会因人而异。

首先,如果您正在主机上运行Docker容器,则始终可以暂停它docker pause,从运行中的容器创建新映像docker commit,然后将其推送到私有存储库docker push(公共Docker Hub可能不适合实时Wordpress安装)。完成后,您可以恢复容器docker unpause,然后可以在开发系统上更新映像。然后,一旦升级完成并经过测试,并且一切都正常,那么您可以docker pull图片并重新启动服务,使其使用新图像。

这并不是一个很好的解决方案,但它可以工作。

基于Tadeusz的评论,我不会必然从数据卷运行整个WP安装。它们是易失性的,如果由于任何原因,您的容器被删除并且它是唯一引用数据卷的容器,则会丢失所有内容(除非您保留多个备份--您有保留多个备份吗?)

我考虑的另一个解决方案是,将插件更改作为Dockerfile的一部分进行部署。这是一种更加深思熟虑的方法,但可以通过 webhook 进行设置,使其在您提交到Github存储库时自动构建新的Docker映像。有讨论在此处执行自动构建过程here。 您端的服务器管理程序需要拉取新的映像,如我上面所提到的。完成。

当然,将其设置为适用于您的开发系统的练习留给您自己去做。

干杯!


1
在这种情况下,您有没有关于如何管理数据库状态的想法? - Ben
实际上,将WordPress框架挂载在一个卷中可能更加合适,该卷可从某种代码存储库中获取。最好的方法是不要暂停容器,而是创建一个新容器,使用更新的卷并销毁旧容器。 - Raffaello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接