Introduzione a Docker
Updated at: 13/11/2017


Rapida Guida ai Docker

Installazione

per installare Docker su Linux occorre agganciare il repository corretto ad apt-get. Per info dettagliate seleziona la piattaforma qui

PlatformDocker CE x86_64Docker CE ARMDocker CE IBM Z (s390x)Docker EE x86_64Docker EE IBM Z (s390x)
CentOSyes  yes 
Debianyesyes   
Fedorayes    
Microsoft Windows Server 2016   yes 
Oracle Linux   yes 
Red Hat Enterprise Linux   yesyes
SUSE Linux Enterprise Server   yesyes
Ubuntuyesyesyesyesyes

 nel caso i link siano rotti, cercare Docker CE.

Installazione su Debian

eseguire i seguenti comandi da utente root (o sudo):

apt-get update

apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common

curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
   $(lsb_release -cs) \
   stable"

apt-get update

apt-get install docker-ce=<VERSION STRING>


per vedere le versioni disponibili di Docker, eseguire il comando:

apt-cache madison docker-ce


Concetti Base

la prima cosa da valutare è se si vuole containerizzare l'esecuzione di una singola applicazione di uso comune (apache, python, ffmpeg/ffserver,tomcat...) o un sistema complesso. 

Per partire si può cercare un container già disponibile che corrisponda alle esigenze. Questa ricerca può essere fatta da linea di comando con docker search <chiave di ricerca> o dal sito https://store.docker.com.


N.B.: in caso di utilizzo di software di uso comune, considerare l'utilizzo del Docker marcato come Official, se disponibile


Il nome del pacchetto sarà tipicamente della forma docker_name/tag. Nei docker ufficiali di solito il docker_name indica il programma ed il tag viene usato per distribuire le differenti versioni, mentre per i file creati dalla community il docker_name è il nome utente ed il tag il progetto specifico (tipo github o composer).


Una volta identificato, il pacchetto necessario si può scaricare con:

docker pull docker_name/tag


Questo va ad aggiungere l'immagine del container al repository locale, visibile tramite docker images.

Il repository può essere modificato editando il file /etc/default/docker, scommentando il parametro DOCKER_OPTS ed aggiungendo il flag -d /path/del/repository. 

Di seguito alcuni comandi

//Per visualizzare la lista delle immagini
docker images
//oppure
docker image ls

//Per eliminare un'immagine dal repository
docker image rm username/tag


Dopo aver scaricato l'immagine si può creare un container tramite il comando docker run (e alcune flag utili):

//Per lanciare un container come Daemon
docker run -d -p [PORTA_ESTERNA]:[PORTA_DEL_CONTAINER] --name nome_container docker_name/tag

//Per lanciare un container in modalità interattiva
docker run -i -t -p [PORTA_ESTERNA]:[PORTA_DEL_CONTAINER] --name nome_container docker_name/tag

FLAG UTILI
--entrypoint=[comando]                                     Permette di modificare il comando di default del docker. ad esempio per lanciare una shell:   --entrypoint=/bin/sh

-v /host/absolute/path:/container/absolute/path            Permette di montare un path dell'host all'interno del container (ATTENZIONE!)

--net vnet_name                                            Aggiunge il container ad una lan virtuale. I container nella stessa lan virtuale possono comunicare 
                                                           senza dover definire le porte disponibili.
                                                           La rete deve essere stata creata con il comando docker network create vnet_name (docker network rm per eliminare)


Una volta creato il container, questo può essere controllato con i comandi:

docker stop nome_container
docker stae nome_container

Per  vedere l'elenco dei container (ed eventualmente eliminarli):

//lista container attivi (in esecuzione,include i nomi dei container)
docker container ls

//lista container presenti (non cancellati)
docker container ls -a [--no-trunc]

//per cancellare un container disattivato
docker container rm nome_container


Dockerfile

Le operazioni di deploy possono essere automatizzate creando un Dockerfile, dove è possibile definire le operazioni per la creazione di un immagine a partire da immagini precedenti.

//Esempio di Dockerfile

//L'immagine verrà preparata a partire dall'immagine busybox
FROM busybox

//qui viene definita una variabile del Dockerfile
ENV foo /bar

//Il container utilizzerà la cartella seguente come cartella corrente
WORKDIR ${foo}   # WORKDIR /bar

//scelgo di copiare il contenuto della cartella dell'host in cui è presente questo Dockerfile (.) all'interno della cartella $foo del container
//NB: i file vengono copiati all'interno. qualsiasi modifica all'interno del container non verrà trasportata all'esterno
ADD . $foo       # ADD . /bar

//qui viene definito il comando di default del container, che verrà esequito all'avvio
CMD echo $foo

Una volta definito il Dockerfile, si può costruire l'immagine tramite il comando:

docker build -t image_name /path/to/dockerfile/location/



Per documentazione sui Dockerfile, vedi qui: https://docs.docker.com/engine/reference/builder/