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

jot*_*ttr 121 docker

我有一种预感,Docker可以大大改善我的webdev工作流程 - 但我还没有完全围绕如何处理将Docker添加到堆栈的项目.

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

软件

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

    • 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. 运行docker容器,拉入数据库并挂载cmsdir/var/www

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

问题:

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

  2. 我应该为db和apache服务器设置单独的容器实例吗?或者为上述用例提供单个容器是否足够?

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

  4. 我如何实际装入/dev/cmsdir/容器目录/var/www/?我应该利用数据量吗?

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

Jir*_*iri 46

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

    对于开发 - 另一种选择是使用数据卷从主机/开发机器映射mysql数据目录.通过这种方式,您可以随时使用git(在主机上)和"重新加载"初始状态来管理mysql(在docker中)的数据文件(在启动mysql容器之前).

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

  3. 我只使用基本脚本:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
    Run Code Online (Sandbox Code Playgroud)
  4. 是的,您可以使用data-volumes -v开关.我会用它来开发.您可以使用只读安装,因此如果您愿意,不会对此目录进行任何更改(您的应用程序应该将数据存储在其他位置).

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    
    Run Code Online (Sandbox Code Playgroud)

    无论如何,对于最终部署,我将使用dockerfile构建和映像 ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. 我不知道 :-)

  • 肯定需要有关于此过程的更多教程/最佳实践.:( (48认同)
  • 我写了一篇关于编写一个mysql容器的教程,该容器实现了你在#1中所讨论的内容http://txt.fliglio.com/2013/11/creating-a-mysql-docker-container/ (6认同)
  • 截至2015年的@RoyTruelove,现在已经弃用了figer for docker-compose (4认同)

Kev*_*tle 10

你想使用docker-compose.按照这里的教程.非常简单.似乎勾选你所有的盒子.

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