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:
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).
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:
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:)
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.
Tags und Links docker docker-compose fig