什么将是一个很好的dockerwebdev工作stream程?

我有一个预感, docker可以大大提高我的webdev工作stream程 – 但我没有完全包办我的头围绕如何处理一个项目添加docker到堆栈。

基本的软件堆栈看起来像这样:

软件

  • 提供自定义LAMP堆栈的Docker镜像

    • Apache与几个模块
    • MYSQL
    • PHP
    • 一些CMS,例如银条
  • GIT

工作stream程

我可以想象的工作stream程看起来有点像下面这样:

发展

  1. 编写一个Dockerfile来定义符合上述要求的LAMP容器
    • REQ:机器启动后应该立即启动apache / mysql
  2. build立docker形象
  3. 将运行CMS所需的文件复制到~/dev/cmsdir
    • ~/dev/cmsdir/放在版本控制下
  4. 运行~/dev/cmsdir容器,并以某种方式将~/dev/cmsdir到容器上的/var/www/
  5. 填充数据库
  6. /dev/cmsdir/
  7. 提交并closuresdocker集装箱

部署

  1. 设置远程主机(例如,使用安全的)
  2. 将容器映像推送到远程主机
  3. 通过git获取cmsdir
  4. 运行cmsdir容器,拉入数据库并将cmsdir挂载到/var/www

现在,纸上看起来相当不错,但是我不太确定这是否是正确的做法。

问题:

  1. 在本地开发的过程中,如何让数据库在容器实例的重新引导之间持续存在? 或者我需要每次运行SQL转储之前旋转容器?

  2. 我应该有数据库和Apache服务器单独的容器实例吗? 或者只有一个容器用于上述用例就足够了?

  3. 如果为数据库和服务器使用单独的容器,我怎么能同时自动旋转它们?

  4. 我怎么实际上挂载/dev/cmsdir/到容器/var/www/ -directory? 我应该利用这个数据量吗?

  5. 我有没有错过任何陷阱? 任何可以简化的东西?

  1. 如果您需要独立于CMS容器的数据库持久性,则可以为MySQL使用一个容器,为CMS使用一个容器。 在这种情况下,您可以让MySQL容器仍在运行,并且可以根据需要独立重新部署CMS。

    对于开发 – 另一种select是使用数据卷从主机/开发机器映射mysql数据目录。 这样你就可以使用git(在主机上)pipe理mysql(在docker中)的数据文件,并且可以随时(在启动mysql容器之前)“重新加载”初始状态。

  2. 是的,我认为你应该有一个单独的数据库容器。

  3. 我正在使用基本的脚本:

     #!/bin/bash $JOB1 = (docker run ... /usr/sbin/mysqld) $JOB2 = (docker run ... /usr/sbin/apache2) echo MySql=$JOB1, Apache=$JOB2 
  4. 是的,您可以使用数据卷-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

  5. 我不知道 :-)

你想用docker-compose。 按照这里的教程。 很简单。 似乎勾选所有的框。

https://docs.docker.com/compose/

我知道这个post目前已经一岁多了,但是我最近问自己很类似的问题,并且对你的问题有几个很好的答案。

  1. 你可以设置一个MySQL docker实例,并将数据保存在一个无状态的数据容器上,也就是说数据容器不需要主动运行

  2. 是的,我会build议有一个单独的实例为您的Web服务器和数据库。 这是Docker的力量。

  3. 看看我已经build立的这个回购 。 基本上就像make buildmake run一样简单,你可以在本地运行一个web服务器和数据库容器。

  4. 第一次运行容器时使用-v参数,这会将容器上的特定文件夹链接到运行容器的主机。

  5. 我认为你的想法很好 ,现在可以实现你所要求的一切。

这是一个交钥匙解决scheme ,可以满足您列出的所有需求。

我已经把一个易于使用的Docker组合设置放在一起,应该符合您的开发工作stream程要求。

https://github.com/ehyland/docker-silverstripe-dev

主要特点

  • 持久性数据库
  • 您select的HHVM + NGINXApache2 + PHP5
  • 用xDebugdebugging和设置断点

README.md应该足够清楚,以便开始使用。