以下是我的情景:
我一直在开发一个经常修改的插件,我需要使用docker创建一个图像,在其中安装一个新版本的wordpress然后从开发环境导入所有数据库和插件,(插件是在github上)
我设法使用https://github.com/eugeneware/docker-wordpress-nginx
在docker上安装wordpress现在我的问题是:
1 - 是否有任何方法可以在wordpress文件和文件夹安装到docker中后进行修改(用于安装插件和使用命令行,而不是wordpress GUI)
2 - 如果我想实现上面解释的最佳工作流程是什么?
答案 0 :(得分:5)
您问题的两个可能答案。我现在也在努力解决这个问题,所以YMMV。
首先,如果你在主机上运行Docker容器,你可以随时暂停它docker pause
,从正在运行的容器docker commit
创建一个新映像,然后将其推送到私有容器存储库docker push
(实时Wordpress安装可能不适合公共Docker Hub)。完成后,您可以恢复容器docker unpause
,然后您可以在开发系统上更新映像。然后在升级完成后进行测试并且一切正常,然后docker pull
图像并重新启动您的服务,以便它使用新图像。
不是一个好的解决方案,但它会起作用。
根据Tadeusz的评论,我不一定要从数据卷运行整个WP安装。它们是易变的,如果由于任何原因,您的容器被删除并且它是唯一引用数据卷的容器,那么您将丢失所有内容(除非您保留多个备份 - 您执行保留多个备份,对吗?)
我考虑的另一个解决方案是将插件更改部署为Dockerfile的一部分。这是一种更加慎重的方法,但可以进行webhooked,以便在您提交Github存储库时自动构建新的Docker镜像。有关于执行自动构建过程here的讨论。 如上所述,您最终托管服务器管理员端需要提取新图像。并完成了。
当然,设置它可以作为开发系统的练习。
干杯!
答案 1 :(得分:1)
晚会,但我已经得到了一个很好的解决方案。它没有被其他答案所涵盖,也应该对未来的读者有用。
我在ec2 t2-micro盒子上舒服地操作它,到目前为止,它的工作非常完美。 Wordpress,mySQL和Nginx都安装在自己的容器中(通过Docker compose),Docker卷用于维护mySQL和Wordpress状态。有关从here获取的Nginx设置的代码和其他信息。
搬运工-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容器中的mySQL数据目录,wp_data
卷映射到Wordpress容器中的Wordpress内容目录。您可以做的是配置CLI以写入主机上的wp_data
目录,这些更改将在Wordpress站点上显示,而无需重建任何容器!