Prima di iniziare
- Se non hai dimestichezza con i container, leggi Container 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 è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.
Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:
Console
Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.
gcloud
-
Installa Google Cloud CLI, quindi initialize eseguendo questo comando:
gcloud init
- Imposta una regione e una zona predefinite.
-
Quando crei un'istanza o un modello di istanza da utilizzare per il deployment dei container su VM e gruppi di istanze gestite, specifica la configurazione del container utilizzando la console Google Cloud o Google Cloud CLI.
Le seguenti sezioni descrivono come configurare le opzioni per le istanze VM, ma puoi configurare le opzioni seguenti 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
Vai alla pagina Crea un modello di istanza.
Nella sezione Container, seleziona la casella di controllo Esegui il deployment di un'immagine container in questa istanza VM ed espandi Opzioni container avanzate.
gcloud
- In Google Cloud CLI, utilizza il comando
gcloud compute instance-templates create-with-container
come mostrato negli esempi seguenti.
Specificare un criterio di riavvio
Puoi impostare un criterio di riavvio per specificare se riavviare un container all'uscita. Il criterio predefinito prevede il riavvio sempre. Puoi anche impostare il criterio in modo che si riavvii in caso di errore o non si riavvii mai.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nella sezione Criterio di riavvio, seleziona il criterio di riavvio per il container.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Usa il flag --container-restart-policy
per specificare un criterio di riavvio per il container:
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 flag --container-restart-policy
per il criterio di riavvio su un container in esecuzione su una VM.
Esecuzione di un container in modalità con privilegi
Puoi eseguire un container in modalità privilegiata per consentire l'accesso a tutti i dispositivi sull'host. I container vengono eseguiti come "senza privilegi" per impostazione predefinita e non è consentito accedere a nessun dispositivo.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Seleziona Esegui con privilegi.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Usa il flag --container-privileged
per eseguire un container con privilegio di runtime. L'esempio seguente avvia un container occupato 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 flag --container-privileged
per aggiornare un container su una VM. Utilizza il flag --no-container-privileged
per disattivare la modalità con privilegi.
Allocazione di un buffer per STDIN nel runtime del container
Puoi allocare un buffer per STDIN
nel runtime del container per mantenere lo stream STDIN
aperto in un container. Se non è impostato, le letture da STDIN
nel container generano sempre EOF
.
Oltre all'allocazione di uno pseudo-TTY, è necessario tenere aperto il flusso STDIN
per stabilire una shell interattiva nel container e affinché il container riceva il suo input standard da una barra verticale.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Seleziona Assegna un buffer per STDIN.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo 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
mantenendo 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 flag --container-stdin
per aggiornare un container su una VM. Utilizza il flag --no-container-stdin
per disattivare l'allocazione di un buffer per STDIN
.
Allocazione di uno pseudo-TTY
L'allocazione di uno pseudo-TTY per un container è necessaria per stabilire una shell interattiva nel container (oltre all'allocazione di un buffer per STDIN).
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Seleziona Assegna uno pseudo-TTY.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Usa 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 flag --container-tty
per aggiornare un container su una VM. Utilizza il flag --no-container-tty
per non allocare uno pseudo-TTY.
Override del comando predefinito da eseguire all'avvio del container
L'elemento ENTRYPOINT
di un'immagine container specifica quale eseguibile all'avvio del container
e ti consente di eseguirlo come se fosse il programma binario.
Puoi eseguire l'override del comando ENTRYPOINT
dell'immagine container.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nel campo Comando, inserisci un singolo comando eseguibile senza parametri, ad esempio
uptime
. - Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Utilizza il flag --container-command
per eseguire l'override dell'immagine container ENTRYPOINT
. L'esempio seguente esegue il comando uptime
in un container occupato per visualizzare l'ora 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 flag --container-command
per aggiornare un comando per un container su una VM.
Usa il flag --clear-container-command
con il comando update-container
per cancellare il comando predefinito per il container aggiornato.
Passaggio degli argomenti al comando ENTRYPOINT del container
Puoi passare (aggiungere) argomenti al comando del container
ENTRYPOINT
o sostituire il comando del container predefinito
CMD
.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nella sezione Argomenti, fai clic su Aggiungi argomento.
- Inserisci un argomento del comando per ogni casella.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo 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.
L'esempio seguente esegue il comando /bin/ash
con gli argomenti -c 'ls -l'
in un container configurato per l'esecuzione automatica di emptybox:
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 container 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 container.
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 Docker con le opzioni di logging necessarie. Queste opzioni si applicano a tutti i container in esecuzione sulla VM e che non specificano opzioni del driver di log.
Ad esempio, il seguente script di avvio imposta diverse opzioni, tra cui un'opzione per limitare le dimensioni del log del container, 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. Quando KEY
viene ripetuto più di una volta, viene utilizzato solo l'ultimo valore di KEY
.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nella sezione Variabili di ambiente, fai clic su Aggiungi variabile.
- Aggiungi o rimuovi le variabili di ambiente in base alle esigenze, una per ogni riga.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Utilizza il flag --container-env
per impostare le variabili di ambiente in un container.
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. Nell'esempio seguente vengono impostate 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. Questa operazione aggiorna tutte le variabili presenti
nella dichiarazione del container dell'istanza VM. Vengono aggiunte le variabili che non sono presenti
nella dichiarazione del container.
Usa 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 non esiste una variabile di ambiente specificata, viene ignorata automaticamente.
Montaggio di una directory host come volume dati
Puoi montare una directory da una VM host in un container.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nella sezione Montaggi volume, fai clic su Aggiungi volume.
Nell'elenco Tipo di volume, seleziona Directory e procedi nel seguente modo:
- Nel campo Percorso di montaggio, specifica un percorso di montaggio in una struttura di directory del container in cui montare una directory host.
- Nel campo Percorso host, specifica un percorso host alla directory host da montare.
- Nell'elenco Modalità, specifica se montare la directory in modalità di lettura/scrittura o di sola lettura.
Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Usa il flag --container-mount-host-path
per montare la directory di una VM host in un container. Nell'esempio seguente, la directory host /tmp
viene montata nel container 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 flag --container-mount-host-path
per aggiornare i montaggi delle directory host in un container. Utilizza il flag --remove-container-mounts
per rimuovere i montaggi dei volumi
con i percorsi di montaggio specificati. L'esempio seguente rimuove un montaggio del percorso 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 automaticamente.
Montaggio del file system tmpfs come volume di dati
Puoi montare un file system tmpfs vuoto in un container.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nella sezione Montaggi volume, fai clic su Aggiungi volume.
- Dall'elenco Tipo di volume, seleziona TmpFS.
- Nel campo Percorso di montaggio, specifica un percorso di montaggio in una struttura di directory del container in cui vuoi montare un volume TmpFS.
- Nell'elenco Modalità, specifica se montare il volume TmpFS in modalità di lettura/scrittura o di sola lettura.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Usa il flag --container-mount-tmpfs
per montare un file system tmpfs
vuoto in un container. Nell'esempio seguente viene montato un file system tmpfs
nel container 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 flag --container-mount-tmpfs
per aggiornare i montaggi tmpfs
in un container.
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 montaggio 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 automaticamente.
Montaggio di un disco permanente come volume di dati
Con Container-Optimized OS 69 o versioni successive, puoi montare dischi permanenti da una VM host in un container.
Prerequisiti
- Il disco deve avere un file system
ext4
o non avere un file system. In assenza di un file system iniziale, l'agente di avvio del container formatta il disco inext4
e sono supportati solo gli allegati in lettura/scrittura e il montaggio. - Il disco deve essere collegato alla VM.
Sono supportati sia dispositivi senza partizioni che partizioni. Per il montaggio delle partizioni, il disco non può essere vuoto. Deve contenere una tabella delle partizioni esistente.
Console
Vai alla pagina Crea un'istanza.
Nella sezione Contenitore, fai clic su Esegui il deployment del container.
Nella pagina Configura contenitore, procedi nel seguente modo:
- Specifica un nome per l'immagine container.
- Nella sezione Montaggi volume, fai clic su Aggiungi volume.
- Dall'elenco Tipo di volume, seleziona Disco.
- Nel campo Percorso di montaggio, specifica un percorso nella struttura di directory del container in cui vuoi montare il disco permanente.
- Dall'elenco Nome disco, seleziona un disco esistente da montare.
- Nel campo Partition, specifica il numero di partizione da montare se il disco ha una tabella delle partizioni. Se il disco non ha partizioni, lascia vuoto questo campo.
- Nell'elenco Modalità, specifica se montare la directory in modalità di lettura/scrittura o di sola lettura.
- Per confermare i dettagli del contenitore, fai clic su Seleziona.
Continua con il processo di creazione della VM.
gcloud
Utilizza il comando gcloud compute instances create-with-container
o gcloud compute instances update-container
con il flag --container-mount-disk
per montare un disco permanente in un container.
Nell'esempio seguente vengono montati due dischi, my-data-disk
e my-scratch-disk
, nel container 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
collega my-data-disk
, il flag --create-disk
crea e collega my-scatch-disk
, mentre il flag --container-mount-disk
monta i dischi collegati nel container. Poiché mode
non è specificato per my-scratch-disk
, per impostazione predefinita questo disco viene montato nel container in modalità di lettura/scrittura.
Utilizza il comando gcloud compute instances update-container
con il flag --container-mount-disk
per montare dischi collegati aggiuntivi o per modificare i montaggi dei dischi esistenti.
Utilizza il flag --remove-container-mounts
per rimuovere un montaggio del volume del disco con il percorso di montaggio specificato. L'esempio seguente cambia 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 passato per il flag --remove-container-mounts
non esiste, viene ignorato automaticamente.
Pubblicazione delle porte del container in corso...
Le VM con container utilizzano la modalità di rete host, in cui 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 one-to-one alle porte delle VM host. Ad esempio, la porta 80 del container viene mappata alla porta 80 della VM host. Compute Engine non supporta il flag di Port Publishing (-p
) e non è necessario specificarlo affinché il mapping funzioni.
Per pubblicare le porte di un container, configura le regole firewall per abilitare l'accesso alle porte dell'istanza VM host. Le porte corrispondenti del container sono accessibili automaticamente in base alle regole del firewall.
Esempio: pubblicazione della porta 80 per un container NGINX
L'esempio seguente mostra come creare un'istanza VM con un container NGINX e consentire il traffico verso la porta 80 del container.
Crea un'istanza VM con un container 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 di destinazione per la regola firewall, creata nel passaggio successivo.Crea una regola firewall per abilitare 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 container inizia automaticamente a ricevere traffico sulla porta 80. Non è necessario eseguire alcuna configurazione aggiuntiva.
Puoi creare regole firewall per le combinazioni protocollo/porta della VM host in cui il protocollo è
tcp
oudp
. Queste regole regolano in modo efficace l'accesso dall'esterno della VM alle porte dei container corrispondenti.
Passaggi successivi
- Scopri come eseguire il deployment dei container Docker su Compute Engine.
- Scopri di più su Container-Optimized OS.