Introduzione
Docker è un'software che semplifica il processo di gestione dei processi delle applicazioni nei "contenitori". I contenitori consentono di eseguire le applicazioni in processi isolati dalle risorse. Sono simili alle macchine virtuali.
In questo tutorial, installeremo e utilizzeremo Docker Community Edition (CE) su Ubuntu 18.04 LTS.
Se il vostro intento è installare e configurare Docker su di un server in remoto continuate a leggere, altrimenti se volete installare Docker sul vostro computer locale saltate il primo paragrafo "Connessione al Server" e leggere il successivo.
Connessione al Server
Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno della password per l'autenticazione.
Per connettersi al server come utente root digitare questo comando:
ssh root@IP_DEL_SERVER
Successivamente vi verrà chiesto di 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 il primo parametro:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Successivamente vi verrà chiesto di inserire la password del vostro utente.
Siete ora connessi al vostro server, siete pronti per iniziare l'installazione di Docker.
Installare Docker
Docker è disponibile nel repository ufficiale di Ubuntu, ma potrebbe non essere la versione più recente.
Per utilizzare la versione più recente, installeremo Docker dal repository Docker ufficiale.
Assicuriamoci che i pacchetti nel sistema siano aggiornati alle ultime versioni disponibili:
sudo apt update
Installare alcuni pacchetti necessari che consentono a apt di utilizzare i pacchetti su HTTPS:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Aggiungere la chiave GPG per il repository Docker ufficiale:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Aggiungi il repository Docker:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
Successivamente, aggiornare il database con repository appena aggiunto:
sudo apt update
Assicurati di essere installato dal repository Docker invece del repository predefinito di Ubuntu:
apt-cache policy docker-ce
Dovreste visualizzare un messaggio di output simile al seguente:
docker-ce:
Installed: (none)
Candidate: 5:18.09.0~3-0~ubuntu-bionic
Version table:
*** 5:18.09.0~3-0~ubuntu-bionic 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Infine, installare Docker:
sudo apt install docker-ce
Per controllare lo stato di Docker:
sudo systemctl status docker
Dovreste visualizzare un messaggio di output simile al seguente:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-12-18 23:47:13 CET; 3s ago
Docs: https://docs.docker.com
Main PID: 1489 (dockerd)
Tasks: 8
CGroup: /system.slice/docker.service
└─1489 /usr/bin/dockerd -H unix://
Docker è correttamente installato.
Eseguire comandi Docker senza sudo
Per impostazione predefinita, il comando Docker può essere eseguito solo dall'utente root o da un utente nel gruppo docker, che viene creato automaticamente durante il processo di installazione di Docker.
Se si desidera evitare di digitare sudo ogni volta che si esegue il comando docker, aggiungere il proprio nome utente al gruppo docker in questo modo:
sudo usermod -aG docker ${USER}
Per applicare le modifiche al gruppo, disconnettersi dal server e rientrare, oppure digitare dare il seguente comando:
su - ${USER}
Ti verrà richiesto di inserire la password dell'utente per continuare.
Conferma che il tuo utente è stato aggiunto al gruppo docker:
id -nG
Dovreste ricevere un messaggio di output simile al seguente:
noviello sudo docker
Se desideri aggiungere un altro utente al gruppo docker, con il quale non ti sei connesso, dare il seguente comando:
sudo usermod -aG docker nome_utente
Comandi Docker
Utilizzeremo un utente nel gruppo docker, quindi non avremo bisogno di utilizzare sudo. Altrimenti se non si vuole utilizzare un utente del docker aggiungere il comando con sudo.
La sintassi generale è la seguente:
docker [option] [command] [arguments]
Per visualizzare tutti i sottocomandi disponibili:
docker
Dovreste ricevere un messaggio di output simile al seguente:
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
Per visualizzare le informazioni di sistema su Docker, utilizzare:
docker info
Lavorare con le immagini Docker
I contenitori Docker sono costruiti con immagini Docker. Per impostazione predefinita, Docker estrae queste immagini da Docker Hub, un registro Docker gestito da Docker, la società dietro il progetto Docker. Chiunque può ospitare le loro immagini Docker su Docker Hub.
Per verificare se è possibile accedere e scaricare immagini da Docker Hub, digitare:
docker run hello-world
Dovreste ricevere un messaggio di output simile al seguente:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Docker inizialmente non è in grado di trovare l'immagine hello-world localmente, quindi ha scaricato l'immagine da Docker Hub, che è il repository predefinito. Una volta che l'immagine è stata scaricata, Docker ha creato un contenitore dall'immagine e l'applicazione all'interno del contenitore è stata eseguita, visualizzando il messaggio.
È possibile cercare immagini disponibili su Docker Hub utilizzando il comando docker con il sottocomando di ricerca. Ad esempio, per cercare l'immagine di Ubuntu, digitare:
docker search ubuntu
Lo script eseguirà la scansione di Docker Hub e restituirà un elenco di tutte le immagini il cui nome corrisponde alla stringa di ricerca.
In questo caso dovreste ricevere un messaggio di output simile al seguente:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 8984 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 258 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 190 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 139 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 95 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 93 [OK]
neurodebian NeuroDebian provides neuroscience research s… 55 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 48 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 40 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 18
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 16
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 7 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 5 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 5 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 2
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
smartentry/ubuntu ubuntu with smartentry 1 [OK]
paasmule/bosh-tools-ubuntu Ubuntu based bosh-cli 0 [OK]
ossobv/ubuntu Custom ubuntu image from scratch (based on o… 0
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
Nella colonna OFFICIAL, OK indica un'immagine creata e supportata dalla società dietro il progetto. Una volta identificata l'immagine che vorresti usare, puoi scaricarla sul tuo computer usando il sottocomando pull.
Eseguire il seguente comando per scaricare l'immagine ufficiale di ubuntu sul proprio computer o server:
docker pull ubuntu
Dovreste ricevere un messaggio di output simile al seguente:
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
Dopo aver scaricato un'immagine, è possibile eseguire un contenitore utilizzando l'immagine scaricata con il sottocomando run.
Per vedere le immagini che sono state scaricate sul vostro computer o server, digitare:
docker images
Dovreste ricevere un messaggio di output simile al seguente:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 93fd78260bd1 4 weeks ago 86.2MB
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
Come vedremo più avanti in questo tutorial, le immagini che utilizzi per eseguire i contenitori possono essere modificate e utilizzate per generare nuove immagini, che possono quindi essere caricate (spinto è il termine tecnico) su Docker Hub o altri registri di Docker.
Le immagini possono essere modificate e utilizzate per generare nuove immagini, che possono quindi essere caricate (push) su Docker Hub o altri registri di Docker.
Docker Container
Il contenitore hello-world eseguito nel passaggio precedente è un esempio di contenitore che viene eseguito ed e chiuso automaticamente dopo l'emissione di un messaggio di prova. I contenitori possono essere più complessi e possono essere interattivi.
Provare il contenitore dell'immagine di Ubuntu:
docker run -it ubuntu
Il prompt dei comandi dovrebbe cambiare per riflettere il fatto che ci vi trovate all'interno del contenitore. Dovrebbe avere un formato simile al seguente:
root@3256a08e3b3c:/#
I seguenti numeri 3256a08e3b3c corrispondono all'ID del contenitore.
Ora è possibile eseguire qualsiasi comando all'interno del contenitore. Ad esempio, aggiorniamo il database del pacchetto all'interno del contenitore. Non avrete bisogno di anteporre alcun comando con sudo, perché si sta operando all'interno del contenitore come utente root:
apt update
Quindi è possibile installare qualsiasi applicazione come per esempio Node.js:
apt install nodejs
Verificare la versione di nodejs appena installata:
nodejs -v
Dovreste ricevere un messaggio di output simile al seguente:
v8.10.0
Qualsiasi modifica apportata all'interno del contenitore si applica solo a quel contenitore.
Per uscire dal contenitore, digitare exit al prompt.
Diamo un'occhiata alla prossima gestione dei container sul nostro sistema.
Gestire un contenitore Docker
Per visualizzare tutti i contenitori attivi:
docker ps
Dovreste ricevere un messaggio di output simile al seguente:
CONTAINER ID IMAGE COMMAND CREATED
Abbiamo avviato due contenitori, hello-world e l'immagine di ubuntu. Entrambi i contenitori non sono più in esecuzione, ma esistono ancora sul tuo sistema.
Per visualizzare tutti i contenitori, attivi e inattivi, aggiungere l'opzione -a al comando precedente:
docker ps -a
Dovreste ricevere un messaggio di output simile al seguente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e917bd03bad3 hello-world "/hello" 29 minutes ago Exited (0) 29 minutes ago jovial_wozniak
3256a08e3b3c ubuntu "/bin/bash" 2 hours ago Exited (0) 2 hours ago stoic_napier
Per visualizzare l'ultimo contenitore che hai creato, utilizzare il comando -l:
Per avviare un container interrotto, utilizzare docker start, seguito dall'ID contenitore o dal nome del contenitore. Avviare il contenitore basato su Ubuntu con l'ID di 3256a08e3b3c:
docker start 3256a08e3b3c
Il contenitore verrà avviato e potrete utilizzare docker ps per vedere il suo stato.
Per arrestare un container in esecuzione, utilizzare la docker stop, seguito dall'ID contenitore o dal nome.
Arrestare il contenitore utilizzando il nome associato:
docker stop stoic_napier
Per rimuovere un contenitore, è possibile utilizzare il comando docker rm e associare l'ID oppure il nome:
docker rm stoic_napier
Conclusione
L'installazione e la configurazione di Docker su Ubuntu 18.04 LTS è terminata.