什么将是一个很好的dockerwebdev工作stream程?
我有一个预感, docker可以大大提高我的webdev工作stream程 – 但我没有完全包办我的头围绕如何处理一个项目添加docker到堆栈。
基本的软件堆栈看起来像这样:
软件
-
提供自定义LAMP堆栈的Docker镜像
- Apache与几个模块
- MYSQL
- PHP
- 一些CMS,例如银条
-
GIT
工作stream程
我可以想象的工作stream程看起来有点像下面这样:
发展
- 编写一个
Dockerfile
来定义符合上述要求的LAMP容器- REQ:机器启动后应该立即启动apache / mysql
- build立docker形象
- 将运行CMS所需的文件复制到
~/dev/cmsdir
- 把
~/dev/cmsdir/
放在版本控制下
- 把
- 运行
~/dev/cmsdir
容器,并以某种方式将~/dev/cmsdir
到容器上的/var/www/
- 填充数据库
- 在
/dev/cmsdir/
- 提交并closuresdocker集装箱
部署
- 设置远程主机(例如,使用安全的)
- 将容器映像推送到远程主机
- 通过git获取
cmsdir
- 运行
cmsdir
容器,拉入数据库并将cmsdir
挂载到/var/www
现在,纸上看起来相当不错,但是我不太确定这是否是正确的做法。
问题:
-
在本地开发的过程中,如何让数据库在容器实例的重新引导之间持续存在? 或者我需要每次运行SQL转储之前旋转容器?
-
我应该有数据库和Apache服务器单独的容器实例吗? 或者只有一个容器用于上述用例就足够了?
-
如果为数据库和服务器使用单独的容器,我怎么能同时自动旋转它们?
-
我怎么实际上挂载
/dev/cmsdir/
到容器/var/www/
-directory? 我应该利用这个数据量吗? -
我有没有错过任何陷阱? 任何可以简化的东西?
-
如果您需要独立于CMS容器的数据库持久性,则可以为MySQL使用一个容器,为CMS使用一个容器。 在这种情况下,您可以让MySQL容器仍在运行,并且可以根据需要独立重新部署CMS。
对于开发 – 另一种select是使用数据卷从主机/开发机器映射mysql数据目录。 这样你就可以使用git(在主机上)pipe理mysql(在docker中)的数据文件,并且可以随时(在启动mysql容器之前)“重新加载”初始状态。
-
是的,我认为你应该有一个单独的数据库容器。
-
我正在使用基本的脚本:
#!/bin/bash $JOB1 = (docker run ... /usr/sbin/mysqld) $JOB2 = (docker run ... /usr/sbin/apache2) echo MySql=$JOB1, Apache=$JOB2
-
是的,您可以使用数据卷-v切换。 我会用这个进行开发。 你可以使用只读挂载,所以如果你想要的话(如果你的应用程序应该在其他地方存储数据的话)不会对这个目录做任何改变。
docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
无论如何,为了最终部署,我将使用dockerfile生成并使用
ADD /home/user/dev/cmsdir /var/www/cmsdir
-
我不知道 :-)
你想用docker-compose。 按照这里的教程。 很简单。 似乎勾选所有的框。
我知道这个post目前已经一岁多了,但是我最近问自己很类似的问题,并且对你的问题有几个很好的答案。
-
你可以设置一个MySQL docker实例,并将数据保存在一个无状态的数据容器上,也就是说数据容器不需要主动运行
-
是的,我会build议有一个单独的实例为您的Web服务器和数据库。 这是Docker的力量。
-
看看我已经build立的这个回购 。 基本上就像
make build
&make run
一样简单,你可以在本地运行一个web服务器和数据库容器。 -
第一次运行容器时使用
-v
参数,这会将容器上的特定文件夹链接到运行容器的主机。 -
我认为你的想法很好 ,现在可以实现你所要求的一切。
这是一个交钥匙解决scheme ,可以满足您列出的所有需求。
我已经把一个易于使用的Docker组合设置放在一起,应该符合您的开发工作stream程要求。
https://github.com/ehyland/docker-silverstripe-dev
主要特点
- 持久性数据库
- 您select的
HHVM
+NGINX
或Apache2
+PHP5
- 用xDebugdebugging和设置断点
README.md应该足够清楚,以便开始使用。