如何在生产环境中将Docker容器中的数据库放在不同的主机上?

3

假设我们有一个简单的Web应用程序堆栈,类似于docker-compose文档中描述的那样。它的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方法是什么?
1个回答

1
在我看来,数据库处于容器世界的边缘,它们对开发和测试很有用,但生产数据库通常不是非常短暂或可移植的东西。Flocker 当然有所帮助,像Cassandra这样的可扩展类型的数据库也有所帮助,但是数据库可能具有非常特定的要求,最好将其视为服务,位于您的容器化应用程序之后(RDSCloud SQL等)。
无论如何,您都需要一个容器编排工具。
您可以应用手动调度约束来指示Compose + Swarm在哪个Docker主机上运行容器。对于您的数据库,您可能会有:
environment:
  - "constraint:storage==ssd"

否则,您可以使用Ansible, Chef, Puppet等更静态的Docker环境进行设置。
使用支持Docker的另一个编排工具:Kubernetes, Mesos, Nomad
使用容器服务:Amazon ECS, Docker Cloud/Tutum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接