Handig: “hoe had ik die Docker container ook al weer aangemaakt?”

Volgens Portainer draaien er op dit moment 35 Docker containers op mijn NAS (en 8 zijn geïnstalleerd maar staan uit). De oudste container die nog actief is, is van september 2019, 10 maanden geleden dus.

In de tussentijd heb ik het nodige bijgeleerd als het gaat om het aanmaken en runnen van Docker containers. Zo heb ik me aangeleerd om voor elke container een map aan te maken op de NAS met daarin submappen voor eventueel relevante ‘persistent data’, data die je ook wilt bewaren als de container verwijderd wordt of bijgewerkt wordt (configuratiebestanden, databases etc). Ook heb ik mezelf aangewend om het Docker commando waarmee ik de container aanmaak in een “run-docker.sh” bestandje op te nemen. Dat maakt het gemakkelijk om als je een update van een container wilt draaien, de update te downloaden, de container even af te sluiten en te verwijderen, en dan de container weer te starten op basis van de nieuwe image.

Maar ja, dat is nu, dat deed ik 10 maanden geleden niet. En denk maar niet dat ik precies nog weet hoe ik die containers toen allemaal aangemaakt heb. Ja, ik heb (digitale) ontwikkelaantekeningen, maar dan moet ik er op vertrouwen dat die 100% kloppen. Gevaarlijk. Gelukkig is er een oplossing.

Runlike

Zoals meestal het geval is met “eenvoudige” vragen, is er wel iemand geweest die die vraag ook al via Stackoverflow gesteld heeft. Het vreemde was echter dat in dit geval de vraagsteller blijkbaar niet helemaal naar hetzelfde antwoord op zoek was. Het werd namelijk tot 2x toe genoemd en niet gemarkeerd als het beste antwoord.

Nou kan dat zijn omdat het de eerste keer genoemd werd als iets wat je apart moest installeren. Maar “Runlike” kun je gewoon als Docker container draaien. Dan voeg je de naam van de container toe, geeft aan dat het geheel in een txt-bestand opgeslagen moet worden en klaar.

Ik wilde mijn Portainer image updaten. Maar dat was er eentje uit september, dus ik had geen idee meer hoe ik die opgestart had. Met het volgende commando:

sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike portainer > run-docker.sh

kreeg ik een run-docker.sh bestand met daarin de benodigde info:

docker run --name=portainer \
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--volume=/docker/portainer:/data \
--volume=/certificate/certs \
--volume=/data \
-p 9000:9000 \
--restart=always \
--log-driver=db \
--detach=true \
portainer/portainer

Ik moest er alleen nog “sudo” voor zetten en deze was nog zonder dat ik portainer verbond met het lsio netwerk voor de reverse proxy, maar dat kon ik later nog aanpassen.

De updatestappen waren toen:

$ sudo docker pull portainer/portainer
$ sudo docker stop portainer
$ sudo docker rm portainer
$ ./run-docker.sh

Hierboven in het docker run commando kun je goed zien waarom dit werkt: de Portainer Docker image wordt weliswaar verwijderd, maar de benodigde data van de setup worden buiten de container opgeslagen. Echt ideaal: ik heb dus nu een verse, bijgewerkte versie van Portainer draaien zonder dat de andere containers er last van gehad hebben, zonder systeembrede reboots etc.

De volgende keer als ik Portainer wil bijwerken heb ik runlike natuurlijk niet meer nodig. Dan heb ik de run-docker.sh bij de hand in de map waar ik hem verwacht.

En ook dat is het mooie aan Docker: omdat runlike als een Docker image geleverd wordt, kon ik hem uitvoeren in een Docker container. Door het --rm deel in de aanroep hierboven wordt de container na uitvoeren automatisch weer verwijderd. Wat overblijft is een image van 270MB. Die image blijft beschikbaar zodat bij een volgende keer uitvoeren het commando sneller gaat (en er geen image gedownload hoeft te worden), ik kan de image backuppen als ik hem graag veilig wil bewaren. Maar ik kan hem ook gewoon verwijderen. En ook dan weet ik 100% zeker dat er geen restanten achterblijven, geen systeeminstellingen aangepast zijn, geen “dll-bestanden” bijgewerkt.

0 0 stemmen
Bericht waardering
2 Reacties
Inline Feedback
Bekijk alle reacties
trackback

O jee, die Docker container die ik 10 maanden geleden aangemaakt heb, ik moet hem updaten, maar wat was het command… https://t.co/HgttwxAzKK

trackback

Handig: “hoe had ik die Docker container ook al weer aangemaakt?” https://t.co/cONuz5S7pd