Tempo di lettura stimato: 11 minuti

Come installare e usare Docker su Ubuntu 16.04

20 maggio 2016 Docker Ubuntu Ubuntu 16.04

Introduzione

Docker è un’applicazione che rende più semplice e facile eseguire i processi delle applicazioni in contenitori, che sono come le macchine virtuali solo più portabili, con più risorse da usare e maggiormente dipendenti dal sistema operativo ospite. Per una introduzione dettagliata alle diverse componenti di un contenitore Docker, si veda L’ecosistema Docker: una Introduzione ai componenti comuni.

Ci sono due metodi per installare Docker su Ubuntu 16.04. Un metodo comporta l’installazione su un’
esistente installazione del sistema operativo. L’altro consiste nel far partire un server con uno strumento chiamato Docker Machine che autoinstalla Docker su tale server.

In questo tutorial, imparerete come installarlo ed utilizzarlo su un’installazione esistente di Ubuntu 16.04.

Prerequisiti

Per seguire questo tutorial è necessario quanto segue:

  • Droplet [la VPS di DigitalOcean, NdR] Ubuntu 16.04 a 64-bit
  • Utente non root con privilegi sudo. La guida introduttiva ad Ubuntu 16.04 spiega come impostare questa funzione.

Nota: Docker richiede una versione a 64 bit di Ubuntu così come una versione del kernel uguale o superiore a 3.10. La Droplet Ubuntu 16.04 a 64 bit soddisfa tali requisiti.

Tutti i comandi in questo tutorial dovrebbero essere eseguiti come utente non root. Se fosse necessario l’accesso root, il comando dovrà essere preceduto da sudo. La guida introduttiva ad Ubuntu 16.04 spiega come aggiungere utenti e dare loro l’accesso sudo.

Fase 1 – Installazione di Docker

Il pacchetto di installazione di Docker disponibile nel repository ufficiale di Ubuntu 16.04 non è la versione più recente. Per ottenere la versione più recente, installate Docker dal repository ufficiale di Docker. Questa sezione mostra come farlo.

In primo luogo, cercate di aggiornare il database dei pacchetti:

sudo apt-get update

Ora installate Docker. Aggiungete al sistema la chiave GPG per il repository ufficiale di Docker:

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Aggiungete il repository di Docker alle fonti APT:

echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list

Aggiornate il database dei pacchetti con i pacchetti di Docker appena aggiunti al repository:

sudo apt-get update

Assicuratevi di eseguire l’installazione dal repository di Docker invece che da quello predefinito di Ubuntu 16.04:

apt-cache policy docker-engine

Dovrebbe apparire un output simile al seguente:

docker-engine:
  Installed: (none)
  Candidate: 1.11.1-0~xenial
  Version table:
     1.11.1-0~xenial 500
        500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
     1.11.0-0~xenial 500
        500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

Si noti che docker-engine non è installato, ma il candidato per l’installazione è quello del repository di Docker per Ubuntu 16.04. Il numero di versione di docker-engine potrebbe essere diverso.

Infine, installate Docker:

sudo apt-get install -y docker-engine

Ora Docker dovrebbe essere installato, il demone è stato avviato ed il processo ha attivato l’avvio al boot. Verificate che sia in esecuzione:

sudo systemctl status docker

L’output dovrebbe essere simile al seguente, dimostrando che il servizio è attivo e in esecuzione:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 749 (docker)

Ora l’installazione di Docker non solo vi dà il servizio Docker (demone), ma anche l’utility docker a riga di comando, o il client Docker. Vedremo come utilizzare il comando docker più avanti in questo tutorial.

Fase 2 – L’esecuzione del comando Docker senza sudo (facoltativo)

Di default, l’esecuzione del comando docker richiede i privilegi di root, si deve dunque precedere il comando con sudo. Può essere anche eseguito da un utente del gruppo docker, che viene creato automaticamente durante l’installazione di Docker. Se si tenta di eseguire il comando docker senza precederlo prima con sudo o senza essere nel gruppo docker, si otterrà un output simile a questo:

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

Se si vuole evitare di usare sudo ogni volta che si esegue il comando docker, aggiungete il nome utente al gruppo docker:

sudo usermod -aG docker $(whoami)

Per rendere effettiva questa modifica, sarà necessario effettuare il logout dalla Droplet ed entrare nuovamente con lo stesso nome utente.

Nel caso fosse necessario aggiungere un utente al gruppo docker al quale non siete autenticati, specificate quel nome utente usando:

sudo usermod -aG docker username

Il resto di questo articolo presuppone che si esegua il comando docker come utente del gruppo docker. Nel caso sceglieste di non farlo, anteponete sudo ai comandi.

Fase 3 – Uso del comando docker

Con Docker installato e funzionante, è il momento di acquisire familiarità con l’utility da riga di comando. L’utilizzo di docker consiste nel passargli una serie di opzioni e comandi seguiti da argomenti. La sintassi ha questa forma:

docker [opzione] [comando] [argomenti]

Per visualizzare tutti i sottocomandi disponibili, scrivete:

docker

Come in Docker 1.11.1, la lista completa dei comandi secondari disponibili comprende:


    attach    Attach 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 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 a container or image
    kill      Kill a running container
    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
    network   Manage Docker networks
    pause     Pause all processes within a container
    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 a container
    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
    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 a running container
    tag       Tag an image into a repository
    top       Display the running processes of a container
    unpause   Unpause all processes within a container
    update    Update configuration of one or more containers
    version   Show the Docker version information
    volume    Manage Docker volumes
    wait      Block until a container stops, then print its exit code

Per visualizzare le opzioni disponibili per uno specifico comando, scrivete:

docker docker-subcommand --help

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

docker info

Fase 4 – Lavorare con le immagini Docker

I contenitori Docker sono gestiti dalle immagini Docker. Di default, queste immagini vengono prese da Docker Hub, un registro gestito da Docker, la società che sta dietro il progetto Docker. Chiunque può costruire ed ospitare le proprie immagini Docker su Docker Hub, quindi la maggior parte delle applicazioni e delle distribuzioni Linux delle quali avrete necessità di eseguire i contenitori Docker, hanno delle immagini ospitate su Docker Hub.

Per verificare se è possibile accedere e scaricare immagini da Docker Hub, scrivete:

docker run hello-world

L’output dovrebbe indicare che Docker funziona correttamente:

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

È possibile cercare immagini disponibili su Docker Hub utilizzando il comando docker con il sottocomando search. Ad esempio, per cercare l’immagine di Ubuntu, scrivete:

docker search ubuntu

Lo script esplora Docker Hub e restituisce un elenco di tutte le immagini il cui nome corrisponde alla stringa di ricerca. In questo caso, l’output sarà simile a questo:


NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                            Ubuntu is a Debian-based Linux operating s...   3808      [OK]       
ubuntu-upstart                    Upstart is an event-based replacement for ...   61        [OK]       
torusware/speedus-ubuntu          Always updated official Ubuntu docker imag...   25                   [OK]
rastasheep/ubuntu-sshd            Dockerized SSH service, built on top of of...   24                   [OK]
ubuntu-debootstrap                debootstrap --variant=minbase --components...   23        [OK]       
nickistre/ubuntu-lamp             LAMP server on Ubuntu                           6                    [OK]
nickistre/ubuntu-lamp-wordpress   LAMP on Ubuntu with wp-cli installed            5                    [OK]
nuagebec/ubuntu                   Simple always updated Ubuntu docker images...   4                    [OK]
nimmis/ubuntu                     This is a docker images different LTS vers...   4                    [OK]
maxexcloo/ubuntu                  Docker base image built on Ubuntu with Sup...   2                    [OK]
admiringworm/ubuntu               Base ubuntu images based on the official u...   1                    [OK]

...

Nella colonna OFFICIAL, OK indica un’immagine costruita e supportata dalla società che sta dietro al progetto. Una volta identificata l’immagine che si desidera utilizzare, è possibile scaricarla sul vostro computer utilizzando il sottocomando pull in questo modo:

docker pull ubuntu

Dopo che l’immagine è stata scaricata, si può quindi eseguire un contenitore utilizzando l’immagine scaricata con il sottocomando run. Se un’immagine non viene scaricata quando docker è eseguito con il sottocomando run, il client Docker per prima cosa scaricherà l’immagine e successivamente eseguirà un contenitore:

docker run ubuntu

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

docker images

L’output dovrebbe essere simile al seguente:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              c5f1cf30c96b        7 days ago          120.8 MB
hello-world         latest              94df4f0ce8a4        2 weeks ago         967 B

Come si vedrà più avanti in questo tutorial, le immagini che si utilizzano per eseguire i contenitori possono essere modificate ed utilizzate per generare nuove immagini che possono poi essere caricate (pushed è il termine tecnico) su Docker Hub o su altri registri Docker.

Fase 5 – Esecuzione di un contenitore Docker

Il contenitore hello-world che è stato eseguito precedentemente è un esempio di contenitore che viene eseguito e termina dopo l’emissione di un messaggio di prova. I contenitori, tuttavia, possono essere molto più utili di quest’ultimo e possono essere interattivi. Dopo tutto, sono simili alle macchine virtuali, solamente più orientati alle risorse.

A titolo di esempio, eseguiamo un contenitore utilizzando l’ultima immagine di Ubuntu. La combinazione delle opzioni -i e -t consente l’accesso alla shell interattiva nel contenitore:

docker run -it ubuntu

Il prompt dei comandi dovrebbe cambiare per riflettere il fatto che ora si sta lavorando all’interno del contenitore, e dovrebbe prendere questa forma:

root@d9b100f2f636:/#

Importante: Si noti l’id del contenitore nel prompt dei comandi. Nell’esempio precedente è d9b100f2f636.

Ora si può eseguire qualsiasi comando all’interno del contenitore. Ad esempio, supponiamo di aggiornare il database dei pacchetti all’interno del contenitore. Non c’è bisogno di prefissare ogni comando con sudo perché si sta operando all’interno del contenitore con i privilegi di root:

apt-get update

Ora installate una qualsiasi applicazione al suo interno. Per esempio, installate NodeJS.

apt-get install -y nodejs

Fase 6 – Fare cambiamenti in un contenitore per un’immagine Docker

Di default, i filesystem Docker sono temporanei. Se si avvia un’immagine Docker, è possibile creare, modificare ed eliminare i file, proprio come una macchina virtuale. Tuttavia, se si arresta il contenitore e lo si avvia di nuovo, andranno perse tutte le modifiche: tutti i file eliminati in precedenza verranno ripristinati e tutti i nuovi file o le modifiche apportate non saranno presenti. Questo perché le immagini di Docker sono più simili ai template piuttosto che alle immagini come nel mondo della virtualizzazione standard.

Per informazioni su come mantenere questi cambiamenti all’interno del contenitore in modo che possano resistere ai riavvii del contenitore, è necessario utilizzare i Docker Data Volumes (volumi dati di Docker). Per i dettagli, fate riferimento a Lavorare con i Data Volumes di Docker su Ubuntu 14.04.

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

Dopo aver installato nodejs all’interno del contenitore Ubuntu, avete un contenitore alimentato da un’immagine, ma il contenitore è diverso dall’immagine che avete usato per crearlo.

Per salvare lo stato del contenitore come nuova immagine, per prima cosa uscite dal contenitore stesso:

exit

Poi fate le modifiche alla una nuova istanza dell’immagine Docker usando il seguente comando. L’opzione -m è per il messaggio di commit che vi aiuta a sapere quali modifiche sono state apportate, mentre -a viene utilizzato per specificare l’autore. L’ID del contenitore è quello indicato in precedenza nel tutorial quando avete iniziato la sessione interattiva di Docker. A meno che non siano stati creati dei repository aggiuntivi su Docker Hub, il repository è di solito il vostro nome utente di Docker Hub:

docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name

Per esempio:

docker commit -m "added node.js" -a "Sunday Ogwu-Chinuwa" d9b100f2f636 finid/ubuntu-nodejs

Nota: Quando si esegue il commit di un’immagine, la nuova immagine viene salvata in locale, cioè sul computer. Più avanti in questo tutorial, imparerete come effettuare il push dell’immagine in un registro Docker come Docker Hub in modo che possa essere valutata e utilizzata da voi e dagli altri.

Dopo che l’operazione è stata completata, elencare le immagini Docker presenti ora sul vostro computer dovrebbe mostrare anche la nuova immagine, così come quella vecchia ricavata da:

docker images
L’output dovrebbe essere simile a questo:
finid/ubuntu-nodejs       latest              62359544c9ba        50 seconds ago      206.6 MB
ubuntu              latest              c5f1cf30c96b        7 days ago          120.8 MB
hello-world         latest              94df4f0ce8a4        2 weeks ago         967 B

Nell’esempio precedente, ubuntu-nodejs è la nuova immagine, che è derivata dall’immagine Ubuntu esistente su Docker Hub. La differenza di dimensioni riflette i cambiamenti che sono stati fatti. In questo esempio, il cambiamento è che NodeJS è stato installato. Quindi, la prossima volta che avrete bisogno di eseguire un contenitore utilizzando Ubuntu con NodeJS pre-installato, potete usare da subito la nuova immagine. Le immagini possono anche essere costruite da quello che è chiamato Dockerfile. Ma questo è un processo molto complesso che è ben al di fuori della portata di questo articolo.

Fase 7 – Elencare i contenitori Docker

Dopo aver utilizzato Docker per un po’, sul computer avrete molti contenitori attivi (in esecuzione) e inattivi. Per visualizzare quelli attivi, usate:

docker ps

Si avrà un output simile al seguente:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c79cc556dd        ubuntu              "/bin/bash"         3 hours ago         Up 3 hours                              silly_spence

Per visualizzare tutti i contenitori attivi e inattivi, usate l’opzione -a:

docker ps -a

Per visualizzare l’ultimo contenitore che è stato creato, usate l’opzione -l:

docker ps -l

Per interrompere un contenitore attivo o in esecuzione, basta scrivere:

docker stop container-id

Il container-id può essere trovato nell’output del comando docker ps.

Fase 8 – Effettuare il push delle immagini Docker in un repository

Il passo successivo alla creazione di una nuova immagine da un’immagine esistente è quello di condividerla con i vostri amici, con il mondo intero su Docker Hub, o su un altro registro Docker al quale si ha accesso. Per effettuare il push di un’immagine su Docker Hub o su qualsiasi altro registro Docker, è necessario disporre di un account su tale sistema.

Questa sezione mostra come effettuare il push di un’immagine Docker su Docker Hub. Per informazioni su come creare il proprio registro privato Docker si veda Come installare un registro privato Docker su Ubuntu 14.04.

Per creare un account su Docker Hub, registratevi su Docker Hub. In seguito, per effettuare il push della vostra immagine, accedete a Docker Hub. Vi verrà chiesto di effettuare il login:

docker login -u docker-registry-username

Se la password specificata è corretta, l’autenticazione dovrebbe avere successo. Una volta effettuato il login, potete effettuare il push della vostra immagine utilizzando:

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

Ci vorrà del tempo prima che il processo sia completato e, una volta terminato, l’output sarà simile al seguente:

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

...

Dopo aver effettuare il push di un’immagine su un registro, dovrebbe essere elencata sulla bacheca del vostro account, come quella mostrata nella immagine qui sotto.

Come installare e usare Docker su Ubuntu 16.04

Se un tentativo di push presenta un errore di questo tipo, è probabile che non vi eravate autenticati:

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

Eseguite il login e ripetete il tentativo di push.

Conclusioni

C’è molto di più su Docker rispetto a quello che è stato esposto in questo articolo, ma dovrebbe essere abbastanza per iniziare a lavorare con Docker su Ubuntu 16.04. Come la maggior parte dei progetti open source, Docker è costituito da una base di codice in rapido sviluppo; per leggere le ultime informazioni prendete dunque l’abitudine di visitare la pagina del blog del progetto.

Verificate anche gli altri tutorial su Docker nella Comunità DigitalOcean.

Autore: finid

Revisore: Tammy Fox

Traduzione dell’articolo https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04 Copyright © 2016 DigitalOcean™ Inc.

 

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*