SlideShare una empresa de Scribd logo
1 de 61
Maggio 2017, Valerio Radice
INTRODUZIONE A
DOCKER
2
Valerio Radice
valerio.radice@nextre.it
WEB DEVELOPER & TEACHER
https://github.com/valix85
https://plus.google.com/+ValerioRadice85
https://it.linkedin.com/in/valix85/it
3
. Panoramica su Docker
. Virtualization vs Container
. Installare Docker
. Amministrare Docker
. Gestione delle immagini
. Gestione dei container
. Gestione dei volumi
. Il Dockerfile e docker-compose
. Immagini e repository (Docker hub)
. Dockerizzare servizi (esempi)
INTRODUZIONE A DOCKER
4
1.
PANORAMICA SU
DOCKER
5
Perché virtualizzare un’intera
macchina, quando sarebbe
possibile virtualizzare
solamente una piccola parte di
essa?
6
Questa domanda ha portati gli sviluppatori di
Google ad estendere il kernel di Linux con le
librerire cgroups, successivamente integrate
ufficialmente nel kernel linux.
Con cgroups, si ricrea un contesto di esecuzione
isolato, con un alto livello di astrazione, tanto da
imporsi come una sorta di sistema operativo
semplificato e virtualizzato che soggiace alla
base di tutte le applicazioni.
7
DOCKER: cos'è
piattaforma open-source
per la creazione di
containers
portabili, leggeri, autosufficienti
per eseguire applicazioni
“Configure once... run everywhere!”
Documentazione
8
La conteinerizzazione
può essere considerata figlia della
virtualizzazione
da cui si evolve in una nuova
generazione introducendo migliorie
9
ü Replica ambiente di produzione
ü Modularità -> Scalabilità
ü Rapidità
ü Efficiente separazione dei servizi
ü Portabilità
ü Alta personalizzazione
DOCKER
10
ü Containers
ü Immagini
ü Kernel condiviso
ü No hypervisor (niente overhead)
ü Performance migliori
ü Utilizzo solo delle risorse necessarie
DOCKER
11
Differenze fra
container
e
macchine virtuali
?
DOMANDA
12
2.
VIRTUALIZZATION
vs
CONTAINER
13
Macchine Virtuali
(VM)
Containers
14
15
INFRASTRUTTURA E
CONDIVISIONE DELLE RISORSE
16
Virtual Machine
Virtual Machine
con Containers
Macchina
con Containers
17
Ma i container possono dialogare
con i servizi offerti dalla
macchina che li ospita?
SI certamente, in ogni momento!
Vi è sempre condivisione di risorse
DOMANDA
18
un deployment semplificato: impacchettando un’applicazione in un singolo
componente distribuibile e configurabile con una sola linea di comando, la
tecnologia a container permette di semplificare il deployment di qualsiasi
applicazione, senza doversi preoccupare della configurazione dell’ambiente
di runtime;
una disponibilità rapida: virtualizzando ed astraendo solo il sistema
operativo e le componenti necessarie all’esecuzione dell’applicazione, invece
che l’intera macchina, l’intero package si avvia in un ventesimo di secondo,
rispetto ai tempi di avvio di una VM;
BENEFICI
19
un controllo più granulare: i container consentono agli operatori e agli
sviluppatori di suddividere ulteriormente le risorse computazionali in
microservizi, garantendo così un controllo superiore sull’eseguibilità delle
applicazioni e un miglioramento delle prestazioni dell’intero sistema.
l’amministrazione dei cicli di rilascio delle applicazioni è semplificato
basta pubblicare la nuova immagine docker e ricaricare il container per avere
tutto aggiornato (* salvare i dati volatili esternamente);
anche le attività di testing traggono un beneficio economico infatti il
testing avviene solo su container perchè la stessa situazione verrà ricreata sul
server.
BENEFICI
20
CONTAINER
ü Pacchetto standardizzato contenente
software e dipendenze
ü Isola l'applicazione dal resto del
sistema
ü Condivide lo stesso kernel del
sistema operativo
ü Funziona sulla maggiorparte delle
distribuzioni linux
ü Nativo da Windows Server 2016
21
3.
INSTALLARE
DOCKER
22
WINDOWS
Installare su Windows 10 (Pro or Enterprise)
La miglior esperienza su Windows, sfortunatamente disponibile solo nelle
versioni Pro ed Enterprise.
Ti basterà installare il file di installazione della versione Docker
Community Edition (CE) per Windows disponibile sul Docker Store.
Installare su Windows 7, 8, o 10 Home Edition
Sfortunatamente nelle precedenti versioni di Windows non è disponibile,
nelle sue funzionalità complete, Hyper-V, così è necessario installare
Docker Toolbox, un approccio leggermente differente in quanto prevede
l'installazione di una macchina virtuale (VirtualBox VM) sul quale girerà
docker.
https://www.docker.com/docker-windows
Documentazione
23
MAC
Installare su Mac OS X >= El Capitan
La miglior procedura per utilizzare Docker su un sistema MacOS è
l'installazione per Mac disponibile sul Docker Store.
Installare su Mac OS X <= Yosemite
Sfortunatamente nelle precedenti versioni di Mac il MacOS Hypervisor
framework non è pienamento integrato con Docker e risultanto
necessario installare Docker Toolbox, disponibile sul sito ufficiale di
Docker.
https://www.docker.com/docker-mac
Documentazione
24
LINUX / UBUNTU
Installare su Linux (Kernel version >= 3.10)
La miglior procedura per utilizzare Docker su un sistema Linux è
installarlo da terminale con il comando:
curl -sSL https://get.docker.com/ | sh
Installare su Ubuntu (Kernel version >= 3.10)
Per la distribuzione Ubuntu è dedicata una pagina apposita dal quale è
possibile scaricare un pacchetto per l'installazione.
https://www.docker.com/docker-ubuntu
Documentazione
25
4.
AMMINISTRARE
DOCKER
26
VOCABOLARIO DOCKER
Docker Image
Rappresenta la base di un Docker container, contiene l'intera applicazione.
Docker Container
L'unità standard nella quale l'applicazione vive e viene eseguita.
Docker Engine
Il motore di Docker che organizza, avvia, ferma i container pemettendo la
comunicazione e la condivisione delle risorse tra macchine virtuali e host.
Registry Service
Il servizio, cloud o locale, dove si registrano e si distribuiscono le immagini
di Docker (Docker HUB o Docker Trusted Registry).
27
CODE
I comandi di docker nel nuovo formato sono strutturati in:
docker <comandoPrincipale> <comandoSecondario> [parametri]
la lista dei comandi si può ottenere semplicimente col comando:
docker
la versione di docker installata sul sistema è ottenibile da:
docker version
oppure una versione semplificata:
docker -v
docker --version
Per avere informazioni sull'installazione di docker sulla macchina
docker info
28
Le immagini sono costruite sui cambiamenti del file system,
generalmente da un'immagine di partenza, ed arricchite da
metadati.
Ogni modifica è contenuta in un “layer”, identificata da un
ID e salvate sull'host. la costruzione di un'immagine risulta
così un'operazione incrementale e quando caricherò sul
mio docker hub non dovrò ricaricare tutta l'immagine ma
solo le modifiche (layer).
IMAGE
29
IMAGE: CODE
Per vedere le immagini in cache locale:
docker image ls
Per scaricare un'immagine dal docker hub:
docker pull <nomeImmagine>
Per cancellare un'immaigne:
docker image rm <nomeImmagine>
Per rimuovere le immagini non usate:
docker image prune
30
IMAGE: CODE
Per assegnare un tag all'immagine:
docker image tag <nomeImmagine>[:TAG] <nomeImmagine>[:TAG]
Per vedere la storia di un'immagine:
docker image history <nomeImmagine>
Per vedere il contenuto/configurazione di un'immagine:
docker image inspect <nomeImmagine>
Per generare un container da un Dockerfile:
docker image build [options] <nomeImmagine>
31
IMAGE: CODE
32
Il container è l'istanza di un'immagine, il suo stato
può essere salvato, tuttavia per il corretto
disaccoppiamento tra ambiente e persistenza dei
dati è opportuno creare dei volumi dedicati.
Inizialmente il container è la copia di un'immagine,
fino alla prima modifica, successivamente l'immagine
verrà copiata e resa disponibile all'istanza di quel
container, lasciando inalterata l'immagine.
Proprio per la natura effimera del container è
opportuno non salvare nulla all'interno di esso, si
adotta il principio di Separation of concerns.
CONTAINER
33
CONTAINER: CODE
Comando principale per gestire i container:
docker container <comandoPrincipale>
Per vedere i container attivi:
docker container ls
e tutti quelli sulla macchina:
docker container ls -a
Tutti i comandi:
docker container --help
34
CONTAINER: CODE
Creare un container da un'immagine:
docker container run [-v,-d,-p, options] <nomeImmagine>
Parametri principali:
-p <portaHost>:<portaContainer> = espone una porta
-d = detached mode (resta attivo in background)
-v <nomeVolume>:<percorsoNelContainer> = Assegna un volume definito
-rm = non lascia traccia del container al termine
Per trasformare un container in una nuova immagine:
docker container commit [options] <nomeContainer | ID> <nomeImmagine>
Per esporre più volte lo stesso servizio, da docker diverse, basta esporle solo sulla
porta esterna
35
CONTAINER: CODE
Per avviare un'immagine ed entrare nel suo terminale:
docker run -it <nomeImmagine> bash
Per entrare nella shell di un container già avviato:
docker container exec -it <nomeContainer> <bash|sh>
-i = interactive mode
-t = allocate pseudo-TTY terminal
Per vedere le porte condivise tra host e container:
docker container port <nomeContainer>
Per generare un container da un template (Dockerfile) usare
docker image build -t <NomeImmagine> .
-t = specifica il nome dell'immagine, il punto indica di caricare
dal path corrente il Dockerfile (scritto con la D maiuscola!)
es: docker build -t wget
36
I container sono solitamente immutabili ed effimeri, ma come fare a
mantenere le informazioni nel tempo?
Esempio
Come faccio a persistere i dati di un database che lavora in un container?
Persistent data
2 modi per farlo:
- Volumes
- Bind Mounts ( link container path to host path )
https://docs.docker.com/engine/tutorials/dockervolumes
DOMANDA
37
38
PERSISTENT DATA: Volumes
E' un luogo speciale al di fuori del file system del container in uso
Esempio, salvare il db di un container mysql
docker pull mysql
docker image inspect mysql
#genera un volume
docker container run -d --name mysqltest -e
MYSQL_ALLOW_EMPTY_PASSWORD=True mysql
- docker container inspect mysqltest
#scopro che volumi sono presenti sul mio sistema
docker volume ls
#controllo cosa contiene il volume di mysqltest
docker volume inspect <id_volume | volume_name>
Nei sistemi linux i file sono archiviati direttamente su disco e non si perdono
quando si cancella il container. Nei sistemi Win e Mac questi sono archiviati
dentro la macchina virtuale di Docker.
39
VOLUME
Creare un volume:
docker volume create <volumeName>
Elencare i volumi sulla macchina:
docker volume ls
Eliminare i volumi non usati:
docker volume prune
Eliminare un volume:
docker volume rm
Ottenere dettagli sul volume:
docker volume inspect <volumeName | ID>
40
Named Volumes è un sistema per ricordarsi facilmente i volumi
assegnandogli un nome.
Per creare un volume prima di creare un container fare:
docker volume create -d <nomeVolume>
docker container run -v <nomeVolume>:<percorsoNelContainer>
<nomeImmagine>
esempio:
docker container run -d --name mysqltest -e
MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql-db:/var/lib/mysql mysql
VOLUME
41
42
VOLUME: inspect
43
PERSISTENT DATA: bind
E' un metodo per linkare una cartella sulla macchina host in un path del
container.
Può essere effettuato solo durante la generazione del container e non nel
Dockerfile.
Tutti i file presenti nel container verranno sovrascritti dai file condivisi con la
macchina host.
Esempio
docker run -p 80:4000 -v $(pwd):/site bretfisher/jekyll-serve
Windows
docker run -p 80:4000 -v //c/example/bind:/site bretfisher/jekyll-
serve
PWD is a environment variable in bash and other shells, which is updated by the
shell on cd. So when you do echo $PWD, shell replaces $PWD as whatever its
currently storing. $XYZ means a variable for the shell, and PWD is a varibale which it
itself does create, while there is no such $pwd present.
44
45
46
NET: CODE
Con docker è possibile dividere ulteriormente i container con l'utilizzo di reti
virtuali dedicate, ciò è reso possibile da un substrato che simula una rete di
default tra la macchina host ed i container (Documentazione).
La rete di default per i container, se non diversamente specificato, sarà “bridge”
(docker0).
Per vedere le reti presenti sulla macchina:
docker network ls
Per creare una rete in fase di run usare l'attributo network:
docker run --network=<nomeRete> [parametri] <nomeImmagine>
Per vedere i comandi possibili per network vedere la guida:
docker network help
I container possono collegarsi e scollegarsi dalla rete in qualsiasi momento
47
NET: CODE
Per creare una rete in fase di run usare l'attributo network:
docker network create [parametri] <nomeRete>
Per ispezionare una rete usare:
docker network inspect <nomeRete>
48
NET: BRIDGE & PORT MAPPING
Per creare una rete usare il comando network create:
docker network create [parametri] <nomeRete>
Per ispezionare una rete usare:
docker network inspect <nomeRete>
49
5.
Dockerfile
DOCKER-COMPOSE
50
Dockerfile
Il Dockerfile è un file ben preciso che ci permette di creare un'immagine,
eseguendo una serie di comandi ben precisi, specificando eventualmente delle
opzioni, che risulterebbero scomode
da scrivere su una sola riga in console.
ü Istruzioni su come creare un'immagine
ü Ottimizare operazioni sulla
configurazione dell'immagine
ü Utilizzo di comandi nativi
Documentazione & best practice
> docker image build -t demo1 .
> docker run -d -p 3000:3000 demo1
51
DOCKER-COMPOSE
Il docker-compose.yml è un file ben preciso, scritto in
yaml, che ci permette di creare un ambiente operativo
a partire da uno o più container.
Permette il settaggio di:
ü variabili
ü variabili d'ambiente
ü porte
ü referenze ad altri container
ü volumi
ü reti
Ci sono diverse versioni, consigliata minimo la v2
Documentazione & versioni
52
DOCKER-COMPOSE: esempio
53
DOCKER-COMPOSE: esempio
54
DOCKER-COMPOSE: esempio
55
6.
Docker HUB
56
DOCKER REGISTRY
Il Docker registry è un repository, pubblico o privato, per il versionamento delle
immagini.
L'archiviazione è affidata ad un driver di connessione remota con l'host che
archivierà i contenuti. I registry non sono solo quelli di docker hub ma anche S3,
Amazon, Azure, OpenStack e molti altri.
ü Soluzione rapida per fare il deploy su un proprio cluster.
ü Miglior soluzione per la distribuzione di un immagine in un contesto isolato
Documentazione
“A Docker registry stores Docker images. Docker Hub and Docker
Cloud are public registries that anyone can use, and Docker is
configured to look for images on Docker Hub by default. You can
even run your own private registry. If you use Docker Datacenter
(DDC), it includes Docker Trusted Registry (DTR).”
57
DOCKER HUB
Il Docker hub è il luogo (repository) pubblico dove vengono caricate le immagini
che genereranno i nostri container.
Si possono trovare le immagini dei più diffusi software per lo sviluppo web e
database.
Sono presenti immagini di web server (apache, nginx, ecc... ) con preconfigurato
il supporto a diversi linguaggi di programmazione (php, ruby, python ecc... ).
Oltre alla immagini ufficiali sono presenti numerose immagine degli utenti, che,
come per github, possono caricare liberamente le loro creazioni e condividerle
con la community.
Ogni utente iscritto ottiene un proprio ID detto anche Docker ID.
58
DOCKER HUB
Ogni utente può caricare le proprie immagini sul docker hub.
Le sue immagini vengono identificate con:
<dockerID>/<nomeImmagine>:<tagVersion>
La CLI mette a disposizione dei comandi per gestire direttamente il docker hub
da console, tra cui: docker search , docker pull , docker login e docker
push.
Esempio di account:
https://hub.docker.com/r/_/wordpress/
Docker HUB & documentazione
59
60
Dubbi o domande?
Il mio contatto diretto: valerio.radice@nextre.it
GRAZIE per l'attenzione
61
BIBLIOGRAFIA & CREDITS
Special thanks to all the people who made and released these awesome
resources for free:
▸ Docker - Official Docs
▸ Docker (Windows)
▸ Docker 101
▸ Docker & Microservices
▸ Registry
▸ www.play-with-docker.com
▸ courses/try-docker
▸ Docker@youtube

Más contenido relacionado

La actualidad más candente

Why Docker
Why DockerWhy Docker
Why Docker
dotCloud
 

La actualidad más candente (20)

Dockerfile
Dockerfile Dockerfile
Dockerfile
 
Optimize your CI/CD with GitLab and AWS
Optimize your CI/CD with GitLab and AWSOptimize your CI/CD with GitLab and AWS
Optimize your CI/CD with GitLab and AWS
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with Docker
 
Docker
DockerDocker
Docker
 
Docker 101: An Introduction
Docker 101: An IntroductionDocker 101: An Introduction
Docker 101: An Introduction
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.sk
 
Jenkins
JenkinsJenkins
Jenkins
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CI
 
Why Docker
Why DockerWhy Docker
Why Docker
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a Dockerfile
 
Jenkins Introduction
Jenkins IntroductionJenkins Introduction
Jenkins Introduction
 
docker installation and basics
docker installation and basicsdocker installation and basics
docker installation and basics
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Automation CICD
Automation CICDAutomation CICD
Automation CICD
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD process
 

Similar a Introduzione a Docker (Maggio 2017) [ITA]

Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
Giuliano Latini
 

Similar a Introduzione a Docker (Maggio 2017) [ITA] (20)

Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciuto
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)
 
Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentals
 
Introduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itIntroduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.it
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Alfresco meetup Roma - docker
Alfresco meetup Roma - dockerAlfresco meetup Roma - docker
Alfresco meetup Roma - docker
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
 
Laravelday2018
Laravelday2018Laravelday2018
Laravelday2018
 
Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...
Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...
Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...
 
Introduzione A Docker
Introduzione A DockerIntroduzione A Docker
Introduzione A Docker
 

Más de Valerio Radice

Interaction design ciccarelli_nota_radice_explor_amobile by lara
Interaction design ciccarelli_nota_radice_explor_amobile by laraInteraction design ciccarelli_nota_radice_explor_amobile by lara
Interaction design ciccarelli_nota_radice_explor_amobile by lara
Valerio Radice
 

Más de Valerio Radice (12)

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Java OCA teoria 6
Java OCA teoria 6Java OCA teoria 6
Java OCA teoria 6
 
Java OCA teoria 5
Java OCA teoria 5Java OCA teoria 5
Java OCA teoria 5
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)
 
Analisi di tecnologie per l’interazione dei visitatori all'interno di musei
Analisi di tecnologie per l’interazione dei visitatori all'interno di museiAnalisi di tecnologie per l’interazione dei visitatori all'interno di musei
Analisi di tecnologie per l’interazione dei visitatori all'interno di musei
 
Interaction design ciccarelli_nota_radice_explor_amobile by lara
Interaction design ciccarelli_nota_radice_explor_amobile by laraInteraction design ciccarelli_nota_radice_explor_amobile by lara
Interaction design ciccarelli_nota_radice_explor_amobile by lara
 
Slide Tesi Valerio Radice - Portale Ricambi
Slide Tesi Valerio Radice - Portale RicambiSlide Tesi Valerio Radice - Portale Ricambi
Slide Tesi Valerio Radice - Portale Ricambi
 
VLR2009 - Web Office
VLR2009 - Web OfficeVLR2009 - Web Office
VLR2009 - Web Office
 

Introduzione a Docker (Maggio 2017) [ITA]

  • 1. Maggio 2017, Valerio Radice INTRODUZIONE A DOCKER
  • 2. 2 Valerio Radice valerio.radice@nextre.it WEB DEVELOPER & TEACHER https://github.com/valix85 https://plus.google.com/+ValerioRadice85 https://it.linkedin.com/in/valix85/it
  • 3. 3 . Panoramica su Docker . Virtualization vs Container . Installare Docker . Amministrare Docker . Gestione delle immagini . Gestione dei container . Gestione dei volumi . Il Dockerfile e docker-compose . Immagini e repository (Docker hub) . Dockerizzare servizi (esempi) INTRODUZIONE A DOCKER
  • 5. 5 Perché virtualizzare un’intera macchina, quando sarebbe possibile virtualizzare solamente una piccola parte di essa?
  • 6. 6 Questa domanda ha portati gli sviluppatori di Google ad estendere il kernel di Linux con le librerire cgroups, successivamente integrate ufficialmente nel kernel linux. Con cgroups, si ricrea un contesto di esecuzione isolato, con un alto livello di astrazione, tanto da imporsi come una sorta di sistema operativo semplificato e virtualizzato che soggiace alla base di tutte le applicazioni.
  • 7. 7 DOCKER: cos'è piattaforma open-source per la creazione di containers portabili, leggeri, autosufficienti per eseguire applicazioni “Configure once... run everywhere!” Documentazione
  • 8. 8 La conteinerizzazione può essere considerata figlia della virtualizzazione da cui si evolve in una nuova generazione introducendo migliorie
  • 9. 9 ü Replica ambiente di produzione ü Modularità -> Scalabilità ü Rapidità ü Efficiente separazione dei servizi ü Portabilità ü Alta personalizzazione DOCKER
  • 10. 10 ü Containers ü Immagini ü Kernel condiviso ü No hypervisor (niente overhead) ü Performance migliori ü Utilizzo solo delle risorse necessarie DOCKER
  • 14. 14
  • 16. 16 Virtual Machine Virtual Machine con Containers Macchina con Containers
  • 17. 17 Ma i container possono dialogare con i servizi offerti dalla macchina che li ospita? SI certamente, in ogni momento! Vi è sempre condivisione di risorse DOMANDA
  • 18. 18 un deployment semplificato: impacchettando un’applicazione in un singolo componente distribuibile e configurabile con una sola linea di comando, la tecnologia a container permette di semplificare il deployment di qualsiasi applicazione, senza doversi preoccupare della configurazione dell’ambiente di runtime; una disponibilità rapida: virtualizzando ed astraendo solo il sistema operativo e le componenti necessarie all’esecuzione dell’applicazione, invece che l’intera macchina, l’intero package si avvia in un ventesimo di secondo, rispetto ai tempi di avvio di una VM; BENEFICI
  • 19. 19 un controllo più granulare: i container consentono agli operatori e agli sviluppatori di suddividere ulteriormente le risorse computazionali in microservizi, garantendo così un controllo superiore sull’eseguibilità delle applicazioni e un miglioramento delle prestazioni dell’intero sistema. l’amministrazione dei cicli di rilascio delle applicazioni è semplificato basta pubblicare la nuova immagine docker e ricaricare il container per avere tutto aggiornato (* salvare i dati volatili esternamente); anche le attività di testing traggono un beneficio economico infatti il testing avviene solo su container perchè la stessa situazione verrà ricreata sul server. BENEFICI
  • 20. 20 CONTAINER ü Pacchetto standardizzato contenente software e dipendenze ü Isola l'applicazione dal resto del sistema ü Condivide lo stesso kernel del sistema operativo ü Funziona sulla maggiorparte delle distribuzioni linux ü Nativo da Windows Server 2016
  • 22. 22 WINDOWS Installare su Windows 10 (Pro or Enterprise) La miglior esperienza su Windows, sfortunatamente disponibile solo nelle versioni Pro ed Enterprise. Ti basterà installare il file di installazione della versione Docker Community Edition (CE) per Windows disponibile sul Docker Store. Installare su Windows 7, 8, o 10 Home Edition Sfortunatamente nelle precedenti versioni di Windows non è disponibile, nelle sue funzionalità complete, Hyper-V, così è necessario installare Docker Toolbox, un approccio leggermente differente in quanto prevede l'installazione di una macchina virtuale (VirtualBox VM) sul quale girerà docker. https://www.docker.com/docker-windows Documentazione
  • 23. 23 MAC Installare su Mac OS X >= El Capitan La miglior procedura per utilizzare Docker su un sistema MacOS è l'installazione per Mac disponibile sul Docker Store. Installare su Mac OS X <= Yosemite Sfortunatamente nelle precedenti versioni di Mac il MacOS Hypervisor framework non è pienamento integrato con Docker e risultanto necessario installare Docker Toolbox, disponibile sul sito ufficiale di Docker. https://www.docker.com/docker-mac Documentazione
  • 24. 24 LINUX / UBUNTU Installare su Linux (Kernel version >= 3.10) La miglior procedura per utilizzare Docker su un sistema Linux è installarlo da terminale con il comando: curl -sSL https://get.docker.com/ | sh Installare su Ubuntu (Kernel version >= 3.10) Per la distribuzione Ubuntu è dedicata una pagina apposita dal quale è possibile scaricare un pacchetto per l'installazione. https://www.docker.com/docker-ubuntu Documentazione
  • 26. 26 VOCABOLARIO DOCKER Docker Image Rappresenta la base di un Docker container, contiene l'intera applicazione. Docker Container L'unità standard nella quale l'applicazione vive e viene eseguita. Docker Engine Il motore di Docker che organizza, avvia, ferma i container pemettendo la comunicazione e la condivisione delle risorse tra macchine virtuali e host. Registry Service Il servizio, cloud o locale, dove si registrano e si distribuiscono le immagini di Docker (Docker HUB o Docker Trusted Registry).
  • 27. 27 CODE I comandi di docker nel nuovo formato sono strutturati in: docker <comandoPrincipale> <comandoSecondario> [parametri] la lista dei comandi si può ottenere semplicimente col comando: docker la versione di docker installata sul sistema è ottenibile da: docker version oppure una versione semplificata: docker -v docker --version Per avere informazioni sull'installazione di docker sulla macchina docker info
  • 28. 28 Le immagini sono costruite sui cambiamenti del file system, generalmente da un'immagine di partenza, ed arricchite da metadati. Ogni modifica è contenuta in un “layer”, identificata da un ID e salvate sull'host. la costruzione di un'immagine risulta così un'operazione incrementale e quando caricherò sul mio docker hub non dovrò ricaricare tutta l'immagine ma solo le modifiche (layer). IMAGE
  • 29. 29 IMAGE: CODE Per vedere le immagini in cache locale: docker image ls Per scaricare un'immagine dal docker hub: docker pull <nomeImmagine> Per cancellare un'immaigne: docker image rm <nomeImmagine> Per rimuovere le immagini non usate: docker image prune
  • 30. 30 IMAGE: CODE Per assegnare un tag all'immagine: docker image tag <nomeImmagine>[:TAG] <nomeImmagine>[:TAG] Per vedere la storia di un'immagine: docker image history <nomeImmagine> Per vedere il contenuto/configurazione di un'immagine: docker image inspect <nomeImmagine> Per generare un container da un Dockerfile: docker image build [options] <nomeImmagine>
  • 32. 32 Il container è l'istanza di un'immagine, il suo stato può essere salvato, tuttavia per il corretto disaccoppiamento tra ambiente e persistenza dei dati è opportuno creare dei volumi dedicati. Inizialmente il container è la copia di un'immagine, fino alla prima modifica, successivamente l'immagine verrà copiata e resa disponibile all'istanza di quel container, lasciando inalterata l'immagine. Proprio per la natura effimera del container è opportuno non salvare nulla all'interno di esso, si adotta il principio di Separation of concerns. CONTAINER
  • 33. 33 CONTAINER: CODE Comando principale per gestire i container: docker container <comandoPrincipale> Per vedere i container attivi: docker container ls e tutti quelli sulla macchina: docker container ls -a Tutti i comandi: docker container --help
  • 34. 34 CONTAINER: CODE Creare un container da un'immagine: docker container run [-v,-d,-p, options] <nomeImmagine> Parametri principali: -p <portaHost>:<portaContainer> = espone una porta -d = detached mode (resta attivo in background) -v <nomeVolume>:<percorsoNelContainer> = Assegna un volume definito -rm = non lascia traccia del container al termine Per trasformare un container in una nuova immagine: docker container commit [options] <nomeContainer | ID> <nomeImmagine> Per esporre più volte lo stesso servizio, da docker diverse, basta esporle solo sulla porta esterna
  • 35. 35 CONTAINER: CODE Per avviare un'immagine ed entrare nel suo terminale: docker run -it <nomeImmagine> bash Per entrare nella shell di un container già avviato: docker container exec -it <nomeContainer> <bash|sh> -i = interactive mode -t = allocate pseudo-TTY terminal Per vedere le porte condivise tra host e container: docker container port <nomeContainer> Per generare un container da un template (Dockerfile) usare docker image build -t <NomeImmagine> . -t = specifica il nome dell'immagine, il punto indica di caricare dal path corrente il Dockerfile (scritto con la D maiuscola!) es: docker build -t wget
  • 36. 36 I container sono solitamente immutabili ed effimeri, ma come fare a mantenere le informazioni nel tempo? Esempio Come faccio a persistere i dati di un database che lavora in un container? Persistent data 2 modi per farlo: - Volumes - Bind Mounts ( link container path to host path ) https://docs.docker.com/engine/tutorials/dockervolumes DOMANDA
  • 37. 37
  • 38. 38 PERSISTENT DATA: Volumes E' un luogo speciale al di fuori del file system del container in uso Esempio, salvare il db di un container mysql docker pull mysql docker image inspect mysql #genera un volume docker container run -d --name mysqltest -e MYSQL_ALLOW_EMPTY_PASSWORD=True mysql - docker container inspect mysqltest #scopro che volumi sono presenti sul mio sistema docker volume ls #controllo cosa contiene il volume di mysqltest docker volume inspect <id_volume | volume_name> Nei sistemi linux i file sono archiviati direttamente su disco e non si perdono quando si cancella il container. Nei sistemi Win e Mac questi sono archiviati dentro la macchina virtuale di Docker.
  • 39. 39 VOLUME Creare un volume: docker volume create <volumeName> Elencare i volumi sulla macchina: docker volume ls Eliminare i volumi non usati: docker volume prune Eliminare un volume: docker volume rm Ottenere dettagli sul volume: docker volume inspect <volumeName | ID>
  • 40. 40 Named Volumes è un sistema per ricordarsi facilmente i volumi assegnandogli un nome. Per creare un volume prima di creare un container fare: docker volume create -d <nomeVolume> docker container run -v <nomeVolume>:<percorsoNelContainer> <nomeImmagine> esempio: docker container run -d --name mysqltest -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql-db:/var/lib/mysql mysql VOLUME
  • 41. 41
  • 43. 43 PERSISTENT DATA: bind E' un metodo per linkare una cartella sulla macchina host in un path del container. Può essere effettuato solo durante la generazione del container e non nel Dockerfile. Tutti i file presenti nel container verranno sovrascritti dai file condivisi con la macchina host. Esempio docker run -p 80:4000 -v $(pwd):/site bretfisher/jekyll-serve Windows docker run -p 80:4000 -v //c/example/bind:/site bretfisher/jekyll- serve PWD is a environment variable in bash and other shells, which is updated by the shell on cd. So when you do echo $PWD, shell replaces $PWD as whatever its currently storing. $XYZ means a variable for the shell, and PWD is a varibale which it itself does create, while there is no such $pwd present.
  • 44. 44
  • 45. 45
  • 46. 46 NET: CODE Con docker è possibile dividere ulteriormente i container con l'utilizzo di reti virtuali dedicate, ciò è reso possibile da un substrato che simula una rete di default tra la macchina host ed i container (Documentazione). La rete di default per i container, se non diversamente specificato, sarà “bridge” (docker0). Per vedere le reti presenti sulla macchina: docker network ls Per creare una rete in fase di run usare l'attributo network: docker run --network=<nomeRete> [parametri] <nomeImmagine> Per vedere i comandi possibili per network vedere la guida: docker network help I container possono collegarsi e scollegarsi dalla rete in qualsiasi momento
  • 47. 47 NET: CODE Per creare una rete in fase di run usare l'attributo network: docker network create [parametri] <nomeRete> Per ispezionare una rete usare: docker network inspect <nomeRete>
  • 48. 48 NET: BRIDGE & PORT MAPPING Per creare una rete usare il comando network create: docker network create [parametri] <nomeRete> Per ispezionare una rete usare: docker network inspect <nomeRete>
  • 50. 50 Dockerfile Il Dockerfile è un file ben preciso che ci permette di creare un'immagine, eseguendo una serie di comandi ben precisi, specificando eventualmente delle opzioni, che risulterebbero scomode da scrivere su una sola riga in console. ü Istruzioni su come creare un'immagine ü Ottimizare operazioni sulla configurazione dell'immagine ü Utilizzo di comandi nativi Documentazione & best practice > docker image build -t demo1 . > docker run -d -p 3000:3000 demo1
  • 51. 51 DOCKER-COMPOSE Il docker-compose.yml è un file ben preciso, scritto in yaml, che ci permette di creare un ambiente operativo a partire da uno o più container. Permette il settaggio di: ü variabili ü variabili d'ambiente ü porte ü referenze ad altri container ü volumi ü reti Ci sono diverse versioni, consigliata minimo la v2 Documentazione & versioni
  • 56. 56 DOCKER REGISTRY Il Docker registry è un repository, pubblico o privato, per il versionamento delle immagini. L'archiviazione è affidata ad un driver di connessione remota con l'host che archivierà i contenuti. I registry non sono solo quelli di docker hub ma anche S3, Amazon, Azure, OpenStack e molti altri. ü Soluzione rapida per fare il deploy su un proprio cluster. ü Miglior soluzione per la distribuzione di un immagine in un contesto isolato Documentazione “A Docker registry stores Docker images. Docker Hub and Docker Cloud are public registries that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry. If you use Docker Datacenter (DDC), it includes Docker Trusted Registry (DTR).”
  • 57. 57 DOCKER HUB Il Docker hub è il luogo (repository) pubblico dove vengono caricate le immagini che genereranno i nostri container. Si possono trovare le immagini dei più diffusi software per lo sviluppo web e database. Sono presenti immagini di web server (apache, nginx, ecc... ) con preconfigurato il supporto a diversi linguaggi di programmazione (php, ruby, python ecc... ). Oltre alla immagini ufficiali sono presenti numerose immagine degli utenti, che, come per github, possono caricare liberamente le loro creazioni e condividerle con la community. Ogni utente iscritto ottiene un proprio ID detto anche Docker ID.
  • 58. 58 DOCKER HUB Ogni utente può caricare le proprie immagini sul docker hub. Le sue immagini vengono identificate con: <dockerID>/<nomeImmagine>:<tagVersion> La CLI mette a disposizione dei comandi per gestire direttamente il docker hub da console, tra cui: docker search , docker pull , docker login e docker push. Esempio di account: https://hub.docker.com/r/_/wordpress/ Docker HUB & documentazione
  • 59. 59
  • 60. 60 Dubbi o domande? Il mio contatto diretto: valerio.radice@nextre.it GRAZIE per l'attenzione
  • 61. 61 BIBLIOGRAFIA & CREDITS Special thanks to all the people who made and released these awesome resources for free: ▸ Docker - Official Docs ▸ Docker (Windows) ▸ Docker 101 ▸ Docker & Microservices ▸ Registry ▸ www.play-with-docker.com ▸ courses/try-docker ▸ Docker@youtube