Docker è una tecnologia di containerizzazione che ti consente di creare, testare e distribuire rapidamente applicazioni come container portatili e autosufficienti che possono essere eseguiti praticamente ovunque.
In questo tutorial, analizzeremo come installare Docker CE su CentOS 7 ed esploreremo i concetti e i comandi di base di Docker.
Prerequisiti #
Prima di procedere con questo tutorial, assicurati che siano soddisfatti i seguenti prerequisiti:
- Server CentOS 7
- Sei loggato come utente non root con privilegi sudo. Consulta questa guida su come creare un nuovo utente sudo.
Installa Docker su CentOS #
Sebbene il pacchetto Docker sia disponibile nel repository ufficiale di CentOS 7, potrebbe non essere sempre l'ultima versione. L'approccio consigliato è installare Docker dai repository di Docker.
Per installare Docker sul tuo server CentOS 7, procedi nel seguente modo:
-
Inizia aggiornando i pacchetti di sistema e installa le dipendenze richieste:
sudo yum update
sudo yum install yum-utils device-mapper-persistent-data lvm2
-
Quindi, esegui il seguente comando che aggiungerà il repository stabile Docker al tuo sistema:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
Ora che il repository Docker è abilitato, installa l'ultima versione di Docker CE (Community Edition) utilizzando yum digitando:
sudo yum install docker-ce
-
Una volta installato il pacchetto Docker, avvia il demone Docker e abilitalo per l'avvio automatico all'avvio:
sudo systemctl start docker
sudo systemctl enable docker
-
Per verificare che il servizio Docker sia in esecuzione, digita:
sudo systemctl status docker
L'output dovrebbe essere simile a questo:
● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2018-10-31 08:51:20 UTC; 7s ago Docs: https://docs.docker.com Main PID: 2492 (dockerd) CGroup: /system.slice/docker.service ├─2492 /usr/bin/dockerd └─2498 docker-containerd --config /var/run/docker/containerd/containerd.toml
-
Al momento della scrittura, l'attuale versione stabile di Docker è
18.06.1
, per stampare la versione Docker digita:docker -v
Docker version 18.06.1-ce, build e68fc7a
Esecuzione del comando Docker senza Sudo #
Per impostazione predefinita, la gestione di Docker richiede privilegi di amministratore. Se desideri eseguire i comandi Docker come utente non root senza anteporre sudo
devi aggiungere il tuo utente al gruppo Docker che viene creato durante l'installazione del pacchetto Docker CE. Puoi farlo digitando:
sudo usermod -aG docker $USER
$USER
è una variabile di ambiente che contiene il tuo nome utente.
Esci e accedi nuovamente in modo che l'appartenenza al gruppo venga aggiornata.
Per verificare che Docker sia installato correttamente e che tu possa eseguire comandi docker senza sudo, emetti il seguente comando che scaricherà un'immagine di prova, eseguirà in un contenitore, stamperà un messaggio "Hello from Docker" ed esci:
docker container run hello-world
L'output dovrebbe essere simile al seguente:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Interfaccia a riga di comando Docker #
Ora che abbiamo un'installazione Docker funzionante, esaminiamo la sintassi di base della CLI Docker.
La riga di comando della finestra mobile ha la forma seguente:
docker [option] [subcommand] [arguments]
Puoi elencare tutti i comandi disponibili digitando docker
senza parametri:
docker
Se hai bisogno di ulteriore aiuto su qualsiasi [subcommand]
, digita:
docker [subcommand] --help
Immagini Docker #
Un'immagine Docker è composta da una serie di livelli che rappresentano le istruzioni nel Dockerfile dell'immagine che costituiscono un'applicazione software eseguibile. Un'immagine è un file binario immutabile che include l'applicazione e tutte le altre dipendenze come binari, librerie e istruzioni necessarie per eseguire l'applicazione. In breve, un'immagine Docker è essenzialmente un'istantanea di un container Docker.
Docker Hub è un servizio di registro basato su cloud che, tra le altre funzionalità, viene utilizzato per mantenere le immagini Docker in un repository pubblico o privato.
Per cercare un'immagine nel repository Docker Hub, usa semplicemente search
sottocomando. Ad esempio, per cercare l'immagine CentOS, esegui:
docker search centos
L'output dovrebbe essere simile al seguente:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 4257 [OK]
ansible/centos7-ansible Ansible on Centos7 109 [OK]
jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_… 94 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 52 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK]
tutum/centos Simple CentOS docker image with SSH access 39
Come puoi vedere i risultati della ricerca stampano una tabella con cinque colonne, NAME
, DESCRIPTION
, STARS
, OFFICIAL
e AUTOMATED
. L'immagine ufficiale è un'immagine che Docker sviluppa in collaborazione con i partner a monte.
Se vogliamo scaricare la build ufficiale di CentOS 7, possiamo farlo usando il image pull
sottocomando:
docker image pull centos
Using default tag: latest
latest: Pulling from library/centos
469cfcc7a4b3: Pull complete
Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Status: Downloaded newer image for centos:latest
A seconda della velocità di Internet, il download potrebbe richiedere alcuni secondi o alcuni minuti. Una volta scaricata l'immagine, possiamo elencare le immagini con:
docker image ls
L'output dovrebbe essere simile al seguente:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest e38bc07ac18e 3 weeks ago 1.85kB
centos latest e934aafc2206 4 weeks ago 199MB
Se per qualche motivo vuoi eliminare un'immagine puoi farlo con image rm [image_name]
sottocomando:
docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Deleted: sha256:e934aafc22064b7322c0250f1e32e5ce93b2d19b356f4537f5864bd102e8531f
Deleted: sha256:43e653f84b79ba52711b0f726ff5a7fd1162ae9df4be76ca1de8370b8bbf9bb0
Contenitori Docker #
Un'istanza di un'immagine è chiamata contenitore. Un contenitore rappresenta un runtime per una singola applicazione, processo o servizio.
Potrebbe non essere il confronto più appropriato, ma se sei un programmatore puoi pensare a un'immagine Docker come a una classe ea un container Docker come a un'istanza di una classe.
Possiamo avviare, fermare, rimuovere e gestire un container con il docker container
sottocomando.
Il comando seguente avvierà un contenitore Docker basato sull'immagine CentoOS. Se non hai l'immagine in locale, la scaricherà prima:
docker container run centos
A prima vista, può sembrare che non sia successo nulla. Ebbene, non è vero. Il contenitore CentOS si interrompe immediatamente dopo l'avvio perché non ha un processo di lunga durata e non abbiamo fornito alcun comando, quindi il contenitore si è avviato, ha eseguito un comando vuoto e quindi è uscito.
L'interruttore -it
ci permette di interagire con il container tramite la riga di comando. Per avviare un tipo di contenitore interattivo:
docker container run -it centos /bin/bash
Come puoi vedere dall'output, una volta avviato il contenitore, il prompt dei comandi viene modificato, il che significa che ora stai lavorando dall'interno del contenitore:
[root@719ef9304412 /]#
Per elencare i contenitori in esecuzione:, digita:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79ab8e16d567 centos "/bin/bash" 22 minutes ago Up 22 minutes ecstatic_ardinghelli
Se non hai contenitori in esecuzione, l'output sarà vuoto.
Per visualizzare sia i contenitori in esecuzione che quelli interrotti, passagli il -a
interruttore:
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79ab8e16d567 centos "/bin/bash" 22 minutes ago Up 22 minutes ecstatic_ardinghelli
c55680af670c centos "/bin/bash" 30 minutes ago Exited (0) 30 minutes ago modest_hawking
c6a147d1bc8a hello-world "/hello" 20 hours ago Exited (0) 20 hours ago sleepy_shannon
Per eliminare uno o più contenitori basta copiare l'ID contenitore (o gli ID) dall'alto e incollarli dopo il container rm
sottocomando:
docker container rm c55680af670c