Meine Docker-Images basieren auf einem Jenkins CI-Server und werden in unsere private Docker-Registrierung übertragen. Mein Ziel ist es, Umgebungen mit Docker-Compose bereitzustellen, die immer den ursprünglich erstellten Status der Images starten.
Ich verwende derzeit Docker-Compose 1.3.2 sowie 1.4.0 auf verschiedenen Computern, aber wir haben zuvor auch ältere Versionen verwendet.
Ich habe immer die docker-compose pull && docker-compose up -d
Befehle verwendet, um die neuen Bilder aus der Registrierung abzurufen und sie zu starten. Ich glaube, mein bevorzugtes Verhalten funktionierte bis zu einem bestimmten Zeitpunkt wie erwartet, aber seitdem wurden docker-compose up
zuvor gestoppte Container erneut ausgeführt, anstatt jedes Mal die ursprünglich erstellten Images zu starten.
Gibt es eine Möglichkeit, dieses Verhalten loszuwerden? Könnte dies eine sein, die in der Konfigurationsdatei docker-compose.yml verkabelt ist, um nicht bei jedem Aufruf etwas in der Befehlszeile "nicht zu vergessen"?
ps. Ich würde nicht nur einen Weg finden, mein Ziel zu erreichen, sondern auch gerne etwas mehr über den Hintergrund dieses Verhaltens erfahren. Ich denke, die Grundidee von Docker ist es, eine unveränderliche Infrastruktur aufzubauen. Das derzeitige Verhalten von Docker-Compose scheint einfach mit diesem Ansatz in Konflikt zu geraten. Oder vermisse ich hier einige Punkte?
quelle
docker-compose run -d
existiert nicht? Du willstdocker-compose up -d
nein sagen ?docker-compose pull
bevordocker-compose rm -f
Sie noch mehr Zeit sparen könnenDie einzige Lösung, die für mich funktioniert hat, war dieser Befehl:
Dadurch wird automatisch ein neues Image aus dem Repo abgerufen und die vorgefertigte Cache-Version mit den zuvor verwendeten Parametern wird nicht verwendet.
quelle
Nach der aktuellen offiziellen Dokumentation gibt es eine Verknüpfung, die Container, Netzwerke, Volumes und Images, die von up erstellt wurden, stoppt und entfernt. Wenn sie bereits gestoppt oder teilweise entfernt wurden usw., reicht dies ebenfalls aus:
Wenn Sie neue Änderungen an Ihren Bildern oder Docker-Dateien vorgenommen haben, verwenden Sie:
Schließlich:
docker-compose up
In einem Befehl:
docker-compose down && docker-compose build --no-cache && docker-compose up
quelle
docker-compose build --no-cache
wird nur benötigt, wenn Änderungen an Docker-Dateien vorgenommen wurden.docker-compose up
erforderlich, die Dienste mit neu zu erstellendocker-compose build
.Sie können
--force-recreate
an übergebendocker compose up
, die frische Behälter verwenden sollten.Ich denke, der Grund für die Wiederverwendung von Containern besteht darin, Änderungen während der Entwicklung beizubehalten. Beachten Sie, dass Compose mit Volumes etwas Ähnliches macht, das auch zwischen der Neuerstellung von Containern bestehen bleibt (ein neu erstellter Container wird an die Volumes seines Vorgängers angehängt). Dies kann beispielsweise hilfreich sein, wenn Sie einen Redis-Container als Cache verwenden und den Cache nicht jedes Mal verlieren möchten, wenn Sie eine kleine Änderung vornehmen. Zu anderen Zeiten ist es nur verwirrend.
Ich glaube nicht, dass Sie dies auf irgendeine Weise aus der Compose-Datei erzwingen können.
Wahrscheinlich kollidiert es mit unveränderlichen Infrastrukturprinzipien. Das Gegenargument ist wahrscheinlich, dass Sie Compose (noch) nicht in der Produktion verwenden. Ich bin mir auch nicht sicher, ob ich damit einverstanden bin, dass unveränderliche Infrastruktur die Grundidee von Docker ist, obwohl dies sicherlich ein guter Anwendungsfall / Verkaufsargument ist.
quelle
--force-recreate
funktioniert bei mir nicht ... Bild wird nicht gezogen, obwohl es eine neuere Version gibt ...ODER
quelle
Wenn es etwas Neues gibt, wird es wieder aufgebaut.
quelle