2015-03-27 13 views
5

Ich migriere eine vorhandene Rails-Anwendung auf Docker und Docker-Compose. Es gibt einige Skripts, die nur bei der Erstellung der Container ausgeführt werden müssen, z. B. ein Skript, das die Prod-Datenbank in ein Volume kopiert und in Elasticsearch indiziert.Docker-Compose: Initialize vs Run

Ab dann, wenn ich die Container lokal für die Entwicklung starte, möchte ich nur den Rails-Entwicklungsserver und nicht alle Db-Init-Skripte ausführen. Ich könnte zwei docker-compose Dateien machen (sagen wir init und run), die die gleichen sind, mit Ausnahme der command: Option auf dem Webapp-Container.

Gibt es einen besseren Weg?

Antwort

2

Das Basis-Docker-System hat kein "on run" -Konzept für benutzerdefinierte Skripts.

Was Sie tun können, ist eine dieser Ansätze:

  • zu Ihrem Skript hinzufügen Überprüfung der, wenn es bereits getan hat. Dann ist es egal, ob Sie es immer wieder ausführen.
  • Integrieren Sie die db in das Andockfenster und versenden Sie es wie bereits mit den Daten geladen.
  • Machen Sie ein 2-teiliges Andocksystem: Das erste wäre das Andockfenster, das Sie jetzt mit einem möglichen "ONBUILD" -Befehl kennen, so dass das zweite das Skript ausführen würde. Dann ist das zweite Andockfenster das Original und würde das Skript mit oder ohne "ONBUILD" ausführen. In Docker-Compose hätten Sie einen lokalen Build, der den Import beim Erstellen des lokalen Docker-Images auslöst.

Nur eine Idee

0

Sie extends in Ihrem compose * .yml Dateien verwenden können.

Extend documentation and examples.

+0

„Wenn man verlängern, um einen Dienst, Links und volumes_from Konfigurationsoptionen nicht vererbt werden -. Sie werden diejenigen manuell jedes Mal, wenn Sie es erweitern definieren müssen“ Immer noch besser als eine komplett neue Docker-Compose-Datei zu erstellen, aber nicht so trocken wie es sein könnte. Ich möchte wirklich nur ein oder zwei Zeilen zwischen den zwei docker-compose-Dateien unterscheiden, so dass die Erweiterung docker-compose nur ein oder zwei Zeilen lang sein sollte. – cyniphile