Docker Tutorial: installazione e funzionamento della piattaforma container

Server virtuali (VPS) di IONOS

Hosting VPS conveniente e potente per gestire le tue applicazioni personalizzate, con consulente personale e supporto 24/7.

100% storage SSD
Pronto in 55 sec.
Certificato SSL

“Build, Ship and Run Any App, Anywhere”, è questo il motto con il quale la piattaforma container open source promuove un’alternativa flessibile e non troppo gravante sulle risorse per l’emulazione di componenti hardware, basata sulle macchine virtuali (VMs). Nel nostro tutorial di Docker per principianti approfondiamo le differenze tra le due tecnologie di virtualizzazione e vi presentiamo il progetto open source Docker con una chiara guida passo passo.

Mentre la virtualizzazione hardware classica si basa sull’avviare diversi sistemi guest su un sistema host comune, con Docker, grazie ai suoi cosiddetti container, le applicazioni vengono lanciate come processi isolati su di uno stesso sistema. Si parla a questo proposito di virtualizzazione basata su container e anche di un operation system level virtualization.

 

Il seguente grafico mostra le differenze sostanziali presenti nella struttura architettonica di entrambe le tecniche di virtualizzazione.

Entrambe le tecniche offrono la possibilità a sviluppatori e amministratori di sistema di impostare diverse applicazioni, ciascuna con diverse requisiti, parallelamente e su uno stesso sistema fisico. Le maggiori differenze si trovano soprattutto nell’utilizzo delle risorse e nella portabilità.

Container: virtualizzazione con minimal overhead

Quando le applicazioni vengono incapsulate all’interno di una virtualizzazione hardware classica, questo avviene per mezzo di un cosiddetto hypervisor, che funziona da livello di astrazione tra il sistema host e i vari sistemi guest virtuali. Ogni sistema guest viene realizzato come macchina completa con un kernel separato. Le risorse hardware del sistema di host (CPU, memoria, spazio sul disco fisso, unità periferiche a disposizione) vengono proporzionalmente assegnate dall’hypervisor.

Con la virtualizzazione basata su container non viene invece riprodotto un sistema guest completo: le applicazioni vengono lanciate all’interno dei container, che condividono lo stesso kernel (quello del sistema ospitante), funzionando tuttavia come processi isolati all’interno dello spazio utente.

Consiglio

I sistemi operativi moderni suddividono la propria memoria virtuale solitamente in due partizioni separate: kernel space e user space, ovvero lo spazio kernel e lo spazio utente. Mentre lo spazio kernel è riservato esclusivamente per il funzionamento del kernel e altre componenti centrali del sistema operativo, lo spazio utente rappresenta la partizione di memoria a disposizione delle applicazioni. La netta separazione tra i due tipi di spazio serve innanzitutto a proteggere il sistema da applicazioni dannose o malfunzionanti.

Il grande vantaggio della virtualizzazione basata su container sta nel fatto che applicazioni con diversi requisiti possono essere eseguite isolatamente le une dalle altre, senza che sia necessario che venga messo a disposizione l’overhead di un sistema guest separato. Per fare ciò la tecnologia a container sfrutta due funzioni basilari del Kernel di Linux: Control Groups (Cgroups) e il Kernel Namespaces:

  • Cgroups limitano l’accesso dei processi alle risorse di memoria, di CPU e di I/O e impediscono così facendo che le risorse necessarie per un processo compromettano altri processi in atto.
  • Namespaces (spazio dei nomi) limitano un processo e i suoi processi figli a una porzione circoscritta del sistema sui quali si basano. Al fine di incapsulare i processi, Docker utilizza Namespaces in cinque diversi ambiti:
     
    • System identificaion (UTS): nella virtualizzazione basata su container vengono utilizzati i Namespaces UTS al fine di attribuire a ogni container il proprio nome di host e di dominio.
       
    • Process IDentifier (PID): ogni container Docker utilizza un proprio spazio di nomi per i processi di identificazione. I processi eseguiti all’esterno di un container non sono visibili dal suo interno. In questo modo i processi incapsulati all’interno di container sullo stesso sistema ospitante possono possedere gli stessi PID, senza che venga però a crearsi un conflitto.
       
    • Comunicazione tra processi (IPC o anche Inter-Process Communication): gli spazi di nomi IPC isolano i processi in un container in modo che la comunicazione con i processi esterni al container venga impedita.
       
    • Risorse di rete (NET): con gli spazi di nomi di rete è possibile assegnare risorse di rete separate a ogni container, come ad esempio indirizzi IP e tabelle di routing.
       
    • Mount Point del file system (MNT): grazie agli spazi di nomi Mount un processo isolato non vede mai l’intero file system dell’host, ma piuttosto solo una parte di esso, che corrisponde solitamente a un’immagine specifica per questo container.

Fino alla versione 0.8.1 l’isolamento dei processi con Docker si basava sui container Linux (LXC), ma a partire dalla versione 0.9 gli utenti hanno a disposizione il formato di container sviluppato da Docker stesso: Libcontainer. Questo permette di utilizzare Docker su varie piattaforme e di eseguire lo stesso container su diversi sistemi host. In questo modo è diventato possibile anche offrire una versione di Docker per Windows e macOS.

Scalabilità, high availability e portabilità

La tecnologia a container non rappresenta solamente un’alternativa alla classica virtualizzazione hardware che sia più attenta al risparmio delle risorse: i container permettono anche di impiegare le applicazioni su diverse piattaforme e varie infrastrutture, senza che sia necessario adeguarle specificamente alle configurazioni hardware e software dei rispettivi sistemi ospitanti.

Come copie portabili dei container Docker utilizza le cosiddette Image. Le Image contengono singole applicazioni inclusive di tutte le librerie e di tutti i file binari e di configurazione necessari per la durata dei processi incapsulati, portando così al minimo le richieste sul sistema ospitante. In questo modo un container può essere spostato tra sistemi Linux, Windows o macOS, senza difficoltà e senza che sia necessario riconfigurare. Basta infatti installare la piattaforma Docker che fungerà da livello di astrazione. Docker è la base ideale per realizzare architetture software scalabili e con HA (high availability). Docker viene infatti utilizzato nei sistemi produttivi di aziende come Spotify, Google, eBay o Zalando.

Docker: struttura e funzioni

Docker è il più popolare progetto software tra quelli che mettono a disposizione degli utenti una tecnologia di virtualizzazione basata su container. La piattaforma open source si basa su tre componenti fondamentali: per eseguire un container gli utenti hanno bisogno solamente di Docker Engine e delle speciali Docker Image, che o fanno riferimento al Docker Hub o possono essere create autonomamente.

Le Docker Image

Similarmente alle macchine virtuali i Docker Container si basano sulle Image. Una Image è un modello non modificabile che contiene tutte le informazioni necessarie al Docker Engine per creare un container. Come copia portabile di un container una Docker Image viene descritta come un file di testo, si parla anche di Dockerfile. Se un container deve essere lanciato su di un sistema, per prima cosa viene caricato un pacchetto con l’Image corrispettiva, sempre che questa non sia già presente localmente. L’Image caricata mette a disposizione il sistema dati necessario per la durata, assieme a tutti i parametri. Un container in esecuzione può essere considerato come processo in corso di una Image.

Il Docker Hub

Il Docker Hub è un registry per le respository basato su cloud, o in parole di più facile comprensione una sorta di libreria delle Docker Image. Il servizio online si suddivide tra pubblico e privato. La sezione pubblica offre agli utenti la possibilità di caricare Image sviluppate autonomamente e di condividerle con la community. Qui sono a disposizione un grande numero di Image ufficiali del team di sviluppo di Docker e di affermati progetti open source. Le Image che vengono caricate nella sezione privata del registry non sono accessibili apertamente ma possono essere condivise ad esempio con le persone interne alla propria azienda o nei propri circoli di amici o conoscenti. Il Docker Hub può essere raggiunto su Hub.docker.com.

Il Docker Engine

La parte centrale del progetto Docker è il Docker Engine. Si tratta di una applicazione open source client-server, a disposizione di tutti gli utenti nella versione attuale su tutte le piattaforme.

L’architettura di base del Docker Engine si può suddividere in tre componenti: un daemon con funzioni di server, una interfaccia di programmazione (API) basata sul REST (Representational State Transfer) e il terminal del sistema operativo (Command-Line Interface, CLI) come interfaccia utente (Client).

  • Il Docker daemon: nel Docker Engine viene utilizzato un processo daemon come server. Il Docker daemon viene eseguito in background sul sistema ospitante e serve per la gestione centrale del Docker Engine. Con questa funzione esso crea e gestisce tutte le Image, i container e le reti.
  • La API REST: la API REST determina una serie di interfacce che permettono ad altri programmi di comunicare con il Docker daemon e di dargli delle direttive. Uno di questi programmi è il terminale del sistema operativo.
  • Il terminale: come programma client Docker utilizza il terminal del sistema operativo. Questo interagisce con il Docker daemon attraverso la API REST e permette agli utenti di gestire questa tramite gli script o i dati forniti dagli utenti.

Con Docker gli utenti avviano, stoppano e gestiscono i container direttamente dal terminale. Il dialogo con daemon avviene attraverso il comando docker e altri come build (crea), pull (scarica) o run (avvia). Client e server si possono trovare sullo stesso sistema. In alternativa posso anche lanciare un Docker daemon su un altro sistema. In base a quale tipo di connessione debba essere costruita, la comunicazione tra client e server avviene attraverso la API REST, attraverso le Socket UNIX o un’interfaccia di rete.

La seguente grafica mostra l’interazione delle singole componenti Docker, come ad esempio con i comandi docker build, docker pull e docker run:

Il comando docker build dà istruzione al Docker daemon di creare una Image (linea punteggiata). Per fare ciò deve essere presente un Dockerfile corrispondente. Se invece di essere creata, la Image dovesse essere caricata da un repository nel Docker Hub, allora si utilizza il comando docker pull (linea tratteggiata). Se tramite il docker run al Docker daemon viene assegnato di avviare un container, per prima cosa il programma di background verifica la presenza della Image container corrispondente. Se questo è il caso, il container viene eseguito (linea continua). Invece nel caso in cui il daemon non riesca a trovare l’Image, questo avvia automaticamente un Pulling dal repository.

L’installazione del Docker Engine

Mentre inizialmente Docker è stato utilizzato unicamente sulle distribuzioni Linux, l’attuale versione del Container Engine si contraddistingue per il suo ampio grado di indipendenza dalle piattaforme. I pacchetti d’installazione si trovano per Microsoft Windows e macOS così come per i servizi cloud come Amazon Web Services (AWS) e Microsoft Azure. Alle distribuzioni Linux supportate appartengono:

  • CentOS
  • Debian
  • Fedora
  • Oracle Linux
  • Red Hat Enterprise Linux
  • Ubuntu
  • openSUSE
  • SUSE Linux Enterprise

Inoltre si trovano distribuzioni Docker curate dalle community per:

  • Arch Linux
  • CRUX Linux
  • Gentoo Linux

Qui di seguito vi illustriamo i processi di installazione del Docker Engine, usando l’esempio della popolare distribuzione Linux Ubuntu. Nella documentazione di Docker (in lingua inglese) trovate indicazioni precise per l’installazione su altre piattaforme le trovate nella documentazione di Docker, in lingua inglese.

In base ai requisiti e alle condizioni da soddisfare avete tre diverse possibilità per installare la Piattaforma Container Docker sul vostro sistema Ubuntu:

  • Installazione manuale per mezzo del pacchetto DEB
  • Installazione dalla Docker Repository
  • Installazione dalla Ubuntu Repository

Prima dovete però dare un’occhiata ai requisiti di sistema del Docker Engine.

Requisiti di sistema

Per installare l’attuale versione di Docker sulla vostra distribuzione Ubuntu, avete bisogno della variante a 64 bit di una delle seguenti versioni di Ubuntu:

  • Yakkety 16.10
  • Xenial 16.04 (LTS)
  • Trusty 14.04 (LTS)
Consiglio

Per i sistemi di produzione consigliamo l’utilizzo di prodotti software con il supporto a lungo termine (“Long-term support”, LTS). I provider provvedono a fornire update quando viene rilasciata sul mercato una nuova versione.

Prima dell’installazione Docker

Il seguente tutorial si basa sulla versione di Ubuntu Xenail 16.04 (LTS). Con Yakkety 16.10 tuttavia il processo di installazione prevede gli stessi passaggi. Per gli utenti di Trusty 14.04 (LTS) è raccomandata l’installazione del linux-Image-extra-*packages prima di procedere con quella di Docker, poiché questi pacchetti permettono al Docker Engine di accedere ai driver di archiviazione AUFS.

Un metodo abbastanza comodo per dotare il sistema Linux degli update necessari è offerto dal gestore di pacchetti APT (Advanced Packaging Tool). Per installare i pacchetti aggiuntivi per Trusty 14.04, procedete come successivamente illustrato:

  1. Accedere al terminal: lanciate Ubuntu e aprite il terminal – ad esempio con la combinazione dei tasti [CTRL] + [ALT] + [T].
  1. Aggiornare la lista dei pacchetti: per aggiornare l’indice locale dei pacchetti del vostro sistema operativo inserite il seguente comando:
$ sudo apt-get update

Confermate dunque con il tasto [ENTER].

N.B.

Il comando apt-getupdate non installa alcun nuovo pacchetto, si tratta di un aggiornamento delle descrizioni dei pacchetti già presenti localmente.

Il supplemento sudo vi permette di eseguire il comando in qualità di amministratore (superuser “root”). A volte l’esecuzione di certi comandi richiede i diritti di Root. In questo caso Ubuntu vi richiede l’immissione della password da amministratore. Alternativamente avete la possibilità di passare in maniera permanente al ruolo di amministratore attraverso sudo –s.

Consiglio

Per installare la piattaforma di contenitori Docker avete bisogno dei diritti di accesso root per il sistema host.

Una volta inserita la password ed esservi quindi registrati come root-user, Ubuntu inizierà il processo di aggiornamento. All’interno del terminal vi viene mostrato lo stato delle operazioni.

  1. Installare i pacchetti aggiuntivi: una volta aggiornate le descrizioni dei pacchetti potete passare all’installazione dei nuovi pacchetti. APT, il gestore dei pacchetti, mette a disposizione il comando apt-get install “PacketName” a questo scopo. Con Trusty 14.04, per caricare i pacchetti aggiuntivi raccomandati dal repository di Ubuntu e installarli sul vostro sistema inserite il seguente comando nel terminal e confermate con [ENTER]:
$ sudo apt-get install -y --no-install-recommends \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual
Consiglio

Utilizzando i comandi con l’opzione -y, tutte le richieste interattive avranno come risposta un “sì”. L’opzione --no-install-recommends impedisce a Ubuntu di installare automaticamente i pacchetti raccomandati.

Una volta scaricati i pacchetti aggiunti per Trusty 14.04, avete a disposizione tutte le funzioni della piattaforma Docker anche per questa versione di Ubuntu.

Nel caso in cui non sappiate quale sia la versione del vostro sistema Ubuntu, o se non siate sicuri di potere disporre dell’architettura a 64 bit necessaria per l’installazione di Docker, potete trovare risposta a queste domande relative alla versione Kernel e all’architettura di sistema grazie a un comando eseguibile sul terminale di Ubuntu:

$ sudo uname -rm 

La versione Ubuntu, il Release così come il nome in codice possono essere rivelati con l’immissione del seguente comando:

$ sudo lsb_release –a

Installazione automatica attraverso il pacchetto DEB

A livello teorico Docker può essere scaricato come pacchetto DEB e installato manualmente. Il pacchetto di installazione necessario può essere scaricato al link seguente:

https://apt.dockerproject.org/repo/pool/main/d/docker-engine/

Scaricate il file DEB della versione Ubuntu desiderata e iniziate il processo di installazione con il seguente comando attraverso il terminal Ubuntu:

$ sudo dpkg -i /path/to/package.deb 
Consiglio

Modificate il segnaposto /path/to in modo che il percorso del file riporti al luogo dove il pacchetto DEB è stato archiviato.

Nel caso di un’installazione manuale anche tutti gli aggiornamenti devono avvenire manualmente. La documentazione Docker consiglia perciò di procedere attraverso il repository di Docker. Questo permette di installare in comodità la piattaforma container partendo dal terminal di Ubuntu e di tenerla sempre aggiornata.

Qui di seguito vi illustriamo come procedere con l’installazione di Docker secondo il metodo consigliato.

Installazione attraverso il repository di Docker

Il percorso consigliato prevede l’installazione della propria piattaforma container attraverso il repository di Docker. Vi mostriamo come si fa a configurare il sistema in modo che il gestore di pacchetti APT possa accedere al repository di Docker attraverso l’HTTPS.

  1. Installare i pacchetti: digitate il seguente comando per installare i pacchetti necessari per l’accesso al repository di Docker:
$ sudo apt-get install -y --no-install-recommends \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
  1. Aggiungere la chiave GPG: aggiungete la chiave GPG ufficiale di Docker
$ curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
  1. Verificare la chiave GPG: assicuratevi che la chiave GPG coincida con il seguente ID: 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D. Utilizzate questo comando:
$ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D

Nel terminale compare ciò che segue:

pub   4096R/2C52609D 2015-07-14
        Key fingerprint = 5811 8E89 F3A9 1289 7C07  0ADB F762 2157 2C52 609D
uid                  Docker Release Tool (releasedocker) <docker@docker.com>
  1. Configurare il repository di Docker: al fine di assicurare l’accesso al repository di Docker, inserite il seguente comando:
$ sudo add-apt-repository \
       "deb https://apt.dockerproject.org/repo/ \
       ubuntu-$(lsb_release -cs) \
       main"

A questo punto il sistema è completamente configurato per l’installazione della piattaforma container attraverso il repository di Docker.

Consiglio

In alternativa può essere utilizzato anche il test del repository di Docker. Richiamate il file dati /etc/apt/sources.list e sostituite la voce main con testing. È sconsigliato l’utilizzo dei test nei sistemi produttivi.

  1. Aggiornare l’indice dei pacchetti: prima che procediate con l’installazione del Docker Engine conviene aggiornare l’indice dei pacchetti del vostro sistema operativo. A questo scopo va riutilizzato il comando:
$ sudo apt-get update
  1. L’installazione di Docker dal repository: per caricare il Docker Engine dal repository di Docker e installarlo sul vostro sistema Ubuntu avete due possibilità. Se volete caricare la versione aggiornata del Docker Engine, utilizzate il seguente comando:
$ sudo apt-get -y install docker-engine

La piattaforma container è pronta per essere utilizzata non appena il processo di installazione sarà stato completato. Il Docker daemon si avvia automaticamente. Se prima dell’installazione di Docker era presente sul vostro sistema una versione vecchia della piattaforma container, questa verrà sostituita attraverso il software appena installato.

Non è assolutamente necessario installare sempre e per forza la versione più aggiornata, in alternativa si può optare per unaversione meno recente del Docker Engine. Nell’utilizzo per i sistemi produttivi, ad esempio, sono spesso preferite versioni meno recenti ma di comprovata affidabilità.

Con il seguente comando potete ottenere una panoramica delle versioni Docker disponibili per il vostro sistema:

$ apt-cache madison docker-engine

Per installare una versione specifica di Docker implementate unicamente la stringa della versione corrispondente nel comando di installazione (ad esempio 1.12.5-0), agganciandola al nome del pacchetto (che in questo caso sarà docker-engine) per mezzo del segno uguale.

$ sudo apt-get -y install docker-engine=<VERSION_STRING>

Installazione dal repository di Ubuntu

Gli utenti che non vogliono approfittare del repository di Docker hanno inoltre la possibilità di caricare la piattaforma container dal repository del sistema operativo.

Utilizzate la seguente riga di comando per installare il pacchetto Docker messo a disposizione dalla community di Ubuntu:

$ sudo apt-get install -y docker.io
Consiglio

Il pacchetto d’installazione della piattaforma container “dicker.io” non dovrebbe essere confuso con il pacchetto “docker”, un system tray per le applicazioni Docklet KDE3/GNOME2.

Collaudo

Una volta completato con successo il processo d’installazione, dovreste assicurarvi che la piattaforma container funzioni senza problemi. A questo scopo il team di sviluppo mette a disposizione un semplice container hello-world. Verificate l’installazione di Docker inserendo il seguente comando nel terminal Ubuntu e date conferma attraverso il testo [ENTER]:

$ sudo docker run hello-world 
N.B.

Il Docker daemon è collegato a un Unix socket (una estremità di un canale di comunicazione messo a disposizione dal sistema operativo), che nelle impostazioni di default è attribuito all’utente root. Perciò altri utenti possono utilizzare i codici Docker solamente per mezzo dell’attributo sudo. Questa impostazione può essere modificata creando un gruppo Unix con il nome docker e aggiungendo poi gli utenti desiderati. Altre informazioni a riguardo possono essere trovate nella documentazione ufficiale del progetto Docker.

Il comando docker run ordina al Docker daemon di cercare un container con il nome hello-world e di avviarlo. Se la vostra installazione Docker è stata configurata in maniera corretta dovreste ottenere una risposta corrispondente a quella presente nel successivo Screenshot.

Tale risposta dal terminal è da interpretare come segue: per eseguire il comando docker run hello-world, per prima cosa il Docker daemon controlla i file locali del vostro sistema alla ricerca della container Image corrispondente. Lanciando il container hello-world per la prima volta, la ricerca da parte del daemon non avrà successo. Otterrete infatti la comunicazione “Unable to find Image” (“non è stato possibile trovare l’immagine”).

$ sudo docker run hello-world
[sudo] password for osboxes:
Unable to find image 'hello-world:latest' locally

Se Docker non è in grado di trovare la Image desiderata all’interno del sistema locale, daemon avvia un procedimento di download, chiamato pulling, a partire dal repository di Docker.

latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

Al termine del download ricevete la comunicazione “Downloaded newer Image for hello-world:latest” (“Scaricata nuova Image per hello-world:latest). Dopodiché viene lanciato il container, contenente un semplice script hello-world con il seguente messaggio da parte dello sviluppatore:

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Tutto questo messaggio per voi significa che Docker è stato installato con successo e che funziona correttamente.

Disinstallare Docker

Esattamente con la stessa comodità con la quale avete installato il Docker Engine tramite il terminale, è possibile percorrere la stessa via in senso opposto e disinstallarlo. Se desiderate rimuovere il pacchetto Docker dal vostro Sistema digitate il seguente commando nel terminal di Ubuntu e confermate premendo il tasto [ENTER]:

 $ sudo apt-get purge docker-engine

Una volta lette le informazioni necessarie per la disinstallazione, vi sarà richiesto di confermare nuovamente il comando dato.

Per procedure premete il tasto [Y] (che sta per “Yes”) e confermate con il tasto [ENTER]. Se invece desiderate interrompere la disinstallazione, premete il tasto [N].

Image e container non vengono eliminati in automatico con la disinstallazione del Docker Engine. Per rimuoverli utilizzate il seguente comando:

$ sudo rm -rf /var/lib/docker

Se inoltre sono stati installati ulteriori file di configurazione, questi dovranno essere rimossi manualmente.

Lavorare con Docker

Vi siete assicurati che tutti gli elementi del Docker Engine siano stati installati e che funzioni senza problemi? Allora è giunta l’ora di iniziare a prendere la mano con le possibilità di utilizzo della piattaforma container. Qui di seguito potete scoprire come gestire il Docker Engine attraverso il terminale, quali possibilità vi offre il Docker Hub e perché i container di Docker potrebbero rivoluzionare il lavoro con le applicazioni.

Come gestire il Docker Engine

A partire dalla versione 16.04 Ubuntu utilizza il programma di backend systemd (forma abbreviata di System daemon”) per la gestione dei processi. systemd è un processo init adoperato anche per altre distribuzioni Linux come RHEL, CentOS o Fedora. Solitamente systemd riceve i Process IDentifier 1. Come primo processo del sistema, daemon è responsabile dell’avviamento di tutti gli altri processi, della loro supervisione e della loro terminazione. Con le versioni precedenti di Ubuntu (14.10 e più datate) il programma in background upstart si assume questa funzione.

Anche il Docker daemon può essere gestito attraverso systemd.  Nell’installazione standard la piattaforma container è configurata in modo che daemon venga avviato automaticamente con il System Boot. Questa preimpostazione può essere regolata individualmente attraverso lo strumento di riga di comando systemctl.

Con systemctl inviate comandi a systemd al fine di amministrare un processo o per interrogare lo stato dello stesso. La sintassi di un comando di questo tipo corrisponde al seguente schema:

systemctl [OPTION] [COMANDO]

Alcuni comandi si basano su determinate risorse (come ad esempio Docker). Nella terminologia systemd questi vengono descritti come Units (unità). In questo caso il comando deriva dalla disposizione e dal nome della Unit, ai quali bisogna far riferimento.

Se desiderate attivare (enable) o disattivare (disable) l’autostart del Docker daemon, utilizzate lo strumento di riga di comando systemctl come segue:

$ sudo systemctl enable docker
$ sudo systemctl disable docker

Lo strumento di riga di comando systemctl vi permette inoltre di interrogare lo stato della Unit:

$ sudo systemctl status docker

Se il Docker Engine è attivo sul vostro sistema Ubuntu sul terminale dovrebbe comparire una comunicazione corrispondente al seguente screenshot:

Se invece il Docker Engine è disattivo, sarà allora indicato come inactive (dead). In questo caso allora dovete avviare il Docker daemon manualmente per eseguire i container.

Se desiderate avviare, stoppare o riavviare manualmente il Docker Engine dovete comunicarlo a systemd con uno dei seguenti ordini.

Per avviare il daemon attualmente disattivato utilizzate systemctl in combinazione con il comando start:

$ sudo systemctl start docker

Per lo stop del Docker daemon va utilizzato allora il comando stop:

$ sudo systemctl stop docker

Il riavvio dell’Engine lo ottenete con il comando restart:

$ sudo systemctl restart docker

Come utilizzare il Docker Hub

Se il Docker Engine rappresenta il cuore della piattaforma container, allora Docker Hub è certamente l’anima del progetto open source, essendo infatti il luogo virtuale di incontro per la sua community. Nel registry basato su cloud gli utenti trovano tutto ciò di cui hanno bisogno perché l’installazione di Docker veda la luce.

Il servizio online offre diversi repository officiali con più di 100.000 app gratuite. Gli utenti hanno la possibilità di creare il proprio archivio di Image e di utilizzarlo comunemente con i propri gruppi di lavoro. Oltre al supporto professionale da parte del team di sviluppo, qui gli utenti meno esperti si mettono in contatto con la comunità degli utenti. Un forum per il supporto da parte della community è disponibile su GitHub.

Registrazione al Docker Hub

La registrazione al Docker Hub è completamente gratuita. Gli utenti necessitano unicamente di un indirizzo e-mail e del Docker ID che hanno scelto in precedenza. Questo funziona come repository namespace personale e permette l’accesso a tutti i servizi Docker. L’offerta oltre al Docker Hub prevede anche la Docker Cloud, il Docker Store e gli altri programmi beta selezionati. Inoltre il Docker ID permette anche di loggarsi al Docker Support Center così come al Docker Success Portal e a tutti i forum ufficiali di Docker.

Il processo di registrazione avviene in cinque passaggi:

  1. Scegliere un Docker ID: durante la registrazione scegliete un nome utente, che fungerà successivamente da vostro Docker ID personale. Il vostro nome utente per il Docker Hub e per tutti gli altri servizi di Docker deve essere composto da un minimo di 4 e un massimo di 30 caratteri e può contenere solamente numeri e lettere minuscole.

  2. Indicare il proprio indirizzo e-mail: fornite il vostro indirizzo e-mail attuale. Deve trattarsi di un indirizzo e-mail al quale avete accesso poiché via mail vi sarà chiesto di confermare la vostra richiesta di registrazione al Docker Hub.

  3. Scegliere la password: scegliete una password segreta contenente tra 6 e 128 caratteri.

  4. Invio della richiesta: cliccate su “sign up” per inoltrare la vostra richiesta di registrazione. Se il formulario è stato correttamente e interamente compilato, Docker vi invia un link per la verifica del vostro indirizzo e-mail alla casella postale da voi indicata.

  5. Conferma dell’indirizzo e-mail: confermate il vostro indirizzo e-mail attraverso un clic sul link di verifica.

In alternativa potete registrarvi attraverso il terminale del vostro sistema operativo grazie a docker login. Trovate una descrizione dettagliata del comando da eseguire nella documentazione di Docker.

A livello teorico il Docker Hub è disponibile a tutti gli utenti anche senza account e Docker ID. In questo caso tuttavia sarà possibile caricare esclusivamente Image dai repository pubblici. Un upload (push) delle proprie Image invece non è possibile senza Docker ID.

Creare repository nel Docker Hub

L’account gratuito del Docker Hub contiene un repository privato e vi offre la possibilità di creare qualsivoglia numero di repository pubblicamente accessibili. Doveste necessitare ulteriori repository privati, vi sarà possibile facendo l’upgrade a pagamento.

Qui di seguito riportiamo i passaggi necessari per la creazione di un repository:

  1. Scegliere il Namespace: ai nuovi repository viene attribuito in automatico il vostro Docker ID. In alternativa avete la possibilità di dare l’ID di un’organizzazione alla quale appartenete.

  2. Rinominare il repository: date un nome al repository appena creato.

  3. Aggiungere una descrizione: dotate il repository di una breve descrizione e di istruzioni all’uso chiare.

  4. Impostare la visibilità: decidete se volete che il vostro repository sia visibile pubblicamente (public) o se invece preferite che sia accessibile solamente a voi o alla vostra organizzazione (private).

 

Una volta compilati tutti i campi, confermate cliccando su “Create”.

Creare team e organizzazioni

Con il suo hub, Docker offre anche una piattaforma basata su cloud, tramite la quale è possibile gestire le Image create personalmente e condividerle con i propri gruppi di lavoro. Tali gruppi vengono chiamati organizzazioni nella terminologia di Docker. Esattamente come gli account utente le organizzazioni ottengono ID individuali, attraverso i quali possono scaricare e mettere a disposizione Image. I diritti e i ruoli interni a un’organizzazione possono essere assegnati attraverso “Teams”. Così ad esempio solamente gli utenti con lo stato di “Owners” (proprietari) possono creare nuovi repository, sia privati che pubblici, e assegnare internamente i diritti di accesso.

Anche i gruppi di lavoro vengono creati e gestiti attraverso la dashboard. Ulteriori informazioni sul funzionamento delle organizzazioni e dei team li trovate nella documentazione di Docker.

Come lavorare con Image e container

In quanto primo punto di riferimento per le risorse officiali di Docker, Docker Hub rappresenta il punto di partenza della nostra introduzione all’utilizzo delle Image e dei container. A questo scopo il team di sviluppo mette a disposizione la Image demo whalesay, che dovrebbe servire come base per il successivo Docker tutorial.

Scaricare le Docker Image

Potete trovare l’Image whalesay andando sulla pagina iniziale del Docker Hub e immettendo “whalesay” nella barra di ricerca a sinistra vicino al logo di Docker.

Tra i risultati di ricerca cliccate su quello con il nome di docker/whalesay, così da richiamare il repository pubblico per questa Image.

I repository di Docker sono sempre costruiti secondo lo stesso modello: nell’intestazione della pagina gli utenti trovano il nome dell’Image, la categoria alla quale appartiene il repository e la data dell’ultimo aggiornamento (last pushed).

Inoltre ogni repository di Docker offre un box con le seguenti informazioni:

  • Short Description: breve descrizione della risorsa
  • Full Description: approfondita descrizione, solitamente contenente anche le indicazioni sul suo utilizzo
  • Docker Pull Command: ordine di riga di comando per il download della Image dal repository (pull)
  • Owner: informazione relative al produttore del repository
  • Comments: sezione alla fine della pagina dedicate ai commenti

Dal box informativo del repository è possibile desumere che whalesay non è altro che una modifica di cosway, script open source in linguaggio Perl. Il programma sviluppato da Tony Monroe nel 1999 genera nella sua forma originale una grafica ASCII in forma di una mucca, che, accompagnata da un messaggio, appare nel terminal dell’utente.

Per scaricare docker/whalesay utilizzate il codice docker pull secondo il seguente schema:

$ docker pull [OPTIONS] NAME [:TAG|@DIGEST]

Il codice docker pull indica a daemon di caricare un‘Image dal repository, a stabilire quale siete voi indicandone il nome (NAME). Inoltre potete ordinare a Docker come tale comando debba essere eseguito (OPTIONS). Ancora, avete l’opzione di scegliere in merito ai Tag (:TAG) e gli univoci numeri di identificazione (@DIGEST), che permettono di scaricare una determinata versione della Image.

Ottenete una copia locale dell’Image docker/whalesay per mezzo del seguente ordine:

$ docker pull docker/whalesay

Solitamente questo passaggio può essere saltato. Se infatti desiderate avviare un container, Docker daemon si occupa di scaricare le Image automaticamente dal repository, Image che altrimenti non trovereste nel sistema locale.

Avviare una Docker Image come container

Per avviare una Docker Image utilizzate il comando docker run secondo lo schema successivo:

$ docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG...]

L’unica componente obbligatoria del comando docker run è la descrizione dell’Image Docker desiderata. Anche quando avviate i container avete la possibilità di definire le opzioni facoltative, i TAG e i DIGEST. Inoltre il comando docker run può essere combinato con altri comandi che vengono eseguiti non appena il container viene avviato. In questo caso il CMD definito dallo sviluppatore dell’Image (COMMAND, un comando che viene eseguito automaticamente all’avvio del container) viene sovrascritto. Ulteriori opzioni di configurazione possono essere definite tramite gli argomenti aggiuntivi (ARG…). Questi ad esempio permettono di aggiungere utenti o di trasmettere variabili ambientali (Environment-Variables).

Utilizzate la riga di comando

$ docker run docker/whalesay cowsay boo 

per scaricare l’Image come Perl script ed eseguirla in un container. Vedrete come whalesay si differenzi dallo script originale in un punto essenziale.

Eseguendo l’Image docker/whalesay lo script fornisce una grafica ASCII con la forma di una balena e un messaggio di testo “boo”, esattamente come accade con il comando cowsay.

Come nella fase di collaudo, inizialmente daemon cerca l’immagine desiderata nell’archivio file locale. Essendo che in questo caso non si trova alcun pacchetto omonimo, viene avviato un Pulling dal repository di Docker. Successivamente daemon fa partire il programma Cowsay modificato. Una volta che questo viene portato a termine il container termina automaticamente.

Esattamente come cowsay, anche whalesay di Docker offre la possibilità di intervenire durante l’esecuzione del programma per influenzare l’output del testo nel terminale. Mettete alla prova questa funzione sostituendo il “boo” del comando standard con una successione di caratteri a vostra scelta – ad esempio con quella che potrebbe corrispondere a una battuta relativa alla balena.

$ sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?

Mostrare tutte le Docker Image sul sistema locale

Se non siete sicuri di aver scaricato o meno una determinata Image, potete ottenere una panoramica di tutte le Image sul vostro sistema locale. Per farlo utilizzate la seguente riga di comando:

$ sudo docker image 

Il comando docker image vi fornisce tutte le Image locali con incluse anche le dimensioni dei file, l’ID e il tag.

Avviando un container l’Image che ne sta alla base viene scaricata come copia dal repository e salvata permanentemente sul vostro computer. In questo modo risparmiate tempo nel caso in cui in futuro vi ritroviate a dover riutilizzare quella stessa Image. Un nuovo download viene avviato soltanto se la fonte della Image è cambiata, ad esempio nel repository è disponibile una versione aggiornata.

Mostrare tutti i container sul sistema locale

Se desiderate ottenere una panoramica di tutti i container attualmente in esecuzione nel vostro sistema o che lo sono stati in passato, utilizzate la riga di comando docker ps in combinazione con l’opzione --all (in breve: -a):

$ sudo docker ps -a

Il terminal riporta informazioni come il container ID, la Image su cui si basa, il comando dato all’avvio del container, la data di esecuzione e lo status attuale.

Se desiderate che vi siano mostrati solamente i container attualmente in esecuzione sul vostro sistema, utilizzate docker ps senza ulteriori specifiche:

$ sudo docker ps

Attualmente non dovrebbe esserci alcun container in esecuzione sul vostro sistema.

Creare delle Docker Image

Dunque sapete come trovare le Image nel Docker Hub, come scaricarle e come eseguirle sul sistema che preferite, sul quale è stato precedentemente installato il Docker Engine. Con Docker non disponete solamente dell’offerta dell’app, per quanto ampia, del registry: la piattaforma vi offre anche ampie possibilità di creare delle Image vostre e di condividere queste con altri sviluppatori.

Già nei capitoli introduttivi di questo tutorial vi abbiamo illustrato che ogni Docker Image si basa su un cosiddetto Dockerfile. I Dockerfile possono presentarsi come una sorta di istruzioni per il montaggio delle Image. Si tratta di semplici file di testo contenenti tutte le indicazioni delle quali Docker ha bisogno per creare una Image. Nei prossimi passaggi scoprite come scrivere un Dockerfile e come istruire Docker a utilizzarlo come base per la vostra immagine.

  1. Creare una nuova directory: Il team di sviluppo di Docker consiglia di creare una nuova directory per ogni file Docker. Con Linux potete creare nuove directory facilmente attraverso il terminal. Utilizzate le seguenti righe di comando per creare una directory con il nome mydockerbuild:
$ mkdir mydockerbuild
  1. Navigare nella nuova directory: utilizzate il comando cd per navigare nella nuova directory.

$ cd mydockerbuild
  1. Creare un nuovo file di testo: il terminal vi serve anche per la creazione in totale comodità dei file di testo. A questo scopo utilizzate un editor come Nano o Vim. Create un file di testo con il nome di Dockerfile nella directory mydockerbuild
$ nano Dockerfile
  1. Scrivere un Dockerfile: i file di testo creati servono come modello per le Image create da voi. Invece di programmare l’Image da zero, in questo tutorial utilizziamo la Image demo docker/whalesay come modello di partenza. Questa può essere collegata al vostro Dockerfile per mezzo del comando FROM. Utilizzate il tag :latest per utilizzare l’ultima versione dell’Image.
FROM docker/whalesay:latest

Fino a questo momento docker/whalesay opera in maniera tale che siete voi a mettere le parole in bocca alla balena. Nel terminale compare infatti il testo che voi avete precedentemente immesso in combinazione con il comando all’avvio del container. Sarebbe di certo ancora più interessante se lo script fosse in grado di generare dei testi sempre nuovi in maniera del tutto automatica. Questo può essere realizzato con l’aiuto del programma fortunes, disponibile su ogni sistema Linux. La funzione di base di Fortunes consiste nel generare aforismi per i biglietti della fortuna e frasi divertenti. Utilizzate il seguente comando per aggiornare il vostro pacchetto index e per installare fortunes:

RUN apt-get -y update && apt-get install -y fortunes

Successivamente definite il CMD Statement. Questo viene eseguito dopo l’ordine RUN, purché non sia stato precedentemente sovrascritto (docker run Image CMD). Utilizzate

CMD /usr/games/fortune -a | cowsay

per lanciare il programma fortunes con l’opzione -a (“Scegli da tutti i database”) e far sì che la risposta vi venga mostrata attraverso il programma cowsay nel terminale.

 

Il vostro file Docker dovrebbe apparire come segue:

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

Fate attenzione: i comandi all’interno di un Dockerfile non sono più lunghi di una riga e iniziano sempre con una parola chiave. La sintassi che vi sta alla base è case-insensitive, il che significa che non fa differenza se scrivete in maiuscolo o minuscolo. Tuttavia con il tempo si è stabilita come prassi una scrittura maiuscola delle parole chiavi.

  1. Salvare i file di testo: Salvate sempre le modifiche apportate. Nel caso in cui doveste utilizzare l’editor Nano, utilizzate la combinazione di tasti [CTRL] + [O] e confermate premendo invio [ENTER]. Nano vi informerà che sono state trascritte tre righe nel file selezionato. Chiudete l’editor con la combinazione di tasti [CTRL] + [X].

  2. Creare una Image da un Dockerfile: per creare una Image da un Dockerfile, navigate per prima cosa nella directory in cui avete creato il file di testo. Il primo passo della creazione di una Image è il comando docker build. Se volete rinominare personalmente la Image o dotarla di un tag utilizzate l’opzione -t e successivamente la combinazione di caratteri desiderata e il tag. Il formato standard è name:tag.

Nell’esempio qui riportato deve essere creata una Image con il nome docker-whale:

$ docker build -t docker-whale .

Il punto successivo mostra che il Dockerfile che sta alla base si trova nella directory selezionata. Alternativamente avete la possibilità di indicare un percorso file o un URL che conduca alla fonte dei file.

Il processo build inizia non appena avete confermato il comando premendo il tasto [ENTER]. Per prima cosa il Docker daemon verifica se tutti i dati necessari per la creazione della Image siano presenti o meno. Nella terminologia di Docker questi dati prendono il nome di “Context”. Nel terminale appare il seguente messaggio:

Sending build context to Docker daemon 2.048 kB 

In seguito viene localizzata la Image docker/whalesay grazie al tag :latest:

Step 1/3 : FROM docker/whalesay:latest
   ---> 6b362a9f73eb

Se l’intero Context necessario per la creazione della Image è presente, il Docker daemon inizia i modelli di Image legati tramite FROM all’interno di un container temporaneo e passa poi al comando successivo contenuto nel Dockerfile. Nel nostro esempio si tratta di un comando RUN, finalizzato all’installazione del programma fortunes.

Step 2 : RUN apt-get -y update && apt-get install -y fortunes
   ---> Running in 80b81eda1a11
…etc. 

Al termine di ogni passaggio per la creazione di una Image, Docker vi fornisce un ID per il layer corrispondente (strato), creato durante il passaggio in questione. Dunque all’interno del Dockerfile ogni riga corrisponde a un layer della Image creata su di esso.

Terminato il comando RUN, il Docker daemon stoppa il container appositamente creato, lo elimina e avvia un nuovo container temporaneo per il layer del CMS Statement.

Step 3/3 : CMD /usr/games/fortune -a | cowsay
 ---> Running in c3ac46675e7a
 ---> 4419af61d32d
Removing intermediate container c3ac46675e7a

Una volta giunto al termine il processo di creazione, anche il terzo container temporaneamente avviato viene stoppato e cancellato. A questo punto Docker vi fornisce l’ID di una nuova Image:

Successfully built 4419af61d32d

La vostra Image appena creata la potete trovare nella panoramica delle Image localmente archiviate, con il nome di docker-whale.

$ sudo docker images

Per avviare un container dalla Image che avete appena creato, utilizzate il comando sudo docker run in combinazione con il nome della Image:

$ sudo docker run docker-whale 

Se l’immagine è stata creata senza errori dal Dockerfile, la vostra balena dovrebbe essere tutta bella pimpante e pronunciarsi in massime più o meno sagge. Fate attenzione al fatto che ogni volta che avviate il container da nuovo, viene generato un nuovo aforisma.

Taggare le Docker Image e caricarle nel Docker Hub

Se desiderate caricare la Image docker-whale da voi stessi creata sull’hub così da metterla a disposizione della intera community o di un determinato gruppo di lavoro, la dovete innanzitutto collegare con un repository con lo stesso nome, all’interno del vostro namespace personale. Questo passaggio prende il nome di tagging nella terminologia di Docker.

Qui di seguito vi guidiamo passo a passo durante la pubblicazione di una Image attraverso il Docker Hub:

  1. Creare il repository: loggatevi al Docker Hub con il vostro Docker ID e la password personale e create un repository pubblico con il nome docker-whale.
  1. Individuare l’Image ID: individuate l’ID della Image docker whale che avete creato con il comando docker Image.
$ sudo docker images
REPOSITORY      TAG     IMAGE ID       CREATED        SIZE
docker-whale    latest  4419af61d32d   22 hours ago   275 MB
hello-world     latest  48b5124b2768   6 weeks ago    1.84 kB
docker/whalesay latest  6b362a9f73eb   21 months ago  247 MB

Nel nostro caso l’Image ID è 4419af61d32d. Questo codice è necessario per il tagging nel prossimo passaggio.

  1. Taggare le Image: taggate la Image docker-whale grazie all’aiuto del comando docker tag, secondo lo schema qui di seguito:
$ sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]

secondo l’esempio riportato, il comando per il tagging si traduce in questo modo:

$ sudo docker tag 4419af61d32d myfreedockerid/docker-whale:latest

Per verificare che la vostra Image sia stata taggata correttamente, controllate tramite docker Images. Il nome del repository dovrebbe contenere dunque il vostro Docker ID.

  1. Caricare una Image: per caricare una Image dovete innanzitutto registrarvi sul Docker Hub utilizzando il comando docker login.
$ sudo docker login

A questo punto il terminale vi chiede di inserire il nome utente, corrispondente al Docker ID, e la rispettiva password.

Se la registrazione è avvenuta con successo utilizzate il comando docker push per caricare la Image nel repository appena creato.

$ sudo docker push myfreedockerid/docker-whale

Il processo di caricamento non dovrebbe durare più di qualche secondo. Lo stato attuale vi viene comunicato tramite il terminale.

Registratevi nel Docker Hub tramite il browser così da vedere la Image caricata.

Se desiderate caricare più di una Image per repository, utilizzate diversi tag, così da offrire le vostre Image in diverse versioni. Ad esempio:

myfreedockerid/docker-whale:latest
myfreedockerid/docker-whale:version1
myfreedockerid/docker-whale:version

Una panoramica delle varie versioni di una Image la potete trovare cliccando sulla tab “Tags” sul repository all’interno del Docker Hub.

Le Image di progetti diversi dovrebbero invece essere offerte in repository separati.

Se l’upload è avvenuto con successo, la Image da voi prodotta è globalmente disponibile a ogni utente Docker attraverso il repository pubblico.

  1. Collaudo:verificate il successo dell’upload provando a scaricare l’immagine uploadata.


Fate attenzione che va però prima cancellata la versione locale della Image per poterne scaricare una copia con lo stesso tag. Altrimenti Docker vi comunica che la Image desiderata è già presente nella versione aggiornata.

Per cancellare le Docker Image locali utilizzate il comando docker rmi in combinazione con il corrispettivo Image ID. Così facendo indicate tale Image come già posseduta attraverso docker Images. Nel caso in cui Docker vi informi di conflitti in corso – ad esempio perché un Image ID viene utilizzato su diversi repository o da un container – potete rafforzare il vostro comando con l’opzione –force (in breve: -f) e forzare così il processo.

sudo docker rmi -f 4419af61d32d

Fate sì che vi venga mostrato nuovamente una panoramica di tutte le Image locali:

$ sudo docker Images

Gli elementi cancellati non dovrebbero più comparire nella lista del terminale. Utilizzate il comando pull presente nel repository per scaricare una nuova copia della Image dal Docker Hub:

$ sudo docker pull myfreedockerid/docker-whale

Da utenti inesperti a professionisti di Docker

Nel nostro Docker tutorial vi abbiamo mostrato come l’agile piattaforma container si distingua considerabilmente in alcuni aspetti dalla classica virtualizzazione hardware. Docker punta su container software e aggira così l’overhead di un sistema operativo virtuale guest. I contenitori condividono il kernel di un host comune e, sotto forma di processi isolati all’interno dello spazio utente, creano tutto ciò che è necessario per il runtime di applicazioni. Il risultato è il massimo della portabilità. Con Docker è possibile eseguire uno stesso container software su più piattaforme su diversi sistemi e infrastrutture. I prerequisiti sono unicamente l’installazione del Docker Engine e l’accesso al Docker Hub su cloud.

Quanto in fretta sia possibile riuscire a realizzare una piattaforma container capace di funzionare ve lo abbiamo dimostrato nell’esempio relativo alla popolare distribuzione di Linux, Ubuntu. Avete infatti imparato come fare a installare e impostare Docker con Ubuntu, come scaricare applicazioni sotto forma di Image dal Docker Hub e lanciarle nei container in locale. Ancora avete imparato a scrivere di vostro pugno un Dockerfile, ad utilizzarlo per creare una Image tutta vostra e metterlo a disposizione degli altri utenti Docker attraverso il servizio cloud. Arrivati a questo punto potete dire di aver preso confidenza con le basi della piattaforma container.

Inutile negare che l’universo Docker è ben più ampio di così. Con il tempo il prominente progetto open source si è trasformato in un ecosistemacon vita propria. Nel contempo però molti concorrenti hanno proposto soluzioni software alternative. Docker risulta particolarmente interessante per gli amministratori nel caso in cui debbano gestire applicazioni complesse in parallelo su più container su diversi sistemi. In tal caso Docker offre diverse funzioni per l’orchestrazione di un cluster di questo tipo. Se desiderate ottenere maggiori informazioni su questo tema potete leggere l’articolo di approfondimento in merito agli strumenti di Docker Swarm e Compose.


Prepara il tuo business per il successo online
Abbiamo ridotto ulteriormente i prezzi dei nostri strumenti pensati
per incrementare le tue vendite di fine anno.
Risparmia fino al 75%