在使用docker的项目中包含支持服务的惯例是什么?

时间:2014-11-08 00:59:09

标签: git project docker

有很多针对docker的文章和文档,介绍了如何配置Web节点配置文件。然而,我发现在描述我如何继续包括我的数据库服务器,缓存,工作人员和消息队列服务之类的配置文件方面相对较轻。

如果我试图在源代码管理中使用我的Dockerfiles创建一个包罗万象的项目,我该如何构建事物呢?

不是一个详尽的清单,但是:

  • 我可以在一个命令中启动整个群集
  • 所有流程都可以相互通信
  • 我将Dockerfile(s?)放在一个有意义的位置
  • 我可以选择并发出正确的环境信号以运行我的应用
  • 我正确地将我的应用程序的源代码共享到Web节点

1 个答案:

答案 0 :(得分:0)

我可以在一个命令中启动整个集群

fig

所有流程都可以相互通信

您可以使用以下方式链接容器:

docker run --link other-continer:ALIAS -it this-container

此容器可以使用链接容器上的所有公开端口。 环境变量[ALIAS] _PORT_ [PORT] _TCP_ADDR和[ALIAS] _PORT_ [PORT] _TCP_PORT将告诉您连接到其他主机的位置。

我将Dockerfile(s?)放在一个有意义的位置

这里没有好的答案我们的其他discussion是相关的。将它们放在各自的文件夹中,然后将它们放在任何地方。它们没有语义链接到项目的源。

我可以选择并发出正确的环境信号以运行我的应用

您可以使用:

docker run -e VAR_NAME=value ...

我正确地将我的应用程序源代码共享到Web节点:

您可以使用以下命令在构建时将源代码插入到docker容器中。

ADD http://url-to-your-source/ /folder/in/container

全部放在一起:

github.com/user/project/src/...

# Or each of these in their own github repo if you want to be super canonical
github.com/user/project/docker-files/base/Dockerfile
github.com/user/project/docker-files/web/Dockerfile
github.com/user/project/docker-files/db/Dockerfile
github.com/user/project/docker-files/worker/Dockerfile

github.com/user/project/fig.yml

你的fig.yml看起来像

base:
  build: ./docker-files/base/
web:
  build: ./docker-files/web/
  command: Something
  links:
   - db
   - worker
  ports:
   - "8000:8000"
db:
  build: ./docker-files/db/
  expose:
   - "3306"
worker:
  build: ./docker-files/worker/
  expose:
   - "9000"

Web节点中的入口点将是一个脚本,该脚本在启动Web服务器之前查找下面的环境变量并相应地设置配置文件。这应该在脚本中而不是在Dockerfile中完成,因为链接是在运行时而不是构建时创建的。

DB_PORT\_3306\_TCP_ADDR
DB_PORT\_3306\_TCP_PORT
WORKER_PORT\_9000\_TCP_ADDR
WORKER_PORT\_9000\_TCP_PORT

您应该使用以下命令将源代码插入Docker容器(如果您需要源代码),否则您也可以从某个地方提取构建的工件。

ADD https://api.github.com/repos/user/projects/tarball /tmp/src

为避免重复,请添加常见步骤,例如安装php或将源码拉入基础docker容器,然后在其他容器中使用from:base以使用已执行的步骤拉入图像。

然后你可以这样做:

fig build
fig start