build议在生产环境中运行Docker Compose堆栈的方法?

我有几个组成文件(docker-compose.yml),描述了一个简单的Django应用程序(五个容器,三个图像)。

我想在生产中运行这个堆栈 – 让整个堆栈在启动时启动,容器重新启动或者在崩溃时重新创build。 没有我关心的容器,容器不会有任何重要的状态,可以随意回收。

我没有find关于如何在生产中特别使用docker-compose的很多信息。 该文档是有帮助的,但没有提及启动时启动的任何事情,而且我正在使用Amazon Linux,因此不能(当前)访问Docker Machine。 我习惯于使用supervisord来保姆进程,并确保它们在启动时启动,但我不认为这是用Docker容器来做的方式,因为它们最终被Docker守护进程监控。

作为一个简单的开始,我想只是把restart: always在我的所有服务,并使一个初始化脚本做启动docker-compose up -d 。 有一种推荐的方式来pipe理生产中的docker堆栈堆栈吗?

编辑:我正在寻找一个“简单”的方式来运行相当于docker-compose up一个强大的方式我的容器堆栈。 我知道堆栈中声明的所有容器都可以驻留在同一台机器上, 在这种情况下,我不需要在多个实例之间编排来自同一个堆栈的容器,但是这也是有帮助的。

Compose是一个客户端工具,但是当你运行docker-compose up -d所有的容器选项都被发送到引擎并被存储。 如果你always地指定restart (或者最好unless-stopped 给你更多的灵活性 ),那么你不需要每次主机启动时运行docker-compose up

当主机启动时,假设你已经configuration了Docker守护进程在启动时启动,Docker将启动所有被标记为重启的容器。 所以你只需要运行docker-compose up -d 一次,而Docker负责其余部分。

对于在Swarm中的多个节点上编排容器 – 首选的方法是使用分布式应用程序包 ,但目前(Docker 1.12)是实验性的。 你将基本上从表示你的分布式系统的本地Compose文件创build一个bundle,然后将其部署到一个Swarm。 Docker移动速度很快,所以我希望这个function很快就可以使用。

你可以在他们的文档中find关于在生产中使用docker-compose的更多信息。 但是,正如他们所说, compose主要是针对开发和testing环境。

如果你想在生产中使用你的容器,我build议你使用合适的工具来编排容器,如Kubernetes 。

如果您可以将您的Django应用程序组织为swarmkit 服务 (docker 1.11+),则可以使用Task编排您的应用程序的执行。

Swarmkit有一个重启策略 (参见swarmctl标志 )

重新启动策略 :编排层根据指定的策略监视任务并对故障做出反应。
操作员可以定义重启条件,延时和限制(给定时间窗口内的最大尝试次数)。 SwarmKit可以决定在另一台机器上重新启动一个任务。 这意味着错误的节点将逐渐耗尽他们的任务。

即使您的“群集”只有一个节点,编排层也会确保您的容器始终处于运行状态。

你说你使用AWS,那么你为什么不使用为你所要求的而构build的ECS 。 你创build一个应用程序,它是你的5个容器的包装。 您将在群集中configuration您想要的EC2实例和多less个实例。

你只需要将你的docker-compose.yml转换成不是特定的Dockerrun.aws.json。

AWS将在部署时启动您的容器,并在发生崩溃时重新启动它们