661 Stimmen

Wie man einen Docker-Container aktualisiert, nachdem sich das Image geändert hat

Sagen wir, ich habe das offizielle mysql:5.6.21 Image abgerufen.

Ich habe dieses Image bereitgestellt, indem ich mehrere Docker-Container erstellt habe.

Diese Container laufen seit einiger Zeit, bis MySQL 5.6.22 veröffentlicht wird. Das offizielle Image von mysql:5.6 wird mit dem neuen Release aktualisiert, aber meine Container laufen immer noch mit 5.6.21.

Wie übertrage ich die Änderungen im Image (dh das Upgrade der MySQL-Distribution) auf alle meine vorhandenen Container? Was ist der richtige Docker-Weg, dies zu tun?

16voto

Eddie Jaoude Punkte 1657

Ähnliche Antwort wie oben

docker images | awk '{print $1}' | grep -v 'none' | grep -iv 'repo' | xargs -n1 docker pull

14voto

gdbj Punkte 13883

So sieht es aus, wenn Sie ein benutzerdefiniertes Dockerfile mit docker-compose erstellen.

  1. Erstellen Sie zuerst Ihr benutzerdefiniertes Dockerfile und fügen Sie eine nächste Versionsnummer hinzu, um es zu unterscheiden. Bsp .: docker build -t imagename:version . Dies speichert Ihre neue Version lokal.
  2. Führen Sie docker-compose down aus
  3. Bearbeiten Sie Ihre docker-compose.yml-Datei, um den neuen Bildnamen zu reflektieren, den Sie in Schritt 1 festgelegt haben.
  4. Führen Sie docker-compose up -d aus. Es wird lokal nach dem Bild suchen und Ihr aktualisiertes verwenden.

-EDIT-

Meine obigen Schritte sind ausführlicher als nötig. Ich habe meinen Workflow optimiert, indem ich den build: .-Parameter in meine docker-compose-Datei aufgenommen habe. Die Schritte sehen nun wie folgt aus:

  1. Überprüfen Sie, ob mein Dockerfile wie gewünscht aussieht.
  2. Setzen Sie die Versionsnummer des Bildnamens in meiner docker-compose-Datei.
  3. Wenn mein Bild noch nicht gebaut ist: führen Sie docker-compose build aus
  4. Führen Sie docker-compose up -d aus

Zu diesem Zeitpunkt war mir nicht bewusst, dass docker-compose klug genug ist, meinen Container mit einem Befehl einfach auf das neue Bild zu aktualisieren, anstatt ihn zuerst herunterzufahren.

11voto

beruic Punkte 4807

Wenn Sie Docker Compose nicht verwenden möchten, kann ich Portainer empfehlen. Es verfügt über eine Rekreationsfunktion, mit der Sie einen Container neu erstellen können, während Sie das neueste Image ziehen.

2voto

seanmcl Punkte 9672

Sie müssen entweder alle Bilder neu erstellen und alle Container neu starten oder auf irgendwie die Software aktualisieren und die Datenbank neu starten. Es gibt keinen Upgrade-Pfad, außer dem, den Sie selbst entwerfen.

2voto

gvlx Punkte 648

Aus http://blog.stefanxo.com/2014/08/update-all-docker-images-at-once/ entnommen

Sie können alle Ihre vorhandenen Bilder mit dem folgenden Befehls-Pipeline aktualisieren:

docker images | awk '/^REPOSITORY|\/ {next} {print $1}' | xargs -n 1 docker pull

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X