如何在生产中的不同主机上将数据库的docker容器?

假设我们有一个简单的Web应用程序堆栈,就像docker-compse文档中描述docker-compse 。 它docker-compose.yml如下所示:

 version: '2' services: db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db 

这对笔记本电脑的开发非常有用。 但在生产中,要求db容器在自己的主机上是有用的。 教程我可以find使用docker-swarm来扩展web容器,但是不要留意db和一个web实例在同一台机器上运行的事实。

是否有可能需要一个特定的容器在自己的机器上(甚至更好,在特定的机器上)使用docker ? 如果是这样,怎么样? 如果没有,在多容器应用程序中处理数据库的docker方式是什么?

在我看来,数据库位于容器世界的边缘,它们对于开发和testing非常有用,但是生产数据库通常本质上不是非常短暂或便携的东西。 像Cassandra这样的可伸缩types的数据库, Flocker肯定会有所帮助,但是数据库可以有非常明确的要求,可以更好地把它当作一个位于你的容器化应用程序( RDS , Cloud SQL等)之后的服务。

无论如何,你将需要一个容器编排工具。

您可以应用Compose + Swarm的手动调度约束来指定容器可以运行的docker主机。 对于你的数据库,你可能有:

 environment: - "constraint:storage==ssd" 

否则,你可以用Ansible , Chef , Puppet设置一个更加静态的Docker环境

使用另一个支持docker的编排工具: Kubernetes , Mesos , Nomad

使用容器服务: Amazon ECS , Docker Cloud / Tutum