我预感docker可以大大改善我的webdev工作流程 - 但我还没有完全了解如何处理将docker添加到堆栈的项目。
基本软件堆栈如下所示:
提供自定义LAMP堆栈的Docker镜像
GIT
我可以想象工作流看起来有点如下:
Dockerfile
来定义符合上述要求的LAMP容器
~/dev/cmsdir
~/dev/cmsdir/
置于版本控制~/dev/cmsdir
挂载到容器上的/var/www/
/dev/cmsdir/
cmsdir
- 项目
cmsdir
装入/var/www
现在,这在纸面上看起来相当不错,但我不太确定这是否是正确的方法。
在本地开发时,如何让数据库在重新启动容器实例之间保持不变?或者我是否需要在每次旋转容器之前运行sql-dump?
我应该为db和apache服务器分别设置容器实例吗?或者为上述用例设置一个容器是否足够?
如果为数据库和服务器使用单独的容器,我怎样才能同时自动上下旋转?
我如何将/dev/cmsdir/
实际挂载到容器/var/www/
- 目录中?我应该使用data-volumes吗?
我是否错过了任何陷阱?什么可以简化?
答案 0 :(得分:46)
如果您需要独立于CMS容器的数据库持久性,则可以使用一个容器用于MySQL,一个容器用于CMS。在这种情况下,您可以让MySQL容器仍在运行,并且可以根据需要随时重新部署CMS。
对于开发 - 另一种选择是使用数据卷映射主机/开发机器中的mysql数据目录。通过这种方式,您可以随时使用git(在主机上)和“重新加载”初始状态来管理mysql(在docker中)的数据文件(在启动mysql容器之前)。
是的,我认为你应该有一个单独的db容器。
我只使用基本脚本:
#!/bin/bash
$JOB1 = (docker run ... /usr/sbin/mysqld)
$JOB2 = (docker run ... /usr/sbin/apache2)
echo MySql=$JOB1, Apache=$JOB2
是的,您可以使用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 :(得分:9)
你想使用docker-compose。按照这里的教程。非常简单。似乎勾选你所有的盒子。
答案 2 :(得分:4)
我理解这篇文章目前已有一年多了,但我最近问自己非常相似的问题,并对你的问题有几个很好的答案。
您可以设置MySQL docker实例,并将数据保留在无状态数据容器上,即数据容器不需要主动运行
是的,我建议为您的Web服务器和数据库使用单独的实例。这就是Docker的力量。
查看this repo我一直在建设。基本上它就像make build
& make run
您可以在本地运行Web服务器和数据库容器。
首次运行容器时使用-v
参数,这会将容器上的特定文件夹链接到运行容器的主机。
我认为您的想法很好,目前可以实现您所要求的一切。
Here is a turn key solution实现了您列出的所有需求。
答案 3 :(得分:1)
我整理了一个易于使用的 docker compose 设置,该设置应符合您的开发工作流程要求。
https://github.com/ehyland/docker-silverstripe-dev
主要功能
HHVM
+ NGINX
或Apache2
+ PHP5
README.md应该足够明确,以便让您入门。