Configurazione delle opzioni per l'esecuzione del container


Prima di iniziare

  • Se non hai dimestichezza con i contenitori, leggi l'articolo Contenitori su Compute Engine.
  • Se non hai dimestichezza con Docker, leggi la documentazione di Docker.
  • Scopri di più sul deployment dei container su Compute Engine.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Quando crei un'istanza o un modello di istanza da utilizzare per il dispiegamento di container su VM e gruppi di istanze gestite, specifica la configurazione del container utilizzando la console Google Cloud o Google Cloud CLI.

Le sezioni seguenti descrivono come configurare le opzioni per le istanze VM, ma puoi configurare le seguenti opzioni anche quando crei un modello di istanza. Utilizza la console Google Cloud o Google Cloud CLI per configurare le opzioni per le istanze VM in un modello di istanza.

Console

  1. Vai alla pagina Crea un modello di istanza.

    Vai a Crea un modello di istanza.

  2. Nella sezione Container, seleziona la casella di controllo Esegui il deployment di un'immagine container su questa istanza VM ed espandi Opzioni container avanzate.

gcloud

  1. In Google Cloud CLI, utilizza il comando gcloud compute instance-templates create-with-container come mostrato negli esempi riportati di seguito.

Specifica di un criterio di riavvio

Puoi impostare un criterio di riavvio per specificare se riavviare un contenitore all'uscita. Il criterio predefinito è il riavvio sempre. Puoi anche impostare il criterio in modo che il servizio si riavvii in caso di errore o che non si riavvii mai.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nella sezione Criterio di riavvio, seleziona il criterio di riavvio per il contenuto.
    3. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-restart-policy per specificare il criterio di riavvio del contenitore:

  • always (valore predefinito)
  • on-failure
  • never

L'esempio seguente avvia un container con il criterio di riavvio on-failure, il che significa che il riavvio avviene solo quando il codice di uscita del container è diverso da zero:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-restart-policy on-failure

Utilizza il comando gcloud compute instances update-container con il --container-restart-policy flag per il criterio di riavvio su un contenitore in esecuzione su una VM.

Eseguire un container in modalità privilegiata

Puoi eseguire un contenitore in modalità privilegiata per consentire l'accesso a tutti i dispositivi sull'host. Per impostazione predefinita, i container vengono eseguiti come "non privilegiati" e non possono accedere a nessun dispositivo.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Seleziona Esegui con privilegi.
    3. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-privileged per eseguire un container con privilegi di runtime. L'esempio seguente avvia un container busybox in modalità con privilegi:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-privileged

Utilizza il comando gcloud compute instances update-container con il --container-privileged flag per aggiornare un contenitore su una VM. Utilizza il flag --no-container-privileged per disattivare la modalità con privilegi.

Alloca un buffer per STDIN nel runtime del container

Puoi allocare un buffer per STDIN nel runtime del contenitore per mantenere aperto lo stream STDIN in un contenitore. Se non è impostato, le letture da STDIN nel contenitore hanno sempre come risultato EOF.

Oltre a allocare uno pseudo-TTY, è necessario mantenere aperto lo stream STDIN per stabilire una shell interattiva nel contenitore e per consentire al contenitore di ricevere l'input standard da un pipe.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Seleziona Alloca un buffer per STDIN.
    3. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-stdin per allocare un buffer per STDIN nel runtime del container. L'esempio seguente avvia un container e mantiene aperto il relativo STDIN:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-stdin

Utilizza il comando gcloud compute instances update-container con il --container-stdin flag per aggiornare un contenitore su una VM. Utilizza il --no-container-stdin flag per disattivare l'allocazione di un buffer per STDIN.

Allocazione di uno pseudo-TTY

L'allocazione di uno pseudo-TTY per un contenitore è necessaria per stabilire una shell interattiva al suo interno (insieme all'allocazione di un buffer per STDIN).

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Seleziona Alloca uno pseudo-TTY.
    3. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-tty per allocare uno pseudo-TTY. L'esempio seguente avvia un container e alloca uno pseudo-TTY:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-stdin \
  --container-tty

Utilizza il comando gcloud compute instances update-container con il --container-tty flag per aggiornare un contenitore su una VM. Utilizza il --no-container-tty per non allocare uno pseudo-TTY.

Sostituzione del comando predefinito da eseguire all'avvio del container

Il ENTRYPOINT di un'immagine container specifica quale eseguibile eseguire all'avvio del container e ti consente di eseguire il container come se fosse il file binario.

Puoi eseguire l'override del comando ENTRYPOINT dell'immagine container.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nel campo Comando, inserisci un singolo comando eseguibile senza parametri, ad esempio uptime.
    3. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-command per eseguire l'override dell'immagine del contenitore ENTRYPOINT. Nell'esempio seguente, il comando uptime viene eseguito in un container occupato per visualizzare il tempo trascorso dall'ultimo avvio:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-command "uptime"

Utilizza il comando gcloud compute instances update-container con il --container-command flag per aggiornare un comando per un contenitore su una VM.

Utilizza il flag --clear-container-command con il comando update-container per cancellare il comando predefinito per il contenitore aggiornato.

Passaggio di argomenti al comando ENTRYPOINT del container

Puoi passare (aggiungere) argomenti al comando del contenitore ENTRYPOINT o sostituire il comando del contenitore predefinito CMD.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nella sezione Argomenti, fai clic su Aggiungi argomento.
    3. Inserisci un argomento del comando per ogni casella.
    4. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-arg per passare argomenti a un comando ENTRYPOINT dell'immagine container. Utilizza un flag separato per ogni argomento.

Il seguente esempio esegue il comando /bin/ash con gli argomenti -c 'ls -l' in un contenitore configurato per eseguire automaticamente busybox:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-command "/bin/ash" \
  --container-arg="-c" \
  --container-arg="ls -l"

Utilizza il comando gcloud compute instances update-container con i flag --container-arg per aggiornare gli argomenti del comando per un contenitore in esecuzione su una VM. L'aggiornamento sostituisce l'intero elenco di argomenti con il nuovo elenco.

Utilizza il flag --clear-container-args con il comando update-container per rimuovere tutti gli argomenti dalla dichiarazione del contenitore.

Configurazione delle opzioni del driver di log

Se devi configurare le opzioni del driver di log, puoi creare uno script di avvio della VM per aggiornare il file di configurazione di Docker con le opzioni di logging di cui hai bisogno. Queste opzioni si applicano a tutti i contenitori in esecuzione sulla VM e che non specificano le opzioni del driver di log.

Ad esempio, lo script di avvio seguente imposta diverse opzioni, inclusa un'opzione per limitare le dimensioni dei log del contenitore, quindi riavvia Docker sulla VM:

cat <<EOF > /etc/docker/daemon.json
{
  "live-restore": true,
  "storage-driver": "overlay2",
  "log-opts": {
    "max-size": "10m"
  }
}
EOF
systemctl restart docker

Imposta le variabili di ambiente

Puoi impostare le variabili di ambiente in un contenitore. Viene preso in considerazione solo l'ultimo valore di KEY se KEY viene ripetuto più volte.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nella sezione Variabili di ambiente, fai clic su Aggiungi variabile.
    3. Aggiungi o rimuovi le variabili di ambiente in base alle esigenze, una per riga.
    4. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-env per impostare le variabili di ambiente in un contenitore. L'esempio seguente imposta tre variabili di ambiente: HOME, MODE e OWNER:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-env HOME=/home,MODE=test,OWNER=admin

Utilizza il flag --container-env-file per impostare le variabili di ambiente da un file locale. L'esempio seguente imposta le due variabili di ambiente dal file env.txt:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-env-file ./env.txt

I contenuti del file env.txt sono:

# this is a comment
HOME=/home
MODE=test
OWNER=admin

Utilizza il comando gcloud compute instances update-container con il flag --container-env o --container-env-file per aggiornare le variabili di ambiente per un container su una VM. In questo modo vengono aggiornate tutte le variabili presenti nella dichiarazione del contenitore dell'istanza VM. Vengono aggiunte le variabili che non sono nella dichiarazione del contenitore.

Utilizza il flag --remove-container-env per rimuovere le variabili di ambiente quando aggiorni un container su una VM. L'esempio seguente rimuove le variabili di ambiente chiamate MODE e OWNER:

gcloud compute instances update-container busybox-vm \
  --remove-container-env MODE,OWNER

Se una variabile di ambiente specificata non esiste, viene ignorata.

Montaggio di una directory host come volume di dati

Puoi montare una directory da una VM host in un contenitore.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nella sezione Montaggi dei volumi, fai clic su Aggiungi volume.
    3. Nell'elenco Tipo di volume, seleziona Directory e segui questi passaggi:

      • Nel campo Percorso di montaggio, specifica un percorso di montaggio nella struttura di directory di un contenitore in cui montare una directory host.
      • Nel campo Percorso host, specifica un percorso host per la directory dell'host da montare.
      • Nell'elenco Modalità, specifica se montare la directory in modalità di lettura/scrittura o di sola lettura.
    4. Per confermare i dettagli del contenitore, fai clic su Seleziona.

  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-mount-host-path per montare una directory della VM host in un contenitore. Il seguente esempio monta la directory host /tmp nel contenitore in /logs in modalità di lettura/scrittura:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

Specifica mode=ro per montare una directory host in modalità di sola lettura.

Utilizza il comando gcloud compute instances update-container con il --container-mount-host-path flag per aggiornare i mount delle directory dell'host su un contenutore. Utilizza il flag --remove-container-mounts per rimuovere i montaggi dei volumi con i percorsi di montaggio specificati. Nell'esempio riportato di seguito viene rimosso un montaggio del percorso dell'host con mount-path=/logs:

gcloud compute instances update-container busybox-vm \
  --remove-container-mounts /logs

Se il percorso di montaggio specificato non esiste, viene ignorato in silenzio.

Montaggio del file system tmpfs come volume di dati

Puoi montare un file system tmpfs vuoto in un contenitore.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nella sezione Montaggi dei volumi, fai clic su Aggiungi volume.
    3. Nell'elenco Tipo di volume, seleziona TmpFS.
    4. Nel campo Percorso di montaggio, specifica un percorso di montaggio nella struttura di directory di un contenitore in cui vuoi montare un volume TmpFS.
    5. Nell'elenco Modalità, specifica se montare il volume TmpFS in modalità di lettura/scrittura o di sola lettura.
    6. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il flag --container-mount-tmpfs per montare un file system tmpfs vuoto in un contenitore. Il seguente esempio monta un file system tmpfs nel contenuto in /cache in modalità di lettura/scrittura:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-mount-tmpfs mount-path=/cache
 

Utilizza il comando gcloud compute instances update-container con il --container-mount-tmpfs flag per aggiornare i mount tmpfs su un contenitore. Utilizza il flag --remove-container-mounts per rimuovere un montaggio tmpfs con il percorso di montaggio specificato durante l'aggiornamento. L'esempio seguente rimuove il mount tmpfs con mount-path=/cache:

gcloud compute instances update-container busybox-vm \
  --remove-container-mounts /cache

Se il percorso di montaggio specificato non esiste, viene ignorato in silenzio.

Montaggio di un disco permanente come volume di dati

Con Container-Optimized OS 69 o versioni successive, puoi montare i dischi permanenti da una VM host in un contenitore.

Prerequisiti

  • Il disco deve avere un file system ext4 o non avere alcun file system. Se non è presente un file system iniziale, l'agente di avvio del contenitore formatta il disco in ext4 e sono supportati solo il montaggio e il collegamento in lettura/scrittura.
  • Il disco deve essere collegato alla VM.
  • Sono supportati sia i dispositivi senza partizioni sia le partizioni. Per i mount delle partizioni, il disco non può essere vuoto, ma deve contenere una tabella delle partizioni esistente.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.

  3. Nella pagina Configura contenitore, segui questi passaggi:

    1. Specifica un nome per l'immagine container.
    2. Nella sezione Montaggi dei volumi, fai clic su Aggiungi volume.
    3. Nell'elenco Tipo di volume, seleziona Disco.
    4. Nel campo Percorso di montaggio, specifica un percorso nella struttura di directory del contenitore in cui vuoi montare il disco permanente.
    5. Dall'elenco Nome disco, seleziona un disco esistente da montare.
    6. Nel campo Partizione, specifica il numero della partizione da montare se il disco ha una tabella delle partizioni. Se il disco non ha partizioni, lascia vuoto questo campo.
    7. Nell'elenco Modalità, specifica se montare la directory in modalità di lettura/scrittura o di sola lettura.
    8. Per confermare i dettagli del contenitore, fai clic su Seleziona.
  4. Continua con la procedura di creazione della VM.

gcloud

Utilizza il comando gcloud compute instances create-with-container o il comando gcloud compute instances update-container con il flag --container-mount-disk per montare un disco permanente in un contenitore.

L'esempio seguente monta due dischi, my-data-disk e my-scratch-disk, nel contenitore nei percorsi di montaggio /disks/data-disk e /disks/scratch-disk.

gcloud compute instances create-with-container busybox-vm \
  --disk name=my-data-disk \
  --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \
  --container-image docker.io/busybox:1.27 \
  --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \
  --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk

Tieni presente che il flag --disk allega my-data-disk, il flag --create-disk crea e allega my-scatch-disk e il flag --container-mount-disk monta i dischi collegati al contenitore. Poiché non è specificato un mode per my-scratch-disk, il disco viene montato sul contenitore in modalità di lettura/scrittura per impostazione predefinita.

Utilizza il comando gcloud compute instances update-container con il --container-mount-disk flag per montare altri dischi collegati o per modificare i mount dei dischi esistenti.

Utilizza il flag --remove-container-mounts per rimuovere il montaggio di un volume del disco con il percorso di montaggio specificato. L'esempio seguente modifica la modalità di montaggio di my-data-disk in lettura/scrittura e rimuove il montaggio del disco con mount-path="/disks/scratch-disk".

gcloud compute instances update-container busybox-vm \
  --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \
  --remove-container-mounts "/disks/scratch-disk"

Se il percorso di montaggio specificato per il flag --remove-container-mounts non esiste, viene ignorato in silenzio.

Pubblicazione delle porte del contenitore

Le VM con container utilizzano la modalità di rete dell'host, dove un container condivide lo stack di rete dell'host e tutte le interfacce dell' host sono disponibili per il container.

Le porte dei container hanno una mappatura uno a uno alle porte della VM host. Ad esempio, la porta 80 di un container viene mappata alla porta 80 della VM host. Compute Engine non supporta il flag di pubblicazione della porta (-p) e non è necessario specificarlo affinché la mappatura funzioni.

Per pubblicare le porte di un contenitore, configura le regole di firewall per consentire l'accesso alle porte dell'istanza VM host. Le porte corrispondenti del contenutore sono accessibili automaticamente, in base alle regole del firewall.

Esempio: pubblicazione della porta 80 per un contenitore NGINX

L'esempio seguente mostra come creare un'istanza VM con un contenitore NGINX e consentire il traffico alla porta 80 del contenitore.

  1. Crea un'istanza VM con un contenitore NGINX:

    gcloud compute instances create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:1.15 \
     --tags http-server
    

    Il container condivide lo stack di rete della VM host e la porta 80 del container viene pubblicata sulla porta 80 della VM host. Il tag http-server viene utilizzato come tag target per la regola firewall creata nel passaggio successivo.

  2. Crea una regola firewall per consentire le connessioni alla porta 80 dell'istanza VM. La seguente regola firewall consente le connessioni HTTP alle istanze VM con il tag http-server.

    gcloud compute firewall-rules create allow-http \
     --allow tcp:80 --target-tags http-server
    

    Il contenitore inizia automaticamente a ricevere traffico sulla porta 80. Non è necessario eseguire alcuna configurazione aggiuntiva.

    Puoi creare regole firewall per combinazioni di protocollo:porta della VM host dove il protocollo è tcp o udp. Queste regole regolano in modo efficace l'accesso dall'esterno della VM alle porte del contenitore corrispondenti.

Passaggi successivi