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

Come aggiornare automaticamente i contenitori Docker durante l'aggiornamento di app Web Dockerizzate

Immagina questo scenario. Ospiti alcuni servizi Web in esecuzione in contenitori Docker. Quando il servizio Web ha una nuova versione, prendi l'immagine Docker e aggiorni i contenitori per aggiornare il servizio.

In precedenza ho discusso dell'aggiornamento dei contenitori Docker senza tempi di inattività, ma questo articolo non riguarda l'aggiornamento delle app Web. Questo riguarda l'aggiornamento dei contenitori del sistema operativo stessi.

L'aggiornamento manuale del sistema operativo in esecuzione nel container può essere un compito arduo di tanto in tanto. È necessario eseguire separatamente i comandi di aggiornamento pertinenti su un container in esecuzione affinché ciò avvenga.

Che ne dici di eliminare questo passaggio aggiuntivo e combinare l'aggiornamento del sistema operativo con l'aggiornamento del servizio?

Questo è un trucco di automazione che utilizzo quando aggiorno un servizio Web distribuito con Docker Compose.

Useremo Ghost CMS come esempio del mondo reale basato su questa distribuzione.

DigitalOcean – Il cloud per sviluppatori Aiuta milioni di sviluppatori a creare, testare, gestire e ridimensionare facilmente applicazioni di qualsiasi dimensione, più velocemente che mai.DigitalOcean logoRoxana Ciobanu, CTO

Aggiornamento automatico dei container OS durante l'aggiornamento del servizio web

Puoi semplicemente leggere questo articolo per capire cosa sto facendo. Ma se vuoi seguirlo, puoi farlo anche tu.

Mostrerò due diversi esempi:

  1. Per i contenitori Docker basati su Debian
  2. Per container Docker con base alpina

Aggiornamento automatico dei contenitori Debian

La procedura richiede che tu ti occupi di due passaggi:

Passaggio 1:prendi nota delle istruzioni CMD

Prendere nota dell'istruzione CMD specificata infine all'interno del Dockerfile di WebApp.

Per fare ciò è necessario controllare il Dockerfile con cui è stata creata l'immagine (Ghost per questo esempio):

Pertanto, il comando effettivo qui è node current/index.js .

Passaggio 2:aggiungi l'impostazione "Aggiornamento automatico"

Aggiungi i comandi di aggiornamento e la nota istruzione CMD all'interno della sezione del servizio Ghost del file Docker Compose:

command: sh -c "apt update && apt -y upgrade && node current/index.js"

Vediamo come sarebbe finalmente. Supponiamo, ad esempio, di considerare le voci Docker Compose per il servizio Ghost dalla guida sopra citata. Una versione aggiornata basata sul nostro tutorial sarebbe:

    ghost:
      image: ghost:4.20.4
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apt update && apt -y upgrade && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Qui, ho specificato il comando subito dopo i volumes sezione.

Aggiornamento automatico dei container alpini

Questa procedura richiede ancora una volta che tu ti occupi di due passaggi simili:

Passaggio 1:prendi nota delle istruzioni CMD

Prendere nota dell'istruzione CMD specificata infine all'interno del Dockerfile di WebApp.

Per fare ciò è necessario controllare il Dockerfile (Ghost Alpine per questo esempio):

Apparentemente, il comando qui è lo stesso visto per la versione Debian precedente:node current/index.js .

Passaggio 2:aggiungi l'impostazione "Aggiornamento automatico"

Aggiungi i comandi di aggiornamento e la nota istruzione CMD all'interno della sezione del servizio Ghost del file Docker Compose:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

Riferimento per l'aggiornamento alpino.

Vediamo come sarebbe finalmente (nota che questa volta userò l'immagine alpine per Ghost). Supponiamo, ad esempio, di considerare le voci Docker Compose per il servizio Ghost dalla guida sopra citata. Una versione aggiornata basata sul nostro tutorial sarebbe:

    ghost:
      image: ghost:4.20.4-alpine
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Questo è tutto allora. Da questo momento in poi, ogni volta che aggiorni le tue app Web senza tempi di inattività, i comandi di aggiornamento del contenitore verranno automaticamente richiamati e quindi le tue app Web verranno eseguite.

Nota:quando si aggiorna un'app modificando il numero di versione dell'immagine nel file di composizione della finestra mobile, è necessario disabilitare temporaneamente l'opzione di comando discussa qui con un hashtag. Al termine dell'aggiornamento per l'app Web, riattivare la stessa riga per aggiornare il contenitore stesso. Entrambi questi passaggi (aggiornamento dell'app e del contenitore) sono realizzabili senza tempi di inattività grazie al ridimensionamento.

Suggerimenti bonus

Ecco un elenco di comandi per altre app popolari come Nextcloud e Rocket.Chat. Ricorda, questi devono essere aggiunti proprio come hai visto per l'esempio Ghost.

Nextcloud

Per Debian:

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

Per l'alpino:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"

Rocket.Chat

command: sh -c "apt update && apt -y upgrade && node main.js"

Spero che questo articolo ti aiuti nelle tue attività quotidiane di amministratore di sistema. Se hai domande, feedback o suggerimenti, lascia i tuoi pensieri nella sezione commenti qui sotto.


Docker
  1. Come aggiornare automaticamente i contenitori Docker in esecuzione

  2. Come esportare e importare contenitori Docker

  3. Come usare Docker Compose

  4. Come collegare i contenitori Docker

  5. Come mantenere in funzione i contenitori Docker quando il demone si ferma

Come ridurre le dimensioni dell'immagine Docker nei contenitori Docker

Come eseguire i contenitori Docker

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come rinominare o rinominare i contenitori Docker

Come configurare gli spazi dei nomi di rete nei contenitori Docker