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

Migliora il tuo gioco DevOps con questi esempi di esecuzione Docker

La docker run command è uno dei primi comandi che dovresti imparare dopo aver installato Docker. Ma ti sei chiesto in quale altro modo puoi usare docker run comandi per distribuire e gestire le tue applicazioni in modo efficace? Esame di un esempio di esecuzione Docker (docker run) sarebbe bello. Ma indovina un po', otterrai di più su questo tutorial!

In questo articolo imparerai come potenziare il tuo gioco DevOps con alcuni esempi di esecuzione Docker che puoi utilizzare per migliorare il tuo flusso di lavoro.

Continua a leggere e non perderti mai più quando esegui di nuovo i comandi Docker!

Prerequisiti

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

  • Una macchina Linux – Questa demo utilizza Ubuntu 20.04, ma qualsiasi distribuzione Linux funzionerà. Ecco come installare Ubuntu.
  • Docker installato sulla macchina.
  • Un account utente con privilegi root/sudo.

Esempio di esecuzione Docker n. 1:esecuzione interattiva di un container

Potresti eseguire container da un po' di tempo ormai, ma sapevi che ci sono alcune situazioni preferibili per eseguire un container Docker in modalità interattiva?

Docker ti consente di eseguire i contenitori in modalità interattiva quando:

  • Stai risolvendo un problema e devi vedere l'output dei comandi eseguiti all'interno del contenitore.
  • Stai sperimentando un nuovo comando Docker e desideri vedere i risultati del comando in tempo reale.
  • Stai eseguendo un processo nel contenitore che richiede l'input manuale da parte tua.

Quando si esegue un esempio di esecuzione Docker ( docker run ) senza opzioni, il comportamento predefinito prevede l'esecuzione del contenitore in modalità interattiva. Quando esegui un container in modalità interattiva, puoi vedere l'output dei comandi che esegui nel container sul tuo terminale mentre vengono eseguiti.

1. Esegui il comando seguente per eseguire un contenitore (my_nginx ) in modalità interattiva e pubblicare (-p ) porta 80 del container al porto 8080 della tua macchina host. Puoi cambiare il nome del contenitore come preferisci.

Il comando usa nginx immagine dall'hub Docker per creare il contenitore e rimuove automaticamente (--rm ) il contenitore quando il contenitore è fermo.

docker container run --rm --name my_nginx -p 8080:80 nginx

Dato che stai utilizzando un utente non root con privilegi sudo , non è necessario anteporre sudo durante l'esecuzione dei comandi Docker

Vedrai l'output del registro del server web nginx direttamente nel tuo terminale, come mostrato di seguito.

L'esecuzione di un contenitore interattivo fornisce molte informazioni, ma forse preferisci filtrare solo le informazioni di cui hai bisogno. In tal caso, aggiungi il flag -a e specifica un flusso standard (-a) per il contenitore, come mostrato di seguito.

La specifica di uno stream standard indica a Docker di visualizzare solo l'output stdout del contenitore my_nginx.

docker container run -a stdout --rm --name my_nginx -p 8080:80 nginx

Per impostazione predefinita, se non si fornisce il flag -a, stdin, stdout e stderr sono tutti collegati al terminale. Il flag -a accetta i seguenti argomenti e aiuta a declutter l'output per vedere solo le informazioni rilevanti:

  • -a stdin – allega stdin al container, inviando tutti gli input sul tuo terminale al container.
  • -a stdout – allega stdout al container, visualizzando tutto l'output generato dal container sul tuo terminale.
  • -a stderr – allega stderr al container, visualizzando sul proprio terminale tutti i messaggi di errore generati dal container.

Puoi vedere di seguito che ora l'output è meno disordinato.

2. Quindi, apri un altro terminale ed esegui docker ps comando per visualizzare l'elenco dei contenitori in esecuzione sul computer host.

docker ps

Di seguito, puoi vedere il tuo contenitore my_nginx elencato nell'output.

3. Infine, esegui curl comando seguente per testare il server web nginx.

curl http://localhost:8080

Di seguito puoi vedere che l'output del registro del server web nginx viene visualizzato nel tuo terminale (a sinistra) non appena viene generato l'output.

Esempio di esecuzione Docker n. 2:Esecuzione del contenitore in modalità scollegata

Hai appena imparato a eseguire i tuoi contenitori in modalità interattiva e vedere l'output nel tuo terminale mentre vengono eseguiti. Ma se non stai cercando gli output del container nel tuo terminale, puoi eseguire il container in modalità separata.

In modalità separata, il contenitore viene eseguito in background e non vedi l'output dei comandi che esegui nel contenitore nel tuo terminale.

Esegui il comando seguente per eseguire un contenitore (my_nginx ) in modalità separata (-d ).

docker container run --rm --name my_nginx -d -p 8080:80 nginx

Una volta che il container è in esecuzione in modalità separata, Docker reindirizza l'output ai log del container. A questo punto, il contenitore my_nginx è in esecuzione negli output dei comandi in background, come mostrato di seguito.

Puoi anche vedere l'ID contenitore univoco nell'output. Puoi utilizzare questo ID per allegare il contenitore o avviare/arrestare/rimuovere il contenitore.

Ora esegui il docker ps comando per visualizzare l'elenco dei contenitori in esecuzione sul computer host.

Dato che il container (my_nginx) è in esecuzione in background, puoi eseguire qualsiasi comando senza aprire un nuovo terminale.

docker ps

Vedrai il seguente output, che mostra che my_nginx il container è ora in esecuzione in modalità scollegata.

Se per qualche motivo, i tuoi server web NGINX non funzionano correttamente mentre il tuo container è in esecuzione in modalità separata, dovrai collegare il tuo terminale al container in esecuzione. Puoi collegarti a un container in esecuzione eseguendo docker attach comando seguito dall'ID o dal nome del contenitore (my_nginx ), come mostrato di seguito.

docker container attach my_nginx

Come puoi vedere di seguito, ti sei collegato con successo a my_nginx contenitore. Ora puoi scoprire la causa principale del problema e risolverlo.

Creazione di una rete bridge

Uno dei vantaggi dell'utilizzo di Docker è che gestisce la rete dei tuoi container per te. Con Docker, non devi preoccuparti di configurare la tua rete. Docker configura automaticamente la rete per te. Inclusa la creazione di reti, la connessione di container alle reti e la gestione di indirizzi IP.

Guarda come Docker configura la rete per i tuoi container e crea una rete bridge.

1. Esegui la docker comando seguente per eseguire un contenitore Ubuntu con accesso completo alle risorse di rete sulla macchina host (--net=host ), utile per il debug.

Le opzioni -ti dicono a Docker di mantenere il contenitore in modalità interattiva. Devi specificare questa opzione quando lavori con la shell Bash. L'esecuzione di questo comando come nella sezione "Esecuzione interattiva di un contenitore" non funziona.

docker run -ti --rm --net=host ubuntu bash

2. Quindi, esegui apt update comando nel contenitore per aggiornare l'elenco dei pacchetti.

apt update -y

3. Esegui il comando seguente per install il bridge-utils pacchetto. Questo pacchetto è necessario per creare e gestire i dispositivi bridge.

apt install bridge-utils

4. Ora, esegui il seguente brctl show comando per elencare le reti bridge sul tuo sistema.

brctl show

Vedrai un elenco di reti bridge simile al seguente output. Si noti che esiste un dispositivo bridge denominato docker0. Questa rete è la rete virtuale utilizzata da Docker per creare reti virtuali per i tuoi container se non specifichi una rete virtuale bridge personalizzata.

5. Apri un altro terminale ed esegui la docker network comando seguente per creare una nuova rete. Puoi nominare la rete in modo diverso, ma in questo tutorial la rete si chiama my-ata-network .

docker network create my-ata-network

Vedrai un ID di rete univoco restituito, come mostrato di seguito. Annota l'ID di rete poiché lo abbinerai al nuovo ID di rete bridge in seguito (passaggio sei).

6. Torna al tuo terminale contenitore Ubuntu ed esegui il comando seguente per elencare la rete bridge (show ) di nuovo sul tuo sistema.

brctl show

Come mostrato di seguito, vedrai una nuova rete bridge elencata nell'output denominata br-d9ba7f94ac73. Puoi vedere che la parte d9ba7f94ac73 corrisponde all'ID di rete restituito nel passaggio cinque.

Questo output conferma che Docker ha creato una nuova rete bridge denominata my-ata-network e ha aggiunto il contenitore Ubuntu a quella rete bridge.

Esempio di esecuzione Docker n. 3:esecuzione di un container con Port Forwarding

Docker utilizza le funzionalità firewall integrate del kernel Linux, ovvero iptables comando, per creare regole del firewall. Queste regole del firewall controllano quando i pacchetti vengono inviati tra i bridge e diventano quindi disponibili per i container collegati a tali bridge.

Dai un'occhiata a come Docker esegue il port forwarding sotto il cofano con iptables .

1. Esegui il comando seguente per avviare un contenitore Ubuntu privilegiato (--privileged=true ) con accesso completo a tutte le risorse di rete sull'host, incluso il port forwarding.

docker run -ti --rm --net=host --privileged=true ubuntu bash

2. Quindi, esegui il comando seguente per update l'elenco dei pacchetti e install iptables .

apt update && apt install iptables

3. Esegui iptables comando di seguito sul contenitore Ubuntu privilegiato da elencare (-L ) il nat regola della tavola.

iptables -n -L -t nat

Quello che puoi vedere di seguito sono solo le regole predefinite fornite con Ubuntu.

4. Ora, esegui il comando seguente e esegui un Ubuntu container con port forwarding al tuo host sulla porta 8080 .

docker run -ti --rm -p 8080:8080 ubuntu bash

5. Infine, riesegui iptables comando qui sotto per elencare il nat regola della tavola.

iptables -n -L -t nat

Si noti di seguito che viene aggiunta una nuova regola che inoltra tutti i pacchetti dalla porta dell'host (8080) alla porta del contenitore (8080). Puoi vedere che l'esposizione delle porte in Docker è semplicemente il port forwarding a livello di rete.

Creazione di una rete definita dall'utente

Il tuo esame Docker DCA potrebbe chiederti di creare reti bridge per gli sviluppatori. Come? Utilizzando la docker network comando, è possibile creare una rete bridge (una rete virtuale definita dall'utente). La docker network fornisce un modo per la comunicazione di container su reti diverse.

1. Esegui la docker network comando seguente per creare una nuova rete bridge denominata ata-app-net utilizzando il bridge autista.

docker network create --driver bridge ata-app-net

2. Quindi, esegui il seguente comando per elencare (ls ) le reti bridge sul tuo host.

docker network ls

Si noti di seguito che è stata creata una nuova rete bridge definita dall'utente denominata ata-app-net.

3. Esegui il comando seguente per visualizzare (inspect ) i dettagli di ata-app-net rete di ponti.

docker network inspect ata-app-net

Di seguito, si noti che la rete bridge ata-app-net ha una singola sottorete (172.21.0.0/16). Questa sottorete viene assegnata automaticamente quando si crea una rete bridge. Puoi anche vedere il driver (bridge) associato alla rete bridge.

4. Ora, esegui questo esempio di esecuzione Docker ( docker run ) comando di seguito per eseguire un paio di container alpine sulle reti bridge definite dall'utente per provare a eseguire il ping l'un l'altro.

docker run -dit --name ata-app1 --network ata-app-net alpine ash

5. Esegui docker ps comando per elencare i contenitori in esecuzione.

docker ps

Come puoi vedere di seguito, entrambi i contenitori sono ora in esecuzione.

6. Eseguire nuovamente il comando di rete Docker di seguito per inspect il tuo ata-app-net rete ponte.

docker network inspect ata-app-net

Di seguito puoi vedere che i tuoi due container sono ora collegati alla rete bridge ata-app-net insieme ai loro indirizzi IP e nomi.

7. Ora esegui il docker container attach di seguito per connetterti al tuo ata-app1 contenitore.

docker container attach ata-app1

8. Eseguire il ping su ata-app2 per verificare che i contenitori possano comunicare tra loro.

ping ata-app2

9. Quindi, esegui il ping di google.com per verificare che ata-app1 può comunicare con Internet.

ping google.com

10. Infine, ripeti i passaggi da sette a nove per connetterti a ata-app2 e ping ata-app1 .

Assicurati di premere CTRL + PQ per scollegarti dal contenitore ata-app1 e mantenerlo in esecuzione. Oppure, il contenitore si fermerà e quando esegui il ping di ata-app1 da ata-app2, il comando ping fallirà.

docker container attach ata-app2
ping ata-app1
ping google.com

Di seguito, puoi vedere tutti i pacchetti vengono trasmessi e ricevuti, il che conferma che entrambi i contenitori possono comunicare tra loro e Internet.

Conclusione

In questo tutorial, hai imparato molti esempi di esecuzione Docker ( docker run ) puoi utilizzare per semplificare la distribuzione e la gestione delle tue applicazioni. Ora puoi utilizzare Docker in modo più efficace comprendendo come docker run se come Docker imposta la rete per i tuoi container.

A questo punto, sai già come sfruttare l'esempio di esecuzione Docker ( docker run ) comandi per potenziare il tuo gioco DevOps.

Con questa conoscenza, perché non distribuire le tue applicazioni in modo più efficiente e scalabile?


Docker
  1. Installa ModSecurity con Apache in un Docker Container

  2. Come eseguire Nginx in un contenitore Docker:una guida passo passo

  3. Come distribuire un container nginx con Docker su Linode

  4. Come eseguire MySQL in un contenitore Docker

  5. Creazione del primo contenitore di Windows Server Docker

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Introduzione all'esercitazione Docker di Azure

Come copiare file con Docker cp nel tuo Docker Container

Come eseguire i contenitori Docker

Esegui Docker Container in background (modalità separata)