Introduzione
Docker è una tecnologia di containerizzazione che consente di creare, testare e distribuire rapidamente applicazioni come container portatili e autosufficienti che possono essere eseguiti praticamente ovunque.
In questo tutorial, vedremo come installare Docker CE su CentOS 8 ed esploreremo i concetti e i comandi di base di Docker.
Prerequisiti
Prima di procedere con questa esercitazione, assicurarsi che siano soddisfatti i seguenti prerequisiti:
- Hai effettuato l'accesso come utente non root 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:
ssh root@IP_DEL_SERVER
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:
ssh nome_utente@IP_DEL_SERVER
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:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Installare Docker su CentOS
Sebbene il pacchetto Docker sia disponibile nel repository ufficiale CentOS 8, potrebbe non essere sempre l'ultima versione. L'approccio consigliato è installare Docker dai repository Docker.
Per installare Docker sul tuo server CentOS 8, 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 comando seguente 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) usando yum digitando:
sudo yum install docker-ce
Potresti ricevere un output simile al seguente:
CentOS-8 - AppStream 113 kB/s | 4.3 kB 00:00
CentOS-8 - Base 12 kB/s | 3.9 kB 00:00
CentOS-8 - Extras 49 kB/s | 1.5 kB 00:00
Docker CE Stable - x86_64 201 kB/s | 21 kB 00:00
Error:
Problem: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Quindi installare Docker Ce con il seguente comando che permette di evitare i pacchetti non più disponibili o corrotti:
sudo yum -y install docker-ce --nobest
Una volta installato il pacchetto Docker, avvia il daemon Docker e abilitalo ad avviarsi automaticamente all'avvio:
sudo systemctl start docker
sudo systemctl enable docker
Per verificare che il servizio Docker sia in esecuzione, digitare:
sudo systemctl status docker
L'output dovrebbe assomigliare 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 2020-01-15 00:06:26 CET; 4s ago
Docs: https://docs.docker.com
Main PID: 11075 (dockerd)
Tasks: 18
Memory: 51.6M
CGroup: /system.slice/docker.service
├─11075 /usr/bin/dockerd -H fd://
└─11091 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
Al momento in cui scrivo, l'attuale versione stabile di Docker è 19.03.5
, per stampare il tipo di versione Docker:
docker -v
Docker version 19.03.5, build 633a0ea
Eseguire il comando Docker senza Sudo
Per impostazione predefinita, Docker richiede i privilegi di amministratore. Se si desidera eseguire i comandi Docker come utente non root senza anteporre sudo
è necessario aggiungere l'utente al gruppo docker 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.
Disconnettersi e riconnettersi in modo da aggiornare l'appartenenza al gruppo.
Per verificare che Docker sia installato correttamente e che sia possibile eseguire i comandi docker senza sudo, emettere il seguente comando che scaricherà un'immagine di prova, eseguirà in un contenitore e stamperà un messaggio "Hello from Docker" ed esce:
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
1b930d010525: Pull complete
Digest: sha256:d1668a9a1f5b42ed3f46b70b9cb7c88fd8bdc8a2d73509bb0041cf436018fbf5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Interfaccia della riga di comando Docker
Ora che abbiamo un'installazione Docker funzionante, passiamo alla sintassi di base della CLI Docker.
La riga di comando della finestra mobile assume 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]
, basta digitare:
docker [subcommand] --help
Immagini Docker
Un immagine Docker è costituita da una serie di strati che rappresentano istruzioni nella dell'immagine Dockerfile che compongono 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 contenitore Docker.
Docker Hub è un servizio di registro basato su cloud che tra le altre funzionalità viene utilizzato per conservare le immagini Docker in un repository pubblico o privato.
Per cercare un'immagine nel repository Docker Hub basta usare il sottocomando search
. Ad esempio, per cercare l'immagine CentOS, eseguire:
docker search centos
L'output dovrebbe essere simile al seguente:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5770 [OK]
ansible/centos7-ansible Ansible on Centos7 126 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 114 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 108 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 67
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 57 [OK]
tutum/centos Simple CentOS docker image with SSH access 44
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 39
kinogmt/centos-ssh CentOS with SSH 29 [OK]
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 10
guyton/centos6 From official centos6 container with full up… 9 [OK]
nathonfowlie/centos-jre Latest CentOS image with the JRE pre-install… 8 [OK]
drecom/centos-ruby centos ruby 6 [OK]
....
Come si può vedere i risultati delle ricerche stampe una tabella con cinque colonne, NAME
, DESCRIPTION
, STARS
, OFFICIAL
e AUTOMATED
. L'immagine ufficiale è un'immagine che Docker sviluppa in collaborazione con partner.
Se vogliamo scaricare la build ufficiale di CentOS 8, possiamo farlo utilizzando il sottocomando image pull
:
docker image pull centos
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/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
centos latest 0f3e07c0138f 3 months ago 220MB
hello-world latest fce289e99eb9 12 months ago 1.84kB
Se per qualche motivo vuoi eliminare un'immagine puoi farlo con il sottocomando image rm [image_name]
:
docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Deleted: sha256:0f3e07c0138fbe05abcb7a9cc7d63d9bd4c980c3f61fea5efa32e7c4217ef4da
Deleted: sha256:9e607bb861a7d58bece26dd2c02874beedd6a097c1b6eca5255d5eb0d2236983
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 classe e contenitore Docker come istanza di una classe.
Possiamo avviare, arrestare, rimuovere e gestire un contenitore con il sottocomando docker container
.
Il comando seguente avvierà un contenitore Docker basato sull'immagine CentoOS. Se non hai l'immagine localmente, la scaricherà prima:
docker container run centos
A prima vista, può sembrarti che non sia successo nulla. Il contenitore CentOS si arresta 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'opzione -it
ci consente di interagire con il contenitore 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@31256e550edc /]#
Per elencare i contenitori in esecuzione, digitare:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d11ac462fb5 centos "/bin/bash" 6 seconds ago Up 5 seconds angry_volhard
Se non si dispone di contenitori in esecuzione, l'output sarà vuoto.
Per visualizzare sia i contenitori in esecuzione che quelli fermati, usare l'opzione -a
:
docker container ls -a
L'output dovrebbe essere simile al seguente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d11ac462fb5 centos "/bin/bash" 19 seconds ago Up 19 seconds angry_volhard
31256e550edc centos "/bin/bash" 41 seconds ago Exited (127) 27 seconds ago epic_hypatia
df0b941a0a14 centos "/bin/bash" 52 seconds ago Exited (0) 51 seconds ago nostalgic_goldwasser
34912fcfaf8e hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago stupefied_rosalind
Per eliminare uno o più contenitori è sufficiente copiare l'ID contenitore (o gli ID) e incollarli dopo il sottocomando container rm
,in questo modo:
docker container rm 34912fcfaf8e
Conclusione
Hai imparato come installare Docker sul tuo server CentOS 8 e come scaricare le immagini Docker e gestire i contenitori Docker. Potresti anche leggere informazioni su Docker Compose, che ti consente di definire ed eseguire applicazioni Docker multi-container.