Ich mag es nicht, Volumes als Link zu einem Host-Verzeichnis bereitzustellen, daher habe ich ein Muster für das Upgrade von Docker-Containern mit vollständig von Docker verwalteten Containern entwickelt. Wenn Sie einen neuen Docker-Container mit --volumes-from <container>
erstellen, erhält der neue Container mit den aktualisierten Images den gemeinsamen Besitz von Docker-verwalteten Volumes.
docker pull mysql
docker create --volumes-from my_mysql_container [...] --name my_mysql_container_tmp mysql
Wenn Sie das Original my_mysql_container
noch nicht sofort entfernen , können Sie zum bekannten Arbeitscontainer zurückkehren, wenn der aktualisierte Container nicht über die richtigen Daten verfügt oder einen Integritätstest nicht besteht.
An diesem Punkt führe ich normalerweise alle Sicherungsskripte aus, die ich für den Container habe, um mir ein Sicherheitsnetz zu geben, falls etwas schief geht
docker stop my_mysql_container
docker start my_mysql_container_tmp
Jetzt haben Sie die Möglichkeit, sicherzustellen, dass die Daten, die sich voraussichtlich im neuen Container befinden, vorhanden sind, und eine Überprüfung der Integrität durchzuführen.
docker rm my_mysql_container
docker rename my_mysql_container_tmp my_mysql_container
Die Docker-Volumes bleiben so lange erhalten, wie sie von einem Container verwendet werden, sodass Sie den ursprünglichen Container sicher löschen können. Sobald der ursprüngliche Container entfernt wurde, kann der neue Container den Namensvetter des Originals annehmen, um alles so hübsch zu machen, wie es ursprünglich war.
Die Verwendung dieses Musters für die Aktualisierung von Docker-Containern bietet zwei wesentliche Vorteile. Erstens entfällt die Notwendigkeit, Volumes in Hostverzeichnisse zu mounten, da Volumes direkt in aktualisierte Container übertragen werden können. Zweitens sind Sie nie in einer Position, in der es keinen funktionierenden Docker-Container gibt. Wenn das Upgrade fehlschlägt, können Sie problemlos zu der vorherigen Funktionsweise zurückkehren, indem Sie den ursprünglichen Docker-Container erneut hochfahren.