SlideShare a Scribd company logo
1 of 22
Download to read offline
Docker: come
"inscatolare" la propria
app?
JUG TAA - giugno 2015
Cristian Consonni e Mario A. Santini
Parte 2
mettiamoci dentro le mani
Installare Docker
● Ubuntu:
$ wget -qO- https://get.docker.com/ | sh
(versione >= 14.04 per versioni precedenti vedere i prerequisiti su: https://docs.
docker.com/installation/ubuntulinux/)
($ sudo usermod -aG docker ubuntu)
(È anche pacchettizzato: $ sudo apt-get install docker.io)
● Mac OS X: Boot2Docker (CLI) o Kitematic (GUI)
● Windows: Boot2Docker (CLI)
Docker su Linux e su Mac/Win
Comandi del deamon di Docker (I)
docker <subcommand>
● pull NAME[:TAG]
scarica l’immagine NAME[:TAG]da DockerHub
● run IMAGE [COMMAND]
avvia un container con immagine IMAGE e esegue COMMAND
● build PATH | URL | -
costruisce una nuova immagine a partire dal Dockerfile in PATH
Comandi del deamon di Docker (II)
● ps [-a]
elenca i container che stanno girando, -a elenca tutti i container
● images
elenca le immagini disponibili localmente
● rm
rimuove un container
● rmi
rimuove un’immagine (non possono essere rimosse immagini in uso)
Proviamo: hello world (II)
docker ps -a
docker images
docker rm …
docker rmi …
(https://asciinema.org/a/b7j71yim7dewcka2w421s0398)
Qualcosa di più complicato: lanciare bash su Ubuntu
docker run -t -i ubuntu:latest
/bin/bash
(https://asciinema.org/a/5v36v9rxpvp4ywhqb4gk0bis5)
docker ps
(https://asciinema.org/a/333daetaiq7doh6cglbh8t3c8)
Comandi principali di un Dockerfile (I)
Dockerfile reference: https://docs.docker.com/reference/builder/
● FROM <image>:<tag>
Specifica la Base Image <image>:<tag> per le istruzioni successive
● MAINTAINER <first_name> <last_name> "<email>"
indica l’autore della nuova Docker image
Comandi principali di un Dockerfile (II)
● RUN <command>
● RUN ["executable", "param1", "param2"]
esegue un comando (crea un nuovo “layer”)
ATTENZIONE: i comandi eseguiti con RUN sono indipendenti
(quindi se voglio cambiare directory e eseguire un comando in quella
directory devo specificarlo in un unico comando)
RUN cd $HOME/subdir && command
Comandi principali di un Dockerfile (III)
● USER <user>
Specifica il come utente che eseguirà i comandi dati con CMD
● ENV <key> <value> (<key>=<value> …)
Imposta il valore della variabile di ambiente <key> a <value>
● EXPOSE <port> [<port>...]
Informa Docker che il container ascolterà sulle porte <port> a runtime (si
vedano le opzioni -p e -P del comando docker run )
Comandi principali di un Dockerfile (IV)
● CMD ["executable","param1","param2"] (recommended)
● CMD ["param1","param2"]
● CMD command param1 param2
Lo scopo di CMD è di fornire un default per l’esecuzione di un container.
ATTENZIONE: Ci può essere una sola istruzione CMD in un Dockerfile (se si
usa più di una istruzione CMD solo l’ultima avrà effetto)
Una alternativa è usare l’istruzione ENTRYPOINT
Comandi principali di un Dockerfile (V)
● ENTRYPOINT ["executable","param1","param2"]
(recommended)
● ENTRYPOINT command param1 param2
Un Dockerfile con il comando ENTRYPOINT permette di configurare un
container che si comporta come un eseguibile.
Dal Dockerfile al container all’Hub
● docker build 
-t <my_hub_name>/<image_name>:<version_tag> PATH
Costruisce l’immagine dandogli il nome specificato e la inserisce nel registry
locale
● docker push  <my_hub_name>/<image_name>:
<version_tag>
Invia l’immagine a Docker Hub
Demo: web application con Spring
Tratto da: https://spring.io/guides/gs/spring-boot-docker
mvn package
(https://asciinema.org/a/665mytgmf3jwmpw6e1jgc0g3x)
mvn package docker:build
docker run -p 8080:8080 -t <image>
(https://asciinema.org/a/72n6hb7fwmzh5tge4smgudfcx)
(https://asciinema.org/a/6f6y8rgwm8sve7itq1mnpgp1u)
Opzioni di docker run (I)
● -p <container_port>:<host_port>
Linka la porta <container_port> alla porta <host_port>
● -t
Alloca uno pseudo-terminale
● -i
mantiene lo STDIN del container aperto anche se non è attaccato al terminale
in uso
Opzioni di docker run (II)
● --rm
Rimuove automaticamente il container quando termina
● -v <local_dir>:<container_dir>
Monta una cartella locale nella directory specificata nel container (e. g. $PWD:
/mnt)
Extra
applicazioni multi-container
Redis + Node.js + nginx
Tratto da:
● http://anandmanisankar.
com/posts/docker-container-
nginx-node-redis-example/
● https://github.
com/msanand/docker-workflow
● https://asciinema.
org/a/aggiktwd4lqwe08ewywmpy
10t
Docker Machine, Swarm, Compose
● Docker machine
permette di creare host Docker locali (VirtualB ox) o su provider remoti
(DigitalOcean, Amazon EC2, Google Container Engine, Microsoft Azure, …)
● Docker Swarm
clustering nativo per Docker. Permette di creare ed accedere ad un pool di host
Docker
● Docker Compose
è un tool per definire e lanciare applicazioni multi-container. I container sono
descritti in un file con sintassi YAML e possono essere linkati tra loro.
Conclusioni
● Docker sfrutta la tecnologia dei Linux Container (lxc)
per automatizzare il deploy di applicazioni
● I container forniscono degli ambienti completamente
standardizzati (elimina il “works on my machine”)
● Si vuole arrivare a poter fare il deploy di applicazioni
complesse con la stessa facilità sul computer dello
sviluppatore e sul cluster in produzione
● Quello che abbiamo visto oggi è solo una piccola parte
di un mondo in forte evoluzione
Grazie!
Cristian & Mario

More Related Content

What's hot

Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
MongoDB
 

What's hot (20)

Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
Docker
Docker Docker
Docker
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Introduzione a docker
Introduzione a dockerIntroduzione a docker
Introduzione a docker
 
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
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
 
Docker - virtualizzazione leggera
Docker - virtualizzazione leggeraDocker - virtualizzazione leggera
Docker - virtualizzazione leggera
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
 
Docker jug taa
Docker   jug taaDocker   jug taa
Docker jug taa
 
Alfresco meetup Roma - docker
Alfresco meetup Roma - dockerAlfresco meetup Roma - docker
Alfresco meetup Roma - docker
 
Proxmox VE
Proxmox VEProxmox VE
Proxmox VE
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
 
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 - ...
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
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
 
Git best practices
Git best practicesGit best practices
Git best practices
 

Viewers also liked

Viewers also liked (13)

Archeowiki, When Open-Source Strategies Attract Visitors' Presence In Museums...
Archeowiki, When Open-Source Strategies Attract Visitors' Presence In Museums...Archeowiki, When Open-Source Strategies Attract Visitors' Presence In Museums...
Archeowiki, When Open-Source Strategies Attract Visitors' Presence In Museums...
 
Linux Burning Machine
Linux Burning MachineLinux Burning Machine
Linux Burning Machine
 
Le opportunità della rete nel rispetto del copyright
Le opportunità della rete nel rispetto del copyrightLe opportunità della rete nel rispetto del copyright
Le opportunità della rete nel rispetto del copyright
 
Aziende e Wikipedia: dobbiamo parlare - Social Media Week Milano - Febbraio 2...
Aziende e Wikipedia: dobbiamo parlare - Social Media Week Milano - Febbraio 2...Aziende e Wikipedia: dobbiamo parlare - Social Media Week Milano - Febbraio 2...
Aziende e Wikipedia: dobbiamo parlare - Social Media Week Milano - Febbraio 2...
 
Contare gli interi, i razionali e i reali (e altre amenità)
Contare gli interi, i razionali e i reali (e altre amenità)Contare gli interi, i razionali e i reali (e altre amenità)
Contare gli interi, i razionali e i reali (e altre amenità)
 
Introdution to Docker (theory and hands on) dbCafé - dbTrento
Introdution to Docker (theory and hands on) dbCafé - dbTrentoIntrodution to Docker (theory and hands on) dbCafé - dbTrento
Introdution to Docker (theory and hands on) dbCafé - dbTrento
 
School of data Trento: basic spreadsheet
School of data Trento: basic spreadsheetSchool of data Trento: basic spreadsheet
School of data Trento: basic spreadsheet
 
La privacy nei progetti aperti e collaborativi - il caso di Wikipedia
La privacy nei progetti aperti e collaborativi - il caso di Wikipedia La privacy nei progetti aperti e collaborativi - il caso di Wikipedia
La privacy nei progetti aperti e collaborativi - il caso di Wikipedia
 
Presentazione Wikipedia Scuole Civiche
Presentazione Wikipedia Scuole CivichePresentazione Wikipedia Scuole Civiche
Presentazione Wikipedia Scuole Civiche
 
Alla scoperta di Ubuntu Phone, lo smartphone open-source - Codemotion techmee...
Alla scoperta di Ubuntu Phone, lo smartphone open-source - Codemotion techmee...Alla scoperta di Ubuntu Phone, lo smartphone open-source - Codemotion techmee...
Alla scoperta di Ubuntu Phone, lo smartphone open-source - Codemotion techmee...
 
Cloud computing and networking course: paper presentation -Data Mining for In...
Cloud computing and networking course: paper presentation -Data Mining for In...Cloud computing and networking course: paper presentation -Data Mining for In...
Cloud computing and networking course: paper presentation -Data Mining for In...
 
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container ServicePlay Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
 
LXC, Docker, security: is it safe to run applications in Linux Containers?
LXC, Docker, security: is it safe to run applications in Linux Containers?LXC, Docker, security: is it safe to run applications in Linux Containers?
LXC, Docker, security: is it safe to run applications in Linux Containers?
 

Similar to Introduzione a Docker (parte 2 - Pratica)

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

Similar to Introduzione a Docker (parte 2 - Pratica) (20)

TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
RiminiLUG. Mini Corso su Linux p2: Networking & TerminalRiminiLUG. Mini Corso su Linux p2: Networking & Terminal
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
 
Openmoko
OpenmokoOpenmoko
Openmoko
 
Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumate
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)
 
Flutter
FlutterFlutter
Flutter
 
Installazione Qt/Qt Quick per target Android
Installazione Qt/Qt Quick  per target AndroidInstallazione Qt/Qt Quick  per target Android
Installazione Qt/Qt Quick per target Android
 
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
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Idp, passo dopo passo!
Idp, passo dopo passo!Idp, passo dopo passo!
Idp, passo dopo passo!
 
Italy vmug 2019 PowerCLI pret-a-porter
Italy vmug 2019 PowerCLI pret-a-porterItaly vmug 2019 PowerCLI pret-a-porter
Italy vmug 2019 PowerCLI pret-a-porter
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
 
X2 Linux Riassunti
X2 Linux RiassuntiX2 Linux Riassunti
X2 Linux Riassunti
 
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
 

Introduzione a Docker (parte 2 - Pratica)

  • 1. Docker: come "inscatolare" la propria app? JUG TAA - giugno 2015 Cristian Consonni e Mario A. Santini
  • 3. Installare Docker ● Ubuntu: $ wget -qO- https://get.docker.com/ | sh (versione >= 14.04 per versioni precedenti vedere i prerequisiti su: https://docs. docker.com/installation/ubuntulinux/) ($ sudo usermod -aG docker ubuntu) (È anche pacchettizzato: $ sudo apt-get install docker.io) ● Mac OS X: Boot2Docker (CLI) o Kitematic (GUI) ● Windows: Boot2Docker (CLI)
  • 4. Docker su Linux e su Mac/Win
  • 5. Comandi del deamon di Docker (I) docker <subcommand> ● pull NAME[:TAG] scarica l’immagine NAME[:TAG]da DockerHub ● run IMAGE [COMMAND] avvia un container con immagine IMAGE e esegue COMMAND ● build PATH | URL | - costruisce una nuova immagine a partire dal Dockerfile in PATH
  • 6. Comandi del deamon di Docker (II) ● ps [-a] elenca i container che stanno girando, -a elenca tutti i container ● images elenca le immagini disponibili localmente ● rm rimuove un container ● rmi rimuove un’immagine (non possono essere rimosse immagini in uso)
  • 7. Proviamo: hello world (II) docker ps -a docker images docker rm … docker rmi … (https://asciinema.org/a/b7j71yim7dewcka2w421s0398)
  • 8. Qualcosa di più complicato: lanciare bash su Ubuntu docker run -t -i ubuntu:latest /bin/bash (https://asciinema.org/a/5v36v9rxpvp4ywhqb4gk0bis5) docker ps (https://asciinema.org/a/333daetaiq7doh6cglbh8t3c8)
  • 9. Comandi principali di un Dockerfile (I) Dockerfile reference: https://docs.docker.com/reference/builder/ ● FROM <image>:<tag> Specifica la Base Image <image>:<tag> per le istruzioni successive ● MAINTAINER <first_name> <last_name> "<email>" indica l’autore della nuova Docker image
  • 10. Comandi principali di un Dockerfile (II) ● RUN <command> ● RUN ["executable", "param1", "param2"] esegue un comando (crea un nuovo “layer”) ATTENZIONE: i comandi eseguiti con RUN sono indipendenti (quindi se voglio cambiare directory e eseguire un comando in quella directory devo specificarlo in un unico comando) RUN cd $HOME/subdir && command
  • 11. Comandi principali di un Dockerfile (III) ● USER <user> Specifica il come utente che eseguirà i comandi dati con CMD ● ENV <key> <value> (<key>=<value> …) Imposta il valore della variabile di ambiente <key> a <value> ● EXPOSE <port> [<port>...] Informa Docker che il container ascolterà sulle porte <port> a runtime (si vedano le opzioni -p e -P del comando docker run )
  • 12. Comandi principali di un Dockerfile (IV) ● CMD ["executable","param1","param2"] (recommended) ● CMD ["param1","param2"] ● CMD command param1 param2 Lo scopo di CMD è di fornire un default per l’esecuzione di un container. ATTENZIONE: Ci può essere una sola istruzione CMD in un Dockerfile (se si usa più di una istruzione CMD solo l’ultima avrà effetto) Una alternativa è usare l’istruzione ENTRYPOINT
  • 13. Comandi principali di un Dockerfile (V) ● ENTRYPOINT ["executable","param1","param2"] (recommended) ● ENTRYPOINT command param1 param2 Un Dockerfile con il comando ENTRYPOINT permette di configurare un container che si comporta come un eseguibile.
  • 14. Dal Dockerfile al container all’Hub ● docker build -t <my_hub_name>/<image_name>:<version_tag> PATH Costruisce l’immagine dandogli il nome specificato e la inserisce nel registry locale ● docker push <my_hub_name>/<image_name>: <version_tag> Invia l’immagine a Docker Hub
  • 15. Demo: web application con Spring Tratto da: https://spring.io/guides/gs/spring-boot-docker mvn package (https://asciinema.org/a/665mytgmf3jwmpw6e1jgc0g3x) mvn package docker:build docker run -p 8080:8080 -t <image> (https://asciinema.org/a/72n6hb7fwmzh5tge4smgudfcx) (https://asciinema.org/a/6f6y8rgwm8sve7itq1mnpgp1u)
  • 16. Opzioni di docker run (I) ● -p <container_port>:<host_port> Linka la porta <container_port> alla porta <host_port> ● -t Alloca uno pseudo-terminale ● -i mantiene lo STDIN del container aperto anche se non è attaccato al terminale in uso
  • 17. Opzioni di docker run (II) ● --rm Rimuove automaticamente il container quando termina ● -v <local_dir>:<container_dir> Monta una cartella locale nella directory specificata nel container (e. g. $PWD: /mnt)
  • 19. Redis + Node.js + nginx Tratto da: ● http://anandmanisankar. com/posts/docker-container- nginx-node-redis-example/ ● https://github. com/msanand/docker-workflow ● https://asciinema. org/a/aggiktwd4lqwe08ewywmpy 10t
  • 20. Docker Machine, Swarm, Compose ● Docker machine permette di creare host Docker locali (VirtualB ox) o su provider remoti (DigitalOcean, Amazon EC2, Google Container Engine, Microsoft Azure, …) ● Docker Swarm clustering nativo per Docker. Permette di creare ed accedere ad un pool di host Docker ● Docker Compose è un tool per definire e lanciare applicazioni multi-container. I container sono descritti in un file con sintassi YAML e possono essere linkati tra loro.
  • 21. Conclusioni ● Docker sfrutta la tecnologia dei Linux Container (lxc) per automatizzare il deploy di applicazioni ● I container forniscono degli ambienti completamente standardizzati (elimina il “works on my machine”) ● Si vuole arrivare a poter fare il deploy di applicazioni complesse con la stessa facilità sul computer dello sviluppatore e sul cluster in produzione ● Quello che abbiamo visto oggi è solo una piccola parte di un mondo in forte evoluzione