我有种预感docker可以极大地改善我的webdev工作流程-但我还没有设法把方法放在将docker添加到堆栈中的项目上。
基本软件堆栈如下所示:
软件
提供自定义LAMP堆栈的Docker映像
- Apache有几个模块
- MySQL数据库
- 的PHP
- 一些CMS,例如Silverstripe
GIT
工作流程
我可以想象工作流程看起来如下所示:
发展历程
- 编写一个
Dockerfile
定义满足上述要求的LAMP容器的- REQ:机器应该在启动后立即启动apache / mysql
- 构建Docker映像
- 将运行CMS所需的文件复制到例如
~/dev/cmsdir
- 把
~/dev/cmsdir/
版本控制之下
- 把
- 运行Docker容器,然后以某种方式挂载
~/dev/cmsdir
到/var/www/
容器上 - 填充数据库
- 做工作
/dev/cmsdir/
- 提交并关闭Docker容器
部署方式
- 设置远程主机(例如,使用ansible)
- 将容器映像推送到远程主机
cmsdir
通过git 获取-project- 运行泊坞窗容器,在数据库中拉并安装
cmsdir
到/var/www
现在,在纸面上看起来一切都很好,但是我不确定这是否是正确的方法。
问题:
在本地进行开发时,如何使数据库在容器实例的重新启动之间保持不变?还是我需要在旋转容器之前每次都运行sql-dump?
我是否应该为db和apache服务器分别设置容器实例?还是为上述用例配备一个容器就足够了?
如果将单独的容器用于数据库和服务器,我如何同时自动向上和向下旋转它们?
我实际上将如何安装
/dev/cmsdir/
到容器目录中/var/www/
?我应该为此使用数据量吗?我错过任何陷阱了吗?有什么可以简化的吗?