Docker consente l’esecuzione di applicazioni con le relative dipendenze in un container virtuale isolato dal sistema operativo. Di fatto le applicazioni possono coincidere con un sistema operativo quasi completo evitando in questo modo la necessità di una macchina virtuale. Aspetti positivi: minori risorse, maggior velocità di avvio, evitare i problemi di gestione di una macchina virtuale. Aspetto negativo l’isolamento rnon è totale e le risorse a disposizione del container sono meno garantite. Docker che si esegue in modo nativo su macchine Linux gira anche su OS e Windows.
Installazione di Docker 1.12.xx in Debian Jessie
L’ultima versione di Docker disponibile è la 1.12.2-0. L’installazione di Docker richiede una versione a 64bit di Debian e un kernel versione > 3.10. La guida ufficiale all’installazione su debian di docker è disponibile all’indirizzo https://docs.docker.com/engine/installation/linux/debian/
Il kernel può essere controllato utilizzando uname.
Passare a super user per le varie fasi dell’istallazione
$ su
$ uname -r
3.16.0-4-amd64
L’installazione della versione 12.10 avverrà via apt-get dal repository di Docker il repository corrente infatti ospita una versione decisamente obsoleta.
La versione datata può essere evidenziata con apt-cache policy
$ apt-cache policy docker
docker:
Installed: (none)
Candidate: 1.5-1
Version table:
1.5-1 0
500 http://ftp.it.debian.org/debian/ jessie/main amd64 Packages
100 /var/lib/dpkg/status
La guida su Docker evidenzia alcune accorgimenti che vanno adottati preliminarmente:
Rimuovere eventuali precedenti versioni installate:
$ apt-get purge "lxc-docker"
$ apt-get purge "lxc-docker"
Nel nostro caso non era presenti precedenti versioni è l’esito è stato negativo.
Di seguito un esempio di precedenti versioni presenti nei repository
$ apt-cache search docker
...
docker - System tray for KDE3/GNOME2 docklet applications
...
docker.io - Linux container runtime
...
lxc-docker - Linux container runtime
lxc-docker-0.10.0 - Linux container runtime
...
lxc-docker-0.12.0 - Linux container runtime
lxc-docker-0.5.3 - lxc-docker is a Linux container runtime
lxc-docker-0.6.0 - lxc-docker is a Linux container runtime
...
lxc-docker-0.6.6 - lxc-docker is a Linux container runtime
lxc-docker-0.6.7 - Linux container runtime
...
lxc-docker-0.9.0 - Linux container runtime
...
lxc-docker-1.5.0 - Linux container runtime
lxc-docker-1.6.0 - Linux container runtime
...
lxc-docker-1.9.0 - Linux container runtime
lxc-docker-1.9.1 - Linux container runtime
.
Per poter utilizzare il repository specifico di docker è necessario installare la GPG Key e accertarsi che apt-get apt-get operi con il protocool https. Anche se probabilmente presenti installare o verificare l’installazione dei pacchetti apt-transport-https ca-certificates con :
$ apt-get install apt-transport-https ca-certificates
Reading package lists... Done
Building dependency tree
Reading state information... Done
apt-transport-https is already the newest version.
ca-certificates is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Installare la GPG Key con
$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
In apt-get non dovrebbero essere presenti riferimenti al repository di docker. E’ possibile controllare la presenza di eventuali file docker.list con
$ ls /etc/apt/sources.list.d/docker*
Aggiungere ad apt-get il repository di docker con :
$ echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list
effettuare l’update dei repositories con
$ apt-get update
Per verificare che apt-get faccia riferimento al repository di docker corretto utilizzare apt-cache
$ apt-cache policy docker-engine
Installed: (none)
Candidate: 1.12.2-0~jessie
Version table:
1.12.2-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
1.12.1-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
1.12.0-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
1.11.2-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
...
...
1.6.1-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
1.6.0-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
1.5.0-0~jessie 0
500 https://apt.dockerproject.org/repo/ debian-jessie/main amd64 Packages
root@debian8SdaDMZ:/home/maurizio# apt-get install docker
Reading package lists... Done
parte della lista delle versioni docker disponibili e l’indicazione che docker non è installato.
Per utilizzare Docker installare il pacchetto docker-engine
$ apt-get install docker-engine
Avviare il demone Docker con
$ service docker start
Avviare il primo container
Per verificare che Docker sia funzionante avviamo il primo container. Cioè la nostra prima applicazione o parte di macchina virtuale. Per poter avviare un container e necessario disporre di una image di partenza con l’applicazione o parte della macchina virtuale. Un container è una image che vive e a partire dalla stessa image possono essere avviati molti containers indipendenti . La relazione che esiste tra container e image e simile alla relazione che nella programmazione ad oggetti esiste tra classe e oggetto. Un oggetto è un classe che vive. E di classe possiamo avviare molte istanze così da avere molti oggetti inidendenti. Così un container e una image viva e possiamo avere avviare una molteplicita di containers a partire dalla stessa classe.
In genere conviene partire da images disponibili on line modificandole piuttosto che partire da zero.
Le immagini disponibili per Docker possono essere ricercate con il comando search:
$ docker search debian
docker search debian
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
debian Debian is a Linux distribution that's comp... 1724 [OK]
neurodebian NeuroDebian provides neuroscience research... 29 [OK]
jesselang/debian-vagrant Stock Debian Images made Vagrant-friendly ... 9 [OK]
armbuild/debian ARMHF port of debian 8 [OK]
...
konstruktoid/debian Debian base image 0 [OK]
pl31/debian Debian base image. 0 [OK]
gnumoksha/debian [PT-BR] Imagem básica do Debian com ajust... 0 [OK]
L’image utilizzata per testare docker in genere è Hello-World una immagine decisamente piccola.
In questo caso scarichiamo una image più complessa scarichiamo una image debian di base si tratta dell’ultima versione di debian jesse ( 51 MB da scaricare ).
Utilizziamo il comando pull debian
$ docker pull debian
Using default tag: latest
latest: Pulling from library/debian
6a5a5368e0c2: Pull complete
Digest: sha256:677f184a5969847c0ad91d30cf1f0b925cd321e6c66e3ed5fbf9858f58425d1a
Status: Downloaded newer image for debian:latest
Possiamo controllare le images disponibili con il comando docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest ddf73f48a05d 3 weeks ago 123 MB
Avviamo il container a partire dall’image scaricata con il comando run
$ docker run -i -t ddf73f48a05d /bin/bash
root@7c7a22fdf29e:/#
il comando indicato consente di avviare il container e lanciare il comando /bin/bash così da avere accesso alla console.
A questo punto è possibile utilizzare i comandi da terminale per installare pacchetti e configurare a piacimento il container.
Per uscire digitare exit.
Per visualizzare le informazioni su docker utilizzare il comando info
$ docker info
Containers: 11
Running: 3
Paused: 2
Stopped: 6
Images: 6
Server Version: 1.12.2
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 14
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge null host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
...
Docker Root Dir: /var/lib/docker
...
per una lista dei comandi digitare docker :
$ docker
Usage: docker [OPTIONS] COMMAND [arg...]
docker [ --help | -v | --version ]
A self-sufficient runtime for containers.
Options:
--config=~/.docker Location of client config files
-D, --debug Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help Print usage
-l, --log-level=info Set the logging level
--tls Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Commands:
attach Attach 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 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
...
Il servizio docker con sysv-rc-conf

Upgrade di Docker
Per effettuare l’upgrade di docker
$ apt-get upgrade docker-engine
Disinstallare Docker
Per disinstallare Docker rimuover il pacchetto docker-engine
$ apt-get purge docker-engine
Per disistallare il pacchetto e le dipendenze digitare
$ apt-get autoremove --purge docker-engine
per rimuovere o,ages, containers a i volumi rimuovere la cartella /var/lib/docker
$ rm -rf /var/lib/docker
Risorse: