如何在生产中将数据库的 docker 容器放在不同的主机上?
How to put docker container for database on a different host in production?
假设我们有一个简单的 Web 应用程序堆栈,类似于 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 容器位于其自己的主机上会很有用。我能找到使用 docker-swarm
扩展 Web 容器的教程,但没有注意 db
的实例和 web
运行 的一个实例这一事实在同一台机器上。
是否可以使用 docker
要求特定容器在其自己的机器上(或者更好,在特定机器上)?如果是这样,如何?如果不是,docker 在多容器应用程序中处理数据库的方法是什么?
在我看来,数据库位于容器世界的边缘,它们对开发和测试很有用,但生产数据库在本质上通常不是非常短暂或可移植的东西。 Flocker 当然
与可扩展类型的数据库(如 Cassandra)一样有帮助,但数据库可能有非常具体的要求,最好将其视为容器化应用程序背后的服务(RDS, Cloud SQL 等)。
无论如何你都需要一个容器编排工具。
您可以为 Compose + Swarm 应用 manual scheduling constraints 来指定 docker 容器可以 运行 的主机。对于您的数据库,您可能有:
environment:
- "constraint:storage==ssd"
否则,您可以使用 Ansible, Chef, Puppet
设置更静态的 Docker 环境
使用另一个支持docker的编排工具:Kubernetes, Mesos, Nomad
使用容器服务:Amazon ECS, Docker Cloud/Tutum
假设我们有一个简单的 Web 应用程序堆栈,类似于 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 容器位于其自己的主机上会很有用。我能找到使用 docker-swarm
扩展 Web 容器的教程,但没有注意 db
的实例和 web
运行 的一个实例这一事实在同一台机器上。
是否可以使用 docker
要求特定容器在其自己的机器上(或者更好,在特定机器上)?如果是这样,如何?如果不是,docker 在多容器应用程序中处理数据库的方法是什么?
在我看来,数据库位于容器世界的边缘,它们对开发和测试很有用,但生产数据库在本质上通常不是非常短暂或可移植的东西。 Flocker 当然 与可扩展类型的数据库(如 Cassandra)一样有帮助,但数据库可能有非常具体的要求,最好将其视为容器化应用程序背后的服务(RDS, Cloud SQL 等)。
无论如何你都需要一个容器编排工具。
您可以为 Compose + Swarm 应用 manual scheduling constraints 来指定 docker 容器可以 运行 的主机。对于您的数据库,您可能有:
environment:
- "constraint:storage==ssd"
否则,您可以使用 Ansible, Chef, Puppet
设置更静态的 Docker 环境使用另一个支持docker的编排工具:Kubernetes, Mesos, Nomad
使用容器服务:Amazon ECS, Docker Cloud/Tutum