So aktualisieren Sie Ihre Docker-Container automatisch, wenn Basis-Images aktualisiert werden
Sagen, dass ich eine triviale container auf der Grundlage der ubuntu:latest
. Jetzt gibt es ein Sicherheits-update und ubuntu:latest
aktualisiert wird, in der docker-repo .
1) Wie würde ich wissen, dass meine lokalen Bild und dem Behälter laufen hinter?
2) gibt es eine best practice für die automatische Aktualisierung von lokalen images und Container zu Folgen, die docker-repo-updates, was in der Praxis würde Ihnen die gleichen Nettigkeiten mit unattended-upgrades läuft auf einem herkömmlichen ubuntu-Maschine
InformationsquelleAutor der Frage hbogert | 2014-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nutzen wir ein Skript, das prüft, ob in einem Laufenden container gestartet wird mit dem neuesten Bild. Wir verwenden auch upstart-init-Skripte für den Start des docker-image.
- Und init-sieht aus wie
InformationsquelleAutor der Antwort bsuttor
'Andockfenster ' Weg' wäre, die Nutzung docker-hub automatisierte builds. Die Repository-Links Funktion bauen Ihre container bei einem upstream-container neu erstellt wird, und die Webhooks Funktion sendet Ihnen eine Benachrichtigung.
Sieht es aus wie die webhooks sind begrenzt auf HTTP-POST-Aufrufe. Würden Sie benötigen, um eine Dienstleistung, Sie zu fangen, oder vielleicht verwenden Sie eine der POST zur E-Mail-Dienste gibt.
Ich habe nicht hingeschaut, aber die neue Andockfenster Universal Control-Plane vielleicht ein feature für die Erkennung aktualisiert Behälter und erneut bereitstellen.
InformationsquelleAutor der Antwort CAB
Ich hatte das gleiche Problem und dachte, es kann einfach gelöst werden, indem ein cron-job aufrufen
unattended-upgrade
täglich.Meine Absicht ist es, eine automatische und schnelle Lösung, um sicherzustellen, dass die Produktion der Behälter ist sicher und aktualisiert, da kann es mir auch irgendwann zu aktualisieren meiner Bilder und implementieren Sie eine neue docker image mit den neuesten Sicherheits-updates.
Ist es auch möglich zu automatisieren des image-build-und deployment-mit Github Haken
Habe ich einen basic - docker-image mit, das automatisch prüft und installiert Sicherheits-updates täglich (kann direkt von
docker run itech/docker-unattended-upgrade
).Stieß ich auch auf eine andere Ansatz zu überprüfen, ob der container ein update benötigt.
Meine komplette Umsetzung:
Dockerfile
Hilfs-Skripte
installieren
start
Bearbeiten
Entwickelte ich ein kleines tool docker-run läuft als docker-container und können verwendet werden, um update-Pakete in alle oder ausgewählte laufende Container, es kann auch verwendet werden, zum ausführen beliebiger Befehle.
Kann leicht geprüft werden, mit dem folgenden Befehl:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
welche standardmäßig ausgeführt wird
date
- Befehl in allen Laufenden Container und die Ergebnisse anzuzeigen. Wenn Sie passupdate
stattexec
ausgeführt wirdapt-get update
gefolgt vonapt-get upgrade -y
in alle Laufenden ContainerInformationsquelleAutor der Antwort iTech
Können Sie Wachtturm um die Uhr für updates, um das Bild ein container instanziiert wird, aus und automatisch ziehen Sie das update und starten Sie den Behälter mit dem aktualisierten Bild. Jedoch, dass doesn T lösen das problem des Wiederaufbaus Ihrer eigenen Bilder, wenn es eine änderung der upstream-Bild-es basiert auf. Sie konnte sehen dies als eine zwei-Teil problem: (1) wissen, Wann einem upstream-Bild aktualisiert wurde, und (2) das eigentliche Bild wieder aufzubauen. (1) gelöst werden kann, relativ leicht, aber (2) es kommt eine Menge auf dem lokalen build-Umgebung/Praxen, so ist es wohl viel schwerer zu erstellen, die eine verallgemeinerte Lösung.
Wenn Sie in der Lage zu verwenden Docker Hub automatisierte buildsdas ganze problem gelöst werden kann, relativ sauber, mit der repository-links - Funktion, die Ihnen auslösen einer Wiederherstellung automatisch, wenn ein verknüpftes repository (wahrscheinlich ein upstream) ist aktualisiert. Sie können auch so konfigurieren, dass webhookum Sie zu Benachrichtigen, wenn ein automatisierter build Auftritt. Wenn Sie möchten, eine E-Mail oder SMS-Benachrichtigung, Sie könnten eine Verbindung der webhook zu IFTTT Maker. Ich fand die IFTTT Benutzeroberfläche irgendwie verwirrend, aber Sie zur Konfiguration der Andockfenster webhook zu posten https://maker.ifttt.com/trigger/
docker_xyz_image_built
/mit/- Taste/your_key
.Wenn Sie brauchen, um zu bauen lokal, können Sie zumindest das problem lösen, bekommen Sie Benachrichtigungen, wenn eine upstream-Bild aktualisiert wird, durch erstellen eines dummy-repo im Docker-Hub mit Ihrem repo(s) von Interesse. Der einzige Zweck der dummy-repo wäre es zum auslösen eines webhook Wann wird Sie wieder aufgebaut (was bedeutet, einer der verknüpften repos aktualisiert wurde). Wenn Sie in der Lage, diese zu empfangen webhook, könnte man sogar verwenden, um trigger einen rebuild auf Ihrer Seite.
InformationsquelleAutor der Antwort jjlin
Würden Sie nicht wissen, Ihre container hinter laufen, ohne docker pull. Dann müssten Sie rebuild oder recompose Ihr Bild.
Die Befehle lassen sich in einem Skript zusammen mit allem, was sonst noch notwendig, um das upgrade abzuschließen, obwohl eine richtige container müssten nicht zusätzlich etwas.
InformationsquelleAutor der Antwort seanmcl
Ich werde mich nicht in die ganze Frage, ob oder nicht Sie wollen die unbeaufsichtigte updates in Produktion (glaube ich nicht). Ich bin gerade verlassen, dieses hier zur Referenz, falls jemand findet es nützlich. Aktualisieren Sie alle Ihre docker-images auf die neueste version mit dem folgenden Befehl in Ihrem terminal aus:
# docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}' | xargs -L1 docker pull
InformationsquelleAutor der Antwort Meferdati
Ein anderer Ansatz könnte davon ausgehen, dass Ihre Basis-image wird hinter Recht schnell (und das ist sehr wahrscheinlich passieren wird), und die Kraft ein weiteres Bild erstellen Ihrer Anwendung in regelmäßigen Abständen (z.B. jede Woche) und dann erneut bereitstellen Sie, wenn Sie sich geändert hat.
Soweit ich das beurteilen kann, populäre Bilder basieren wie die offiziellen Debian-oder Java-update Ihre tags zu bieten für security Updates, so tags sind nicht unveränderlich sind (wenn Sie möchten, eine stärkere Garantie, dass Sie müssen verwenden Sie die Referenz [image:@digest], in den letzten Docker-Versionen). Also, wenn Sie erstellen Ihr Bild mit
docker build --pull
dann sollte Ihre Anwendung erhalten Sie die neuesten und größten von der Basis-image-tag Sie verweisen.Seit veränderlich tags kann verwirrend sein, am besten ist es, erhöhen Sie die Versionsnummer Ihrer Anwendung jedes mal, wenn Sie dies tun, so dass zumindest auf Ihrer Seite Dinge, die sind sauberer.
So, ich bin mir nicht sicher, dass das Skript vorgeschlagen, in einer der vorherigen Antworten nicht den job, da es nicht neu erstellen Sie die Anwendung Bild - nur updates der Basis-image-tag und dann startet die container, aber die neuen container noch Referenzen der alten Basis-image-hash.
Ich würde nicht befürworten, für die Ausführung von cron-Typ Arbeitsplätze in Containern (oder andere Prozesse, sofern nicht wirklich notwendig), da dies widerspricht dem mantra des läuft nur ein Prozess pro container (es gibt verschiedene Argumente, warum dies besser ist, so werde ich nicht gehen in Sie hier).
InformationsquelleAutor der Antwort Bogdan
Prämisse auf meine Antwort:
Ansatz
Darüber hinaus die Basis-image aktualisiert werden kann/die container mit einer komplett neuen Basis-image gebaut werden kann, in regelmäßigen Abständen, wie der Betreuer fühlt sich notwendig
Vorteile
InformationsquelleAutor der Antwort Phani
Dependency management für Docker-images ist ein echtes problem. Ich bin Teil einer Mannschaft, baute ein Werkzeug, MicroBadgerum mit diesem durch die überwachung von container-images und prüfen von Metadaten. Eine Ihrer Funktionen ist, können Sie einrichten, eine Benachrichtigung webhook aufgerufen wird, wenn ein Bild, das Sie interessiert (z.B. ein Basis-image) verändert.
InformationsquelleAutor der Antwort Liz Rice
Gibt es eine Menge Antworten hier, aber keins passte zu meinen Bedürfnissen. Ich wollte eine tatsächliche Antwort an den Fragesteller ist die #1 Frage. Wie weiß ich, Wann ein Bild aktualisiert wird hub.docker.com?
Die unterhalb der Skript ausgeführt werden kann täglich. Bei der ersten Ausführung, es wird ein baseline-tags und Aktualisierung der Daten aus der HUB-registry und speichert Sie lokal. Von da aus, jedes mal, wenn es ausgeführt wird, überprüft es die registry für die neuen tags und update-Termine. Da diese änderungen jedes mal, wenn ein neues Bild vorhanden ist, es sagt uns, wenn die Basis sich das Bild geändert hat. Hier ist das Skript:
Werden Sie wollen, zu ändern, die
DATAPATH
variable an der Spitze, und ändern Sie die E-Mail-Benachrichtigung-Befehl am Ende, um Ihre Bedürfnisse anzupassen. Für mich, ich habe es SSH in einen server in einem anderen Netzwerk, wo mein SMTP liegt. Aber Sie könnte leicht verwenden Sie diemail
Befehl, zu.Nun, Sie wollen auch zu prüfen, ob aktualisierte Pakete in den Behältern selbst. Dies ist wahrscheinlich auch effektiver als ein "ziehen" sobald Ihr Container arbeiten. Hier ist das Skript zu ziehen, dass off:
InformationsquelleAutor der Antwort Fmstrat