什么是一个好的docker webdev工作流程?


121

我有种预感docker可以极大地改善我的webdev工作流程-但我还没有设法把方法放在将docker添加到堆栈中的项目上。

基本软件堆栈如下所示:

软件

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

    • Apache有几个模块
    • MySQL数据库
    • 的PHP
    • 一些CMS,例如Silverstripe
  • GIT

工作流程

我可以想象工作流程看起来如下所示:

发展历程

  1. 编写一个Dockerfile定义满足上述要求的LAMP容器的
    • REQ:机器应该在启动后立即启动apache / mysql
  2. 构建Docker映像
  3. 将运行CMS所需的文件复制到例如 ~/dev/cmsdir
    • ~/dev/cmsdir/版本控制之下
  4. 运行Docker容器,然后以某种方式挂载~/dev/cmsdir/var/www/容器上
  5. 填充数据库
  6. 做工作 /dev/cmsdir/
  7. 提交并关闭Docker容器

部署方式

  1. 设置远程主机(例如,使用ansible)
  2. 将容器映像推送到远程主机
  3. cmsdir通过git 获取-project
  4. 运行泊坞窗容器,在数据库中拉并安装cmsdir/var/www

现在,在纸面上看起来一切都很好,但是我不确定这是否是正确的方法。

问题:

  1. 在本地进行开发时,如何使数据库在容器实例的重新启动之间保持不变?还是我需要在旋转容器之前每次都运行sql-dump?

  2. 我是否应该为db和apache服务器分别设置容器实例?还是为上述用例配备一个容器就足够了?

  3. 如果将单独的容器用于数据库和服务器,我如何同时自动向上和向下旋转它们?

  4. 我实际上将如何安装/dev/cmsdir/到容器目录中/var/www/?我应该为此使用数据量吗?

  5. 我错过任何陷阱了吗?有什么可以简化的吗?


1
对于很多人来说,这个问题似乎很有趣。最近有人似乎写了一篇有关该主题的博客文章。由于还没有完成,截至目前,我会后在此评论的链接: project-webdev.blogspot.de/2015/05/...
jottr

Answers:


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

    为了开发-另一个选择是使用数据卷从主机/开发机映射mysql数据目录。这样,您可以在主机上使用git(在主机上)使用git(在docker中)管理mysql的数据文件,并随时(在启动mysql容器之前)“重新加载”初始状态。

  2. 是的,我认为您应该为db提供一个单独的容器。

  3. 我只使用基本脚本:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. 是的,您可以使用data-volumes -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. 我不知道 :-)


6
我写了一篇有关编写mysql容器的教程,该容器实现了您在#1 txt.fliglio.com/2013/11/creating-a-mysql-docker-container中
Ben schwartz

48
在此过程中,肯定需要更多的教程/最佳实践。:(
Reza S

本教程可能给你一些指导..
Pithikos

如果您打算从Docker的Github中提取代码,则此链接建议使用只读SSH密钥(以便可以公开列出Docker映像)slash-dev-blog.me/docker-git.html
jhtong 2014年

4
@RoyTruelove,截至2015年,现在已弃用无花果,而推荐使用
docker


4

我知道目前这个帖子已经成立一年多了,但是我最近问自己非常相似的问题,并对您的问题有好几个答案。

  1. 您可以设置一个MySQL docker实例并使数据持久保存在无状态数据容器中,也就是该数据容器不需要处于活动状态

  2. 是的,我建议为您的Web服务器和数据库使用单独的实例。这就是Docker的强大功能。

  3. 看看我正在建立的这个仓库。基本上,它和make build&一样简单make run,您可以在本地运行Web服务器和数据库容器。

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

  5. 我认为您的想法很棒,目前有可能实现您的所有要求。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.