Come installare e configurare Docker su Ubuntu 20.04 LTS
Introduzione
Docker è un'software che semplifica il processo di gestione dei processi delle applicazioni nei "contenitori". I contenitori consentono di eseguire le applicazioni in processi isolati dalle risorse. Sono simili alle macchine virtuali.
In questo tutorial, installeremo e utilizzeremo Docker Community Edition (CE) su Ubuntu 20.04 LTS Focal Fossa.
Prerequisiti
Prima di continuare con questo tutorial è necessario rispettare i seguenti prerequisiti:
Utente con privilegi sudo.
Se desideri installare Docker su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.
Connessione al Server
Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:
Successivamente sarà necessario inserire la password dell'utente root.
Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:
Successivamente vi verrà chiesto di inserire la password del vostro utente.
La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:
Siete ora connessi al vostro server, siete pronti per iniziare l'installazione di Docker.
Installare Docker
Docker è disponibile nel repository ufficiale di Ubuntu, ma potrebbe non essere la versione più recente. Per utilizzare la versione più recente, installeremo Docker dal repository Docker ufficiale.
Assicuriamoci che i pacchetti nel sistema siano aggiornati alle ultime versioni disponibili:
Installare alcuni pacchetti necessari che consentono a apt di utilizzare i pacchetti su HTTPS:
Aggiungere la chiave GPG per il repository Docker ufficiale:
Aggiungi il repository Docker:
Successivamente, aggiornare il database con repository appena aggiunto:
Assicurati di aver aggiunto il repository Docker:
Dovreste visualizzare un messaggio di output simile al seguente:
docker-ce:
Installed: 5:19.03.9~3-0~ubuntu-focal
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
*** 5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
100 /var/lib/dpkg/status
|
Infine, installare Docker:
Per controllare lo stato di Docker:
Dovreste visualizzare un messaggio di output simile al seguente:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-21 23:09:38 CEST; 1min 56s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 28124 (dockerd)
Tasks: 8
Memory: 35.6M
CGroup: /system.slice/docker.service
└─28124 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd
|
Docker è correttamente installato.
Eseguire comandi Docker senza sudo
Per impostazione predefinita, il comando Docker può essere eseguito solo dall'utente root o da un utente nel gruppo docker, che viene creato automaticamente durante il processo di installazione di Docker.
Se si desidera evitare di digitare sudo ogni volta che si esegue il comando docker, aggiungere il proprio nome utente al gruppo docker in questo modo:
Per applicare le modifiche al gruppo, disconnettersi dal server e rientrare, oppure digitare dare il seguente comando:
Ti verrà richiesto di inserire la password dell'utente per continuare.
Conferma che il tuo utente è stato aggiunto al gruppo docker:
Dovreste ricevere un messaggio di output simile al seguente:
|
skid adm cdrom sudo dip plugdev lxd docker samba |
Se desideri aggiungere un altro utente al gruppo docker, con il quale non ti sei connesso, dare il seguente comando:
Installare una versione differente di Docker
Per installare una versione specifica, prima elenca tutte le versioni disponibili nel repository Docker:
Le versioni Docker disponibili sono stampate nella seconda colonna. Al momento della stesura di questo articolo, la versione Docker ( 5:20.10.17~3-0~ubuntu-focal amd64 ) disponibile nei repository Docker ufficiali.
Listing... Done
docker-ce/focal,now 5:20.10.17~3-0~ubuntu-focal amd64
docker-ce/focal 5:20.10.16~3-0~ubuntu-focal amd64
docker-ce/focal 5:20.10.15~3-0~ubuntu-focal amd64
docker-ce/focal 5:20.10.14~3-0~ubuntu-focal amd64
docker-ce/focal 5:20.10.13~3-0~ubuntu-focal amd64
docker-ce/focal 5:20.10.12~3-0~ubuntu-focal amd64
... cut ...
docker-ce/focal 5:19.03.12~3-0~ubuntu-focal amd64
docker-ce/focal 5:19.03.11~3-0~ubuntu-focal amd64
docker-ce/focal 5:19.03.10~3-0~ubuntu-focal amd64
docker-ce/focal 5:19.03.9~3-0~ubuntu-focal amd64
|
Installa una versione specifica aggiungendo =<VERSION> dopo il nome del pacchetto:
Quando viene rilasciata una nuova versione di Docker, è possibile aggiornare i pacchetti utilizzando la procedura standard sudo apt update && sudo apt upgrade.
Bloccare l'aggiornamento di Docker
Se si desidera impedire l'aggiornamento del pacchetto Docker, contrassegnarlo come trattenuto (hold):
Comandi Docker
Utilizzeremo un utente nel gruppo docker, quindi non avremo bisogno di utilizzare sudo. Altrimenti se non si vuole utilizzare un utente del docker aggiungere il comando con sudo.
La sintassi generale è la seguente:
Per visualizzare tutti i sottocomandi disponibili:
Dovreste ricevere un messaggio di output simile al seguente:
|
Management Commands: builder Manage builds config Manage Docker configs container Manage containers engine Manage the docker engine image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes Commands: 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 Run 'docker COMMAND --help' for more information on a command. |
Per visualizzare le informazioni di sistema su Docker, utilizzare:
Lavorare con le immagini Docker
I contenitori Docker sono costruiti con 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 loro immagini Docker su Docker Hub.
Per verificare se è possibile accedere e scaricare immagini da Docker Hub, digitare:
Dovreste ricevere un messaggio di output simile al seguente:
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9bb5a5d4561a: Pull complete Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. |
Docker inizialmente non è in grado di trovare l'immagine hello-world localmente, quindi ha scaricato l'immagine da Docker Hub, che è il repository predefinito. Una volta che l'immagine è stata scaricata, Docker ha creato un contenitore dall'immagine e l'applicazione all'interno del contenitore è stata eseguita, visualizzando il messaggio.
È possibile cercare immagini disponibili su Docker Hub utilizzando il comando docker con il sottocomando di ricerca. Ad esempio, per cercare l'immagine di Ubuntu, digitare:
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 dovreste ricevere un messaggio di output simile al seguente:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 8984 [OK] dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 258 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 190 [OK] consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 139 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 95 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 93 [OK] neurodebian NeuroDebian provides neuroscience research s… 55 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 48 [OK] ubuntu-debootstrap debootstrap --variant=minbase --components=m… 40 [OK] nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK] tutum/ubuntu Simple Ubuntu docker images with SSH access 18 i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 16 1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK] ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12 1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 7 [OK] eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK] codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 5 [OK] darksheer/ubuntu Base Ubuntu Image -- Updated hourly 5 [OK] pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 2 1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK] smartentry/ubuntu ubuntu with smartentry 1 [OK] paasmule/bosh-tools-ubuntu Ubuntu based bosh-cli 0 [OK] ossobv/ubuntu Custom ubuntu image from scratch (based on o… 0 1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK] pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0 |
Nella colonna OFFICIAL, OK indica un'immagine creata e supportata dalla società dietro il progetto. Una volta identificata l'immagine che vorresti usare, puoi scaricarla sul tuo computer usando il sottocomando pull.
Eseguire il seguente comando per scaricare l'immagine ufficiale di ubuntu sul proprio computer o server:
Dovreste ricevere un messaggio di output simile al seguente:
Using default tag: latest latest: Pulling from library/ubuntu 6b98dfc16071: Pull complete 4001a1209541: Pull complete 6319fc68c576: Pull complete b24603670dc3: Pull complete 97f170c87c6f: Pull complete Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d Status: Downloaded newer image for ubuntu:latest |
Dopo aver scaricato un'immagine, è possibile eseguire un contenitore utilizzando l'immagine scaricata con il sottocomando run.
Per vedere le immagini che sono state scaricate sul vostro computer o server, digitare:
Dovreste ricevere un messaggio di output simile al seguente:
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 93fd78260bd1 4 weeks ago 86.2MB hello-world latest 4ab4c602aa5e 3 months ago 1.84kB |
Come vedremo più avanti in questo tutorial, le immagini che utilizzi per eseguire i contenitori possono essere modificate e utilizzate per generare nuove immagini, che possono quindi essere caricate (spinto è il termine tecnico) su Docker Hub o altri registri di Docker.
Le immagini possono essere modificate e utilizzate per generare nuove immagini, che possono quindi essere caricate (push) su Docker Hub o altri registri di Docker.
Docker Container
Il contenitore hello-world eseguito nel passaggio precedente è un esempio di contenitore che viene eseguito ed e chiuso automaticamente dopo l'emissione di un messaggio di prova. I contenitori possono essere più complessi e possono essere interattivi.
Provare il contenitore dell'immagine di Ubuntu:
Il prompt dei comandi dovrebbe cambiare per riflettere il fatto che ci vi trovate all'interno del contenitore. Dovrebbe avere un formato simile al seguente:
root@3256a08e3b3c:/# |
I seguenti numeri 3256a08e3b3c corrispondono all'ID del contenitore.
Ora è possibile eseguire qualsiasi comando all'interno del contenitore. Ad esempio, aggiorniamo il database del pacchetto all'interno del contenitore. Non avrete bisogno di anteporre alcun comando con sudo, perché si sta operando all'interno del contenitore come utente root:
Quindi è possibile installare qualsiasi applicazione come per esempio Node.js:
Verificare la versione di nodejs appena installata:
Dovreste ricevere un messaggio di output simile al seguente:
v10.19.0 |
Qualsiasi modifica apportata all'interno del contenitore si applica solo a quel contenitore.
Per uscire dal contenitore, digitare exit al prompt.
Diamo un'occhiata alla prossima gestione dei container sul nostro sistema.
Gestire un contenitore Docker
Per visualizzare tutti i contenitori attivi:
Dovreste ricevere un messaggio di output simile al seguente:
CONTAINER ID IMAGE COMMAND CREATED |
Abbiamo avviato due contenitori, hello-world e l'immagine di ubuntu. Entrambi i contenitori non sono più in esecuzione, ma esistono ancora sul tuo sistema.
Per visualizzare tutti i contenitori, attivi e inattivi, aggiungere l'opzione -a al comando precedente:
Dovreste ricevere un messaggio di output simile al seguente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90c1de9ca789 ubuntu "/bin/bash" 3 minutes ago Exited (130) 27 seconds ago dazzling_rubin 46bfb1d8c68d hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago tender_roentgen |
Per visualizzare l'ultimo contenitore che hai creato, utilizzare il comando -l:
Per avviare un container interrotto, utilizzare docker start, seguito dall'ID contenitore o dal nome del contenitore. Avviare il contenitore basato su Ubuntu con l'ID di 90c1de9ca789:
Il contenitore verrà avviato e potrete utilizzare docker ps per vedere il suo stato.
Per arrestare un container in esecuzione, utilizzare la docker stop, seguito dall'ID contenitore o dal nome.
Arrestare il contenitore utilizzando il nome associato:
Per rimuovere un contenitore, è possibile utilizzare il comando docker rm e associare l'ID oppure il nome:
Disinstallare Docker
Prima di disinstallare Docker è una buona idea rimuovere tutti i contenitori, le immagini, i volumi e le reti.
Eseguire i comandi seguenti per arrestare tutti i contenitori in esecuzione e rimuovere tutti gli oggetti finestra mobile:
Ora puoi disinstallare Docker come qualsiasi altro pacchetto installato con apt:
Conclusione
L'installazione e la configurazione di Docker su Ubuntu 20.04 LTS Focal Fossa è terminata. Per ulteriori informazioni su Docker, consulta la documentazione ufficiale di Docker.