docker-compose: Verwenden mehrerer Dockerfiles für mehrere Dienste

8

Ich benutze docker-compose und würde gerne verschiedene Dockerfiles für die Build-Schritte verschiedener Dienste verwenden. Die Dokumentation scheint zu empfehlen, verschiedene Dockerfiles in verschiedenen Verzeichnissen zu speichern, aber ich möchte, dass alle darin enthalten sind die gleiche (und möglicherweise unterscheidbar mit der folgenden Konvention: Dockerfile.postgres, Dockerfile.main ...). Ist das möglich?

Bearbeiten: Das Szenario, das ich habe, enthält diese docker-compose-Datei:

%Vor%

wo postgresdb 's Dockerfile ist:

%Vor%

und das wichtigste ist:

%Vor%

Das funktioniert jetzt, aber ich möchte postgresdb 's Dockerfile erweitern, indem ich ein Python-Skript aufruft, das Tabellen in der Datenbank nach Modellen erstellt, die auf SQL Alchemy aufbauen (das Python-Skript würde als python manage.py create_tables heißen) ). Ich wollte es zur Dockerfile der Datenbank hinzufügen, aber wegen der Isolierung der Behälter kann ich SQL-Alchemie dort nicht benutzen, weil dieses Bild auf dem postgres Bild anstelle von Pythons basiert und es das% co_de nicht enthält % Paket ...

Was kann ich tun? Ich habe versucht, den Dienst sqlalchemy in main zu verwenden, aber leider enthält er kein Python und seine Pakete, daher kann ich immer noch keine einzige Dockerdatei schreiben, die die Postgres-Datenbank (über das Shell-Skript) erstellt als seine Tabellen (über ein Python-Skript).

    
aralar 23.04.2015, 23:07
quelle

2 Antworten

11

Dies ist nicht möglich, da Docker Buildkontexte verarbeitet.

Sie müssen Dockerfile in jedem Verzeichnis verwenden und platzieren, das Teil des Docker-Buildkontexts für den that -Dienst wird.

Siehe: Dockerfile

Sie benötigen tatsächlich ein docker-compose.yml , das wie folgt aussieht:

%Vor%

Siehe: docker-compose

Aktualisierung:

Um Ihren speziellen Anwendungsfall zu adressieren - Während ich verstehe, was Sie versuchen und warum ich das persönlich nicht tun würde. Die Isolation ist eine gute Sache und hilft, Erwartungen und Komplexität zu verwalten. Ich würde die "Datenbankerstellung" entweder als einen anderen Container basierend auf dem Quellcode Ihrer App oder innerhalb des App-Containers selbst durchführen.

Alternativ können Sie sich auch mehr skriptbasierte und vorlagenbasierte Lösungen ansehen, wie shut ( Ich habe keine Erfahrung, aber gehört Gott thigns über ).

FWIW: Trennung von Anliegen ftw:)

    
James Mills 23.04.2015, 23:43
quelle
1

Ersteller von ShutIt hier. Erfreut zu hören, dass die Leute gute Dinge darüber hören.

Um ehrlich zu sein, würde ich in Ihrer Position Ihre eigene Dockerfile schreiben und Standard-Paketverwaltung wie apt oder yum verwenden. Eine schnelle Überprüfung mit einem Ubuntu-Image und Python-Pip und Python-Sqlalchemy sind frei verfügbar.

Es gibt mehr verschachtelte Lösungen, die für Sie mit ShutIt funktionieren können. Ich freue mich, dies offline zu besprechen, da ich denke, dass es ein wenig unpassend ist. ShutIt wurde für diese Art von Anwendungsfall geschrieben, da ich sehen konnte, dass dies ein allgemeines Problem wäre, wenn Dockerfiles nur außerhalb des Microservices-Bereichs verwendet wird.

    
ianmiell 11.05.2015 10:13
quelle

Tags und Links