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将在部署时启动您的容器,并在发生崩溃时重新启动它们
- 有没有办法将远程API用作泊坞窗撰写文件中的端点?
- Docker swarmjoinlinux容器错误 – 远程CA与指纹不匹配
- Bluemix Dev Ops:使用私有git子模块构build项目
- 将容器化的.NET Core MVC / WebAPI应用程序连接到本地安装的Postgres
- Docker是否应该用于非devops环境,而不是非常灵活的环境?
- 从docker运行jenkins没有显示初始安装页面
- 如何将java开发环境发布到许多工作站
- Dockerconfiguration在运行时编辑节点代码
- 在Kubernetes,OpenShift,Docker Swarm和Docker DataCenter部署工具中哪一个都有自动回滚?