小编典典

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

docker

我有种预感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. 运行Docker容器,拉入数据库并挂载cmsdir/var/www

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

问题:

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

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

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

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

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


阅读 288

收藏
2020-06-17

共1个答案

小编典典

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

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

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

  2. 我只使用基本脚本:

    #!/bin/bash
    

    $JOB1 = (docker run … /usr/sbin/mysqld)
    $JOB2 = (docker run … /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2

  3. 是的,您可以使用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

  1. 我不知道 :-)
2020-06-17