In un ambiente Docker si utilizzano più immagini e si lavora con molti contenitori. Quando esegui un contenitore da un'immagine, continua a eseguire quella versione perché le immagini Docker non si aggiornano automaticamente. Potrebbe essere necessario aggiornarlo manualmente. Si consiglia sempre di eseguire un container dall'ultima immagine Docker.
In questa guida, ti mostreremo esempi pratici di come aggiornare un container in esecuzione senza tempi di inattività.
Prerequisiti
- Un nuovo server Ubuntu 20.04 sulla piattaforma Atlantic.Net Cloud
- Una password di root configurata sul tuo server
Fase 1:crea un server cloud Atlantic.Net
Per prima cosa, accedi al tuo server Atlantic.Net Cloud. Crea un nuovo server, scegliendo Ubuntu 20.04 come sistema operativo con almeno 2GB di RAM. Collegati al tuo Cloud Server tramite SSH e accedi utilizzando le credenziali evidenziate in alto nella pagina.
Dopo aver effettuato l'accesso al tuo server Ubuntu 20.04, esegui il comando seguente per aggiornare il tuo sistema di base con gli ultimi pacchetti disponibili.
apt-get update -y
Passaggio 2:installare Docker CE e Docker Compose
Innanzitutto, installa tutte le dipendenze richieste con il seguente comando:
apt-get install git apt-transport-https ca-certificates curl software-properties-common -y
Quindi, aggiungi la chiave e il repository Docker GPG con il seguente comando:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Una volta aggiunto il repository, installa Docker e Docker componi con il seguente comando:
apt-get install docker-ce docker-compose -y
Una volta installati entrambi i pacchetti, puoi procedere al passaggio successivo.
Passaggio 3:crea un file di composizione Docker
Ai fini di questo tutorial, creeremo una rete docker, un volume e un file docker-compose.yml per distribuire un container Ghost.
Innanzitutto, crea una rete denominata net e un volume denominato ghost utilizzando il comando seguente:
docker network create net docker volume create ghost
Quindi, crea una directory per il progetto Ghost con il seguente comando:
mkdir Ghost
Quindi, cambia la directory in Ghost e crea un file docker-compose.yml:
cd Ghost nano docker-compose.yml
Aggiungi le seguenti righe:
version: '3.5' services: ghost: image: ghost:3.36 volumes: - ghost:/var/lib/ghost/content environment: - VIRTUAL_HOST=ghost.example.com - url=http://ghost.example.com - NODE_ENV=production restart: always networks: - net volumes: ghost: external: true networks: net: external: true
Salva e chiudi il file quando hai finito.
Il file sopra scaricherà l'immagine Ghost versione 3.36 e creerà un contenitore Ghost per il dominio ghost.example.com.
Fase 4:crea un contenitore fantasma
Ora cambia la directory in Ghost e avvia il contenitore Ghost usando il seguente comando:
docker-compose up -d
Dovresti ottenere il seguente output:
Pulling ghost (ghost:3.36)... 3.36: Pulling from library/ghost bb79b6b2107f: Pull complete 99ce436c3449: Pull complete f7bdc31da5f5: Pull complete 7a1300b9ff59: Pull complete a495c68fa838: Pull complete 6e362a39ec35: Pull complete b68b4f3c36f7: Pull complete 41f8b02d4a71: Pull complete 3ecc736ea4e5: Pull complete Digest: sha256:595c759980cd22e99037811397012908d89efb799776db222a4be6d4d892917c Status: Downloaded newer image for ghost:3.36 Creating ghost_ghost_1 ... done
Puoi controllare l'immagine Ghost con il seguente comando:
docker images
Uscita:
REPOSITORY TAG IMAGE ID CREATED SIZE ghost 3.36 455ce1645479 4 months ago 440MB
Puoi anche controllare il contenitore Ghost con il seguente comando:
docker ps
Uscita:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4b51b1aafc8 ghost:3.36 "docker-entrypoint.s…" 23 seconds ago Up 20 seconds 2368/tcp ghost_ghost_1
Passaggio 5:aggiorna il file Docker Compose
In questa sezione, aggiorneremo il file di composizione Docker e cambieremo la versione Ghost da 3.36 a 3.37.1:
nano docker-compose.yml
Apporta le seguenti modifiche:
version: '3.5' services: ghost: image: ghost:3.37.1 volumes: - ghost:/var/lib/ghost/content environment: - VIRTUAL_HOST=ghost.example.com - url=http://ghost.example.com - NODE_ENV=production restart: always networks: - net volumes: ghost: external: true networks: net: external: true
Salva e chiudi il file quando hai finito.
Fase 6:avvia un nuovo container fantasma
Ora useremo il metodo di ridimensionamento per creare un nuovo contenitore Ghost senza influire sul vecchio contenitore Ghost. Puoi farlo con il seguente comando:
cd Ghost docker-compose up -d --scale ghost=2 --no-recreate
Dovresti ottenere il seguente output:
Pulling ghost (ghost:3.37.1)... 3.37.1: Pulling from library/ghost bb79b6b2107f: Already exists 99ce436c3449: Already exists 7f4b5e228565: Pull complete de71eab7febf: Pull complete 29961d2eb573: Pull complete 923f84e249ab: Pull complete dfad6f73fc3d: Pull complete b16cf83b3022: Pull complete 387b2254843c: Pull complete Digest: sha256:fad0c2631cbba3d6c61da6fa5ef39da201780f2ae64ce51f3d5ebb412ca2564b Status: Downloaded newer image for ghost:3.37.1 Starting ghost_ghost_1 ... done Creating ghost_ghost_2 ... done
Puoi controllare la nuova immagine Ghost con il seguente comando:
docker images
Uscita:
REPOSITORY TAG IMAGE ID CREATED SIZE ghost 3.37.1 c64d108acdfe 3 months ago 439MB ghost 3.36 455ce1645479 4 months ago 440MB
Puoi anche controllare il nuovo contenitore Ghost con il seguente comando:
docker ps
Uscita:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c21550f39440 ghost:3.37.1 "docker-entrypoint.s…" 33 seconds ago Up 31 seconds 2368/tcp ghost_ghost_2 d4b51b1aafc8 ghost:3.36 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 2368/tcp ghost_ghost_1
Fase 7:scala il nuovo contenitore fantasma
A questo punto, entrambi i container Ghost funzionano utilizzando la stessa configurazione. Ora ci fermeremo e rimuoveremo il vecchio contenitore Ghost.
docker container stop ghost_ghost_1 docker container rm ghost_ghost_1
Ora, esegui il comando seguente per ridurre la configurazione alle impostazioni originali:
cd Ghost docker-compose up -d --scale ghost=1 --no-recreate
Puoi anche controllare il nuovo registro del contenitore Ghost per ulteriori informazioni.
docker logs ghost_ghost_2
Uscita:
[2021-03-05 04:50:13] INFO Blog is in maintenance mode. [2021-03-05 04:50:13] INFO Ghost is running in production... [2021-03-05 04:50:13] INFO Your site is now available on http://ghost.example.com/ [2021-03-05 04:50:13] INFO Ctrl+C to shut down [2021-03-05 04:50:13] INFO Ghost boot 3.581s [2021-03-05 04:50:13] INFO Creating database backup [2021-03-05 04:50:13] INFO Database backup written to: /var/lib/ghost/content/data/ghost.ghost.2021-03-05-04-50-13.json [2021-03-05 04:50:13] INFO Updating portal button setting to false [2021-03-05 04:50:13] INFO Blog is out of maintenance mode.
Il tuo container Ghost è ora aggiornato con una nuova immagine Ghost.
Conclusione
Nella guida sopra, hai imparato come aggiornare il contenitore Docker senza tempi di inattività. Inizia ad aggiornare il tuo container Docker sull'hosting VPS da Atlantic.Net!