GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come aggiornare le immagini Docker all'ultima versione

Le immagini Docker sono la base dei contenitori Docker. Poiché le immagini sono la base, ti sei mai chiesto come aggiornare i contenitori Docker quando viene rilasciata una nuova versione di un'immagine?

Non meravigliarti più! In questo tutorial imparerai come aggiornare il tuo repository di immagini Docker locale e aggiornare i tuoi contenitori a una nuova versione senza rovinare le cose!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere quanto segue:

  • Ambiente Linux:il tutorial utilizza Linux (Ubuntu Focal) per eseguire Docker, ma puoi anche applicare gli stessi passaggi generali a Windows o macOS.
  • Installa Docker Engine 20.10.8 (Linux) o Docker desktop 3.5.2 (macOS e Windows).

Esecuzione di immagini Docker idempotenti

Un'immagine Docker contiene tutto il software necessario per eseguire l'applicazione ad essa associata, inclusi i pacchetti del sistema operativo e le dipendenze. Docker assembla le immagini tramite istruzioni all'interno di un file chiamato Dockerfile , che contiene istruzioni di installazione idempotenti.

Un'istruzione idempotente implica che l'immagine risultante dall'esecuzione dell'istruzione di installazione risulterà sempre nello stesso output.

Il vantaggio della creazione di immagini idempotenti è che sono indipendenti dal sistema:l'immagine risultante sarà sempre la stessa. Anche l'esecuzione del contenitore sarà sempre la stessa, indipendentemente da dove avvenga l'esecuzione.

Una nuova versione dell'immagine in genere implica alcuni miglioramenti alle istruzioni per la creazione della base del contenitore Docker, ad esempio:

  • Una versione più recente del codice sorgente dell'applicazione può sostituire quella precedente;
  • Migliore gestione delle dipendenze:meno spazio richiesto o migliori prestazioni;
  • Maggiore sicurezza:l'immagine ha patch di sicurezza per evitare vulnerabilità.

Per ottenere gli ultimi vantaggi da qualsiasi aggiornamento nelle immagini Docker, devi sapere come aggiornarle e applicare tali aggiornamenti ai tuoi contenitori.

Aggiornamento delle immagini della Docker locale

Per cominciare, inizia aggiornando un'immagine Docker locale. L'applicazione nell'esempio python container esegue applicazioni di codice Python. L'aggiornamento dell'immagine Docker locale significa che le applicazioni possono fare affidamento sull'immagine appena aggiornata.

Devi prima sapere quali immagini sono attualmente disponibili nel tuo ambiente locale. Esegui il comando seguente per controllare le tue immagini locali. Il TAG la colonna indica la versione disponibile dell'immagine.

docker images

Ora che hai la tua versione locale dell'immagine, devi trovare l'ultima immagine disponibile su un registro remoto. Esistono più registri Docker remoti (repository di immagini Docker) che il motore Docker interroga per aggiornare le immagini locali. Docker estrae le immagini da DockerHub per impostazione predefinita ma ci sono più alternative, la maggior parte private. Di seguito sono elencati alcuni repository alternativi.

  • Galleria pubblica di Amazon Web Service (AWS) ECR
  • Sonatipo Nexus
  • Porto VM

Naviga attraverso la pagina del repository e cerca l'immagine desiderata:un'immagine Python ufficiale che aggiornerai come esempio. Digita python per trovare l'immagine desiderata in DockerHub e aprirla per trovare i tag disponibili. Gli esempi per questo tutorial sono di un'immagine Python.

Ogni tag ha anche una data push. La data push è la data in cui l'immagine è stata caricata nel registro. Prendi nota del tag dell'immagine e nome , di cui avrai bisogno nei seguenti passaggi.

Ora che hai il tag della versione più recente, è il momento di aggiornare l'immagine. Per eseguire l'aggiornamento a un'immagine più recente, devi prima estrarre la nuova versione. Esegui il docker pull comando seguito da due punti e il nome e il tag dell'immagine più recente:il nome e il tag di cui hai preso nota in precedenza. Il nome e il tag per l'esempio è python:slim-buster . Il comando completo e l'output risultante sono mostrati di seguito.

docker pull python:slim-buster 

Per estrarre l'immagine dal registro delle immagini Docker non predefinito (DockerHub), è necessario fornire invece l'URI dell'immagine completo. Ad esempio:per estrarre Python da (AWS) ECR Public Gallery, esegui dockerpull public.ecr.aws/bitnami/python:3.7

Imparare come aggiornare i contenitori Docker

Dopo aver creato un contenitore, l'immagine del contenitore non può essere modificata. Poiché l'immagine non può cambiare, non è possibile aggiornare veramente un contenitore in esecuzione. Quello che devi fare è ricreare tutti i contenitori in esecuzione con contenitori sostitutivi utilizzando la versione dell'immagine più recente.

Dato che hai già la versione più recente, è ora di ricreare i contenitori con le vecchie immagini che devono essere aggiornate.

Per trovare i contenitori che devi ricreare, elenca tutti i contenitori esistenti che eseguono la vecchia immagine. La docker ps il comando elenca i contenitori. Con il --filter flag, specifichi quali contenitori elencare. Sono disponibili più opzioni per il filtraggio e l'ancestor flag filtri in base all'immagine utilizzata come base per costruire il contenitore. I contenitori di partenza negli esempi sono per Python 3.7.2, che applicherai come filtro. Il -a switch mostra tutti i contenitori disponibili.

docker ps -a --filter "ancestor=python:3.7.2"

Puoi usare l'output di docker ps come input per eseguire il docker stop comando su tutti i contenitori elencati. Il flag -q è incluso, quindi il comando listato restituisce solo gli ID dei contenitori. L'output del comando è l'elenco degli ID dei contenitori fermati.

docker stop $(docker ps -aq  --filter "ancestor=python:3.7.2")

Dopo aver arrestato i contenitori, devi chiedere a Docker di eliminarli in modo efficace dal sistema prima di rimuovere l'immagine obsoleta.

docker rm $(docker ps -aq --filter "ancestor=python:3.7.2")

Dopo aver rimosso tutti i contenitori associati all'immagine deprecata, puoi rimuovere la vecchia immagine con il docker rmi comando.

docker rmi python:3.7.2

Creazione di nuovi contenitori con le immagini di aggiornamento

Ora è il momento di sostituire finalmente i vecchi contenitori, quelli che erano stati precedentemente eliminati, con nuovi contenitori basati sull'immagine aggiornata. Questa volta, creerai i contenitori utilizzando la versione dell'immagine più recente. Poiché i contenitori sono idempotenti, puoi aspettarti che tutto funzioni come prima.

Esegui il nuovo contenitore con docker run comando e il nome e il tag dell'immagine aggiornata di cui avrà bisogno il contenitore. In questo esempio, il -it flag indica a Docker di eseguire il contenitore in modalità interattiva, in modo da poter eseguire comandi all'interno del contenitore per verificare eventuali funzionalità aggiornate.

docker run -it python:slim-buster

Si noti che il nuovo contenitore Docker esegue una versione Python più recente:versione 3.9.7.

Conclusione

In questo tutorial, hai dato una sbirciatina dietro le coperte e hai imparato la magia dietro come aggiornare i container Docker:fumo e specchi! Non c'è aggiornamento! Invece, rimuovi tutte le tracce della vecchia versione e sostituiscile con nuovi contenitori utilizzando una versione più recente. E, grazie all'idempotenza, i container continuano a funzionare come al solito:TA-DA!

Quindi, quali sono i contenitori che intendi aggiornare in seguito?


Docker
  1. Come spostare le immagini Docker tra host

  2. Come condividere le immagini Docker con altri

  3. Aggiorna cURL per EasyApache 4 all'ultima versione

  4. Come aggiornare/aggiungere un file nell'immagine Docker

  5. Come reinstallare l'ultima versione di cmake?

Come ottenere l'ultima versione di vim su Ubuntu 20.04?

Come installare l'ultima versione di GCC su Ubuntu 20.04?

Come utilizzare Docker Commit per modificare le immagini del contenitore

Come aggiornare Linux Mint all'ultima versione

Come creare e inviare un'immagine Docker al repository Docker Hub

Come elencare / cercare / estrarre le immagini della finestra mobile su Linux