在生产中运行Docker Compose堆栈的推荐方法?

Jam*_*iew 8 docker docker-compose devops

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

我想在生产中运行这个堆栈 - 让整个堆栈在启动时开始,并使容器重新启动或在它们崩溃时重新创建.没有我关心的任何卷,容器不会处于任何重要状态,可以随意回收.

我没有找到很多关于在生产中以这种方式使用docker-compose的信息.该文档很有帮助,但没有提到有关启动启动的任何内容,我使用的是亚马逊Linux,因此(目前)不能访问Docker Machine.我习惯使用supervisord来监督进程并确保它们在启动时启动,但我不认为这是使用Docker容器的方法,因为它们最终会被Docker守护进程监控?

作为一个简单的开始,我正在考虑将restart: always我的所有服务放在一起,并docker-compose up -d在启动时创建一个init脚本.是否有建议的方法以稳健的方式管理生产中的docker-compose堆栈?

编辑:我正在寻找一种"简单"的方式,docker-compose up以一种强大的方式运行相当于我的容器堆栈.我事先知道堆栈中声明的所有容器都可以驻留在同一台机器上; 在这种情况下,我不需要在多个实例中从同一堆栈中编排容器,但这也有助于了解.

Elt*_*man 11

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

当主机启动时,如果您已将Docker守护程序配置为在启动时启动,则Docker将启动所有标记为重新启动的容器.所以你只需要运行docker-compose up -d 一次,Docker负责其余的工作.

至于在Swarm中跨多个节点编排容器 - 首选的方法是使用分布式应用程序包,但目前(从Docker 1.12开始)是实验性的.您基本上将从代表您的分布式系统的本地Compose文件创建一个包,然后将其远程部署到Swarm.Docker移动速度很快,所以我希望很快就可以使用该功能.