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

Come installare e utilizzare Docker su Ubuntu 22.04

Introduzione

Docker è un'applicazione che semplifica il processo di gestione dei processi applicativi nei contenitori . I container ti consentono di eseguire le tue applicazioni in processi isolati dalle risorse. Sono simili alle macchine virtuali, ma i container sono più portatili, più rispettosi delle risorse e più dipendenti dal sistema operativo host.

Per un'introduzione dettagliata ai diversi componenti di un container Docker, dai un'occhiata a The Docker Ecosystem:An Introduction to Common Components.

In questo tutorial, installerai e utilizzerai Docker Community Edition (CE) su Ubuntu 22.04. Installerai Docker stesso, lavorerai con contenitori e immagini e trasferirai un'immagine a un Docker Repository.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di quanto segue:

  • Un server Ubuntu 22.04 configurato seguendo la guida all'installazione iniziale del server Ubuntu 22.04, incluso un sudo non root utente e un firewall.
  • Un account su Docker Hub se desideri creare le tue immagini e inviarle a Docker Hub, come mostrato nei passaggi 7 e 8.

Passaggio 1:installazione di Docker

Il pacchetto di installazione Docker disponibile nel repository ufficiale di Ubuntu potrebbe non essere l'ultima versione. Per assicurarci di ottenere l'ultima versione, installeremo Docker dal repository Docker ufficiale. Per fare ciò, aggiungeremo una nuova fonte del pacchetto, aggiungeremo la chiave GPG da Docker per assicurarci che i download siano validi, quindi installeremo il pacchetto.

Innanzitutto, aggiorna l'elenco esistente di pacchetti:

  1. sudo apt update

Quindi, installa alcuni pacchetti prerequisiti che consentano a apt usa i pacchetti su HTTPS:

  1. sudo apt install apt-transport-https ca-certificates curl software-properties-common

Quindi aggiungi la chiave GPG per il repository Docker ufficiale al tuo sistema:

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Aggiungi il repository Docker ai sorgenti APT:

  1. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aggiorna nuovamente l'elenco dei pacchetti esistente per far riconoscere l'aggiunta:

  1. sudo apt update

Assicurati di eseguire l'installazione dal repository Docker anziché dal repository Ubuntu predefinito:

  1. apt-cache policy docker-ce

Vedrai un output come questo, anche se il numero di versione per Docker potrebbe essere diverso:

Output della politica apt-cache docker-ce
docker-ce:
  Installed: (none)
  Candidate: 5:20.10.14~3-0~ubuntu-jammy
  Version table:
     5:20.10.14~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     5:20.10.13~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

Nota che docker-ce non è installato, ma il candidato per l'installazione proviene dal repository Docker per Ubuntu 22.04 (jammy ).

Infine, installa Docker:

  1. sudo apt install docker-ce

Docker ora dovrebbe essere installato, il demone avviato e il processo abilitato per l'avvio all'avvio. Verifica che sia in esecuzione:

  1. sudo systemctl status docker

L'output dovrebbe essere simile al seguente, a indicare che il servizio è attivo e in esecuzione:

Output● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 7854 (dockerd)
      Tasks: 7
     Memory: 38.3M
        CPU: 340ms
     CGroup: /system.slice/docker.service
             └─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

L'installazione di Docker ora ti offre non solo il servizio Docker (daemon) ma anche la docker utilità della riga di comando o il client Docker. Esploreremo come utilizzare la docker comando più avanti in questo tutorial.

Passaggio 2:esecuzione del comando Docker senza Sudo (opzionale)

Per impostazione predefinita, la docker il comando può essere eseguito solo da root utente o da un utente nella docker gruppo, che viene creato automaticamente durante il processo di installazione di Docker. Se tenti di eseguire la docker comando senza anteporre sudo o senza essere nella docker gruppo, otterrai un output come questo:

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Se vuoi evitare di digitare sudo ogni volta che esegui la docker comando, aggiungi il tuo nome utente alla docker gruppo:

  1. sudo usermod -aG docker ${USER}

Per applicare la nuova appartenenza al gruppo, esci dal server e riconnettiti oppure digita quanto segue:

  1. su - ${USER}

Ti verrà richiesto di inserire la password dell'utente per continuare.

Verifica che il tuo utente sia ora aggiunto alla docker raggruppare digitando:

  1. groups
Outputsammy sudo docker

Se devi aggiungere un utente alla docker gruppo con cui non hai effettuato l'accesso, dichiara esplicitamente quel nome utente utilizzando:

  1. sudo usermod -aG docker username

Il resto di questo articolo presuppone che tu stia eseguendo la docker comando come utente nella docker gruppo. Se scegli di non farlo, anteponi i comandi con sudo .

Esploriamo la docker comando successivo.

Passaggio 3:utilizzo del comando Docker

Utilizzando docker consiste nel passargli una catena di opzioni e comandi seguiti da argomenti. La sintassi assume questa forma:

  1. docker [option] [command] [arguments]

Per visualizzare tutti i sottocomandi disponibili, digita:

  1. docker

A partire dalla versione Docker 20.10.14 , l'elenco completo dei sottocomandi disponibili include:

Output  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Per visualizzare le opzioni disponibili per un comando specifico, digita:

  1. docker docker-subcommand --help

Per visualizzare le informazioni a livello di sistema su Docker, utilizzare:

  1. docker info

Esaminiamo alcuni di questi comandi. Inizieremo lavorando con le immagini.

Passaggio 4:utilizzo delle immagini Docker

I contenitori Docker sono creati da immagini Docker. Per impostazione predefinita, Docker estrae queste immagini da Docker Hub, un registro Docker gestito da Docker, la società dietro il progetto Docker. Chiunque può ospitare le proprie immagini Docker su Docker Hub, quindi la maggior parte delle applicazioni e delle distribuzioni Linux di cui avrai bisogno avrà immagini ospitate lì.

Per verificare se puoi accedere e scaricare immagini da Docker Hub, digita:

  1. docker run hello-world

L'output indicherà che Docker funziona correttamente:

OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

...

Inizialmente Docker non è stato in grado di trovare hello-world image localmente, quindi ha scaricato l'immagine da Docker Hub, che è il repository predefinito. Una volta scaricata l'immagine, Docker ha creato un contenitore dall'immagine e l'applicazione all'interno del contenitore eseguita, visualizzando il messaggio.

Puoi cercare le immagini disponibili su Docker Hub utilizzando la docker comando con il search sottocomando. Ad esempio, per cercare l'immagine di Ubuntu, digita:

  1. docker search ubuntu

Lo script eseguirà la scansione di Docker Hub e restituirà un elenco di tutte le immagini il cui nome corrisponde alla stringa di ricerca. In questo caso, l'output sarà simile a questo:

OutputNAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14048     [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   283       [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112       [OK]
neurodebian                      NeuroDebian provides neuroscience research s…   88        [OK]
open-liberty                     Open Liberty multi-architecture images based…   51        [OK]
...

Nella sezione UFFICIALE colonna, OK indica un'immagine costruita e supportata dall'azienda dietro il progetto. Una volta identificata l'immagine che desideri utilizzare, puoi scaricarla sul tuo computer utilizzando il pull sottocomando.

Esegui il comando seguente per scaricare ubuntu ufficiale immagine sul tuo computer:

  1. docker pull ubuntu

Vedrai il seguente output:

OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Dopo che un'immagine è stata scaricata, puoi quindi eseguire un contenitore utilizzando l'immagine scaricata con run sottocomando. Come hai visto con hello-world ad esempio, se un'immagine non è stata scaricata quando docker viene eseguito con run sottocomando, il client Docker scaricherà prima l'immagine, quindi eseguirà un contenitore che la utilizza.

Per vedere le immagini che sono state scaricate sul tuo computer, digita:

  1. docker images

L'output sarà simile al seguente:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              1d622ef86b13        3 weeks ago         73.9MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

Come vedrai più avanti in questo tutorial, le immagini che utilizzi per eseguire i container possono essere modificate e utilizzate per generare nuove immagini, che possono quindi essere caricate (push è il termine tecnico) a Docker Hub o altri registri Docker.

Diamo un'occhiata a come eseguire i container in modo più dettagliato.

Passaggio 5:esecuzione di un container Docker

Il hello-world il contenitore eseguito nel passaggio precedente è un esempio di contenitore che viene eseguito ed esce dopo aver emesso un messaggio di prova. I contenitori possono essere molto più utili di così e possono essere interattivi. Dopotutto, sono simili alle macchine virtuali, solo più rispettose delle risorse.

Ad esempio, eseguiamo un contenitore utilizzando l'ultima immagine di Ubuntu. La combinazione di -i e -t switch ti offre l'accesso interattivo della shell al contenitore:

  1. docker run -it ubuntu

Il tuo prompt dei comandi dovrebbe cambiare per riflettere il fatto che ora stai lavorando all'interno del contenitore e dovrebbe assumere questa forma:

Outputroot@d9b100f2f636:/#

Prendere nota dell'ID del contenitore nel prompt dei comandi. In questo esempio, è d9b100f2f636 . Avrai bisogno dell'ID contenitore in seguito per identificare il contenitore quando desideri rimuoverlo.

Ora puoi eseguire qualsiasi comando all'interno del contenitore. Ad esempio, aggiorniamo il database del pacchetto all'interno del contenitore. Non è necessario anteporre a nessun comando sudo , perché stai operando all'interno del contenitore come root utente:

  1. apt update

Quindi installa qualsiasi applicazione al suo interno. Installiamo Node.js:

  1. apt install nodejs

Questo installa Node.js nel contenitore dal repository ufficiale di Ubuntu. Al termine dell'installazione, verifica che Node.js sia installato:

  1. node -v

Vedrai il numero di versione visualizzato nel tuo terminale:

Outputv12.22.9

Eventuali modifiche apportate all'interno del contenitore si applicano solo a quel contenitore.

Per uscire dal contenitore, digita exit al prompt.

Diamo un'occhiata alla gestione dei container sul nostro sistema in seguito.

Fase 6:gestione dei container Docker

Dopo aver utilizzato Docker per un po', avrai molti contenitori attivi (in esecuzione) e inattivi sul tuo computer. Per visualizzare i quelli attivi , usa:

  1. docker ps

Vedrai un output simile al seguente:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED

In questo tutorial, hai avviato due contenitori; uno dal hello-world immagine e un altro da ubuntu Immagine. Entrambi i container non sono più in esecuzione, ma esistono ancora sul tuo sistema.

Per visualizzare tutti i contenitori, attivi e inattivi, esegui docker ps con il -a interruttore:

  1. docker ps -a

Vedrai un output simile a questo:

OutputCONTAINER ID   IMAGE         COMMAND   CREATED         STATUS                     PORTS     NAMES
1c08a7a0d0e4   ubuntu        "bash"     About a minute ago   Exited (0) 7 seconds ago             dazzling_taussig
587000e49d53   hello-world   "/hello"   5 minutes ago        Exited (0) 5 minutes ago             adoring_kowalevski

Per visualizzare l'ultimo container che hai creato, passagli il -l interruttore:

  1. docker ps -l
OutputCONTAINER ID   IMAGE     COMMAND   CREATED         STATUS                     PORTS     NAMES
1c08a7a0d0e4   ubuntu    "bash"    3 minutes ago   Exited (0) 2 minutes ago             dazzling_taussig

Per avviare un container interrotto, utilizza docker start , seguito dall'ID contenitore o dal nome del contenitore. Iniziamo il contenitore basato su Ubuntu con l'ID di 1c08a7a0d0e4 :

  1. docker start 1c08a7a0d0e4

Il contenitore si avvierà e potrai usare docker ps per vederne lo stato:

OutputCONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
1c08a7a0d0e4   ubuntu    "bash"    6 minutes ago   Up 8 seconds             dazzling_taussig

Per interrompere un container in esecuzione, usa docker stop , seguito dall'ID o dal nome del contenitore. Questa volta useremo il nome che Docker ha assegnato al container, che è dazzling_taussig :

  1. docker stop dazzling_taussig

Una volta deciso che non hai più bisogno di un contenitore, rimuovilo con il docker rm comando, sempre utilizzando l'ID contenitore o il nome. Usa la docker ps -a comando per trovare l'ID contenitore o il nome per il contenitore associato a hello-world immagine e rimuoverla.

  1. docker rm adoring_kowalevski

Puoi avviare un nuovo contenitore e dargli un nome usando il --name interruttore. Puoi anche usare il --rm passare per creare un contenitore che si rimuove da solo quando viene arrestato. Consulta la docker run help comando per ulteriori informazioni su queste e altre opzioni.

I contenitori possono essere trasformati in immagini che puoi utilizzare per creare nuovi contenitori. Diamo un'occhiata a come funziona.

Passaggio 7:commit delle modifiche in un container in un'immagine Docker

Quando avvii un'immagine Docker, puoi creare, modificare ed eliminare file proprio come con una macchina virtuale. Le modifiche che apporti si applicheranno solo a quel contenitore. Puoi avviarlo e interromperlo, ma una volta che lo distruggi con il docker rm comando, le modifiche andranno perse per sempre.

Questa sezione mostra come salvare lo stato di un container come nuova immagine Docker.

Dopo aver installato Node.js all'interno del contenitore Ubuntu, ora hai un contenitore che scorre da un'immagine, ma il contenitore è diverso dall'immagine che hai usato per crearlo. Ma potresti voler riutilizzare questo contenitore Node.js come base per nuove immagini in un secondo momento.

Quindi salva le modifiche in una nuova istanza dell'immagine Docker utilizzando il comando seguente.

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

Il -m switch è per il messaggio di commit che aiuta te e gli altri a sapere quali modifiche hai apportato, mentre -a serve per specificare l'autore. Il container_id è quello che hai notato in precedenza nel tutorial quando hai avviato la sessione interattiva di Docker. A meno che tu non abbia creato repository aggiuntivi su Docker Hub, il repository di solito è il tuo nome utente Docker Hub.

Ad esempio, per l'utente sammy , con l'ID contenitore di d9b100f2f636 , il comando sarebbe:

  1. docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

Quando ti impegni un'immagine, la nuova immagine viene salvata localmente sul tuo computer. Più avanti in questo tutorial imparerai come inviare un'immagine a un registro Docker come Docker Hub in modo che altri possano accedervi.

Elencare nuovamente le immagini Docker mostrerà la nuova immagine, oltre a quella vecchia da cui è stata derivata:

  1. docker images

Vedrai un output come questo:

OutputREPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              7c1f35226ca6        7 seconds ago       179MB
...

In questo esempio, ubuntu-nodejs è la nuova immagine, che è stata derivata dall'esistente ubuntu immagine da Docker Hub. La differenza di dimensioni riflette le modifiche apportate. E in questo esempio, la modifica consisteva nell'installazione di NodeJS. Quindi la prossima volta che devi eseguire un container usando Ubuntu con NodeJS preinstallato, puoi semplicemente usare la nuova immagine.

Puoi anche creare immagini da un Dockerfile , che consente di automatizzare l'installazione del software in una nuova immagine. Tuttavia, questo non rientra nell'ambito di questo tutorial.

Ora condividiamo la nuova immagine con altri in modo che possano creare contenitori da essa.

Passaggio 8:invio di immagini Docker a un repository Docker

Il passaggio logico successivo dopo aver creato una nuova immagine da un'immagine esistente è condividerla con pochi amici selezionati, il mondo intero su Docker Hub o un altro registro Docker a cui hai accesso. Per inviare un'immagine a Docker Hub o a qualsiasi altro registro Docker, devi disporre di un account lì.

Per eseguire il push della tua immagine, accedi prima a Docker Hub.

  1. docker login -u docker-registry-username

Ti verrà chiesto di autenticarti utilizzando la tua password Docker Hub. Se hai specificato la password corretta, l'autenticazione dovrebbe riuscire.

Nota: Se il nome utente del registro Docker è diverso dal nome utente locale utilizzato per creare l'immagine, dovrai contrassegnare l'immagine con il nome utente del registro. Per l'esempio fornito nell'ultimo passaggio, digitare:

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Quindi puoi spingere la tua immagine usando:

  1. docker push docker-registry-username/docker-image-name

Per eseguire il push di ubuntu-nodejs immagine al sammy repository, il comando sarebbe:

  1. docker push sammy/ubuntu-nodejs

Il completamento del processo potrebbe richiedere del tempo mentre carica le immagini, ma una volta completato, l'output sarà simile al seguente:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...


Dopo aver eseguito il push di un'immagine in un registro, dovrebbe essere elencata nella dashboard del tuo account, come quella mostrata nell'immagine qui sotto.

Se un tentativo di push genera un errore di questo tipo, probabilmente non hai eseguito l'accesso:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Accedi con docker login e ripetere il tentativo di spinta. Quindi verifica che esista nella pagina del repository Docker Hub.

Ora puoi usare docker pull sammy/ubuntu-nodejs per trasferire l'immagine su una nuova macchina e usarla per eseguire un nuovo contenitore.

Conclusione

In questo tutorial hai installato Docker, lavorato con immagini e contenitori e inviato un'immagine modificata a Docker Hub. Ora che conosci le nozioni di base, esplora gli altri tutorial di Docker nella community di DigitalOcean.


Docker
  1. Come installare e utilizzare Docker su Ubuntu 20.04

  2. Come installare e utilizzare Wine su Ubuntu 20.04

  3. Come installare e utilizzare Docker su Ubuntu 18.04

  4. Come installare e utilizzare Docker Compose su Ubuntu 18.04

  5. Come installare e utilizzare Docker in Ubuntu 20.04

Come installare e utilizzare iTunes su Ubuntu 20.04

Come installare e utilizzare R su Ubuntu

Come installare e utilizzare Docker Compose su Ubuntu 20.04

Come installare e utilizzare Docker Compose su Ubuntu 22.04

Come installare e utilizzare Docker su Ubuntu (nel mondo reale)

Come installare e utilizzare Docker su Ubuntu 20.04