2016-06-04 17 views
2

Nehmen wir an, wir haben einen einfachen Web-App-Stack, etwa den in docker-compse beschriebenen. Seine docker-compose.yml sieht wie folgt aus:Wie setze ich den Docker Container für die Datenbank auf einen anderen Host in der Produktion?

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 

Dieses auf einem Laptop für die Entwicklung ist groß. In der Produktion wäre es jedoch nützlich, den DB-Container auf seinem eigenen Host zu haben. Tutorials, die ich finden kann, benutze docker-swarm, um den Web-Container zu skalieren, aber beachte nicht, dass die Instanz von db und eine Instanz von web auf derselben Maschine laufen.

Kann ein bestimmter Container auf einer eigenen Maschine (oder besser auf einer bestimmten Maschine) mit docker angefordert werden? Wenn das so ist, wie? Wenn nicht, was ist der Docker-Weg, mit der Datenbank in Multi-Container-Apps umzugehen?

Antwort

1

Meiner Meinung nach sitzen Datenbanken am Rande der Welt der Container, sie sind nützlich für Entwicklung und Tests, aber Produktionsdatenbanken sind von Natur aus oft nicht sehr flüchtige oder tragbare Dinge. Flocker sicherlich hilft skalierbare Arten von Datenbanken, wie Cassandra, aber Datenbanken können sehr spezifische Anforderungen, die besser als ein Service, der hinter Ihrem Container-App sitzt (RDS, Cloud SQL usw.) behandelt werden kann.

In jedem Fall benötigen Sie ein Container-Orchestrierungstool.

Sie können manual scheduling constraints für Compose + Swarm anwenden, um den Docker-Host zu diktieren, auf dem ein Container ausgeführt werden kann. Für Ihre Datenbank, könnten Sie haben:

environment: 
    - "constraint:storage==ssd" 

Ansonsten können Sie Setup eine statische Docker Umgebung mit Ansible, Chef, Puppet

einem anderen Orchestrierung-Tool, das Docker unterstützt: Kubernetes, Mesos, Nomad

Verwenden Sie einen Containerservice: Amazon ECS, Docker Cloud/Tutum