SlideShare uma empresa 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

Mais conteúdo relacionado

Mais procurados

Docker Introduction
Docker IntroductionDocker Introduction
Docker IntroductionPeng Xiao
 
Installing and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command lineInstalling and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command linedotCloud
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux KernelDocker, Inc.
 
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...Edureka!
 
Kubernetes 101 for Beginners
Kubernetes 101 for BeginnersKubernetes 101 for Beginners
Kubernetes 101 for BeginnersOktay Esgul
 
Kubernetes
KubernetesKubernetes
Kuberneteserialc_w
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Edureka!
 
A Hands-On Introduction To Docker Containers.pdf
A Hands-On Introduction To Docker Containers.pdfA Hands-On Introduction To Docker Containers.pdf
A Hands-On Introduction To Docker Containers.pdfEdith Puclla
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Herofazalraja
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)Gourav Varma
 
Docker and kubernetes
Docker and kubernetesDocker and kubernetes
Docker and kubernetesDongwon Kim
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
Helm - Package Manager for Kubernetes
Helm - Package Manager for KubernetesHelm - Package Manager for Kubernetes
Helm - Package Manager for KubernetesKnoldus Inc.
 
Docker introduction &amp; benefits
Docker introduction &amp; benefitsDocker introduction &amp; benefits
Docker introduction &amp; benefitsAmit Manwade
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Krishna-Kumar
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slidesDocker, Inc.
 

Mais procurados (20)

Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Installing and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command lineInstalling and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command line
 
Docker, LinuX Container
Docker, LinuX ContainerDocker, LinuX Container
Docker, LinuX Container
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux Kernel
 
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
 
Dockerfile
Dockerfile Dockerfile
Dockerfile
 
Kubernetes 101 for Beginners
Kubernetes 101 for BeginnersKubernetes 101 for Beginners
Kubernetes 101 for Beginners
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
 
A Hands-On Introduction To Docker Containers.pdf
A Hands-On Introduction To Docker Containers.pdfA Hands-On Introduction To Docker Containers.pdf
A Hands-On Introduction To Docker Containers.pdf
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Helm.pptx
Helm.pptxHelm.pptx
Helm.pptx
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)
 
Docker and kubernetes
Docker and kubernetesDocker and kubernetes
Docker and kubernetes
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Helm - Package Manager for Kubernetes
Helm - Package Manager for KubernetesHelm - Package Manager for Kubernetes
Helm - Package Manager for Kubernetes
 
Docker introduction &amp; benefits
Docker introduction &amp; benefitsDocker introduction &amp; benefits
Docker introduction &amp; benefits
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slides
 

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

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 produzionegiacomos
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs VirtualizzazioniGiuliano Latini
 
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 conosciutoDaniele Megna
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Cristian Consonni
 
Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentalsmvetro
 
Introduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itIntroduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itFabio Ros
 
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 cloudGabriele Baldoni
 
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 dotnetcode
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerLuca Congiu
 
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 automationTiziano Serritella
 
Alfresco meetup Roma - docker
Alfresco meetup Roma - dockerAlfresco meetup Roma - docker
Alfresco meetup Roma - dockerDavid Ciamberlano
 
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 1Alfonso Martino
 
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 iniziareDaniele Mondello
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Romualdo Gobbo
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerRoberto Messora
 
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 - ...Giulio Vian
 

Semelhante 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
 
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
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
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
 

Mais de Valerio Radice

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
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)Valerio Radice
 
Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)Valerio Radice
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Valerio Radice
 
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 museiValerio 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 laraValerio Radice
 
Slide Tesi Valerio Radice - Portale Ricambi
Slide Tesi Valerio Radice - Portale RicambiSlide Tesi Valerio Radice - Portale Ricambi
Slide Tesi Valerio Radice - Portale RicambiValerio Radice
 

Mais 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
 

Último

ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 

Último (9)

ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 

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