Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contents
1. Virtual machine vs Containers.................................................................................................................................1
2. Componenti della virtualizzazione di docker:..........................................................................................................2
3. Componenti docker:................................................................................................................................................4
4. Popular use cases per docker (devops)...................................................................................................................4
5. 8 use cases tipici per docker....................................................................................................................................4
6. docker on windows.................................................................................................................................................5
7. docker su linux/macchina ec2 amazon e test dei componenti installati.................................................................7
8. docker su aws cloud................................................................................................................................................8
9. Persistenza dati.....................................................................................................................................................10
10. Network.............................................................................................................................................................10
11. Network control plane.......................................................................................................................................12
12. Sintassi del dockerfile........................................................................................................................................12
1. Tags dockerfile......................................................................................................................................................13
2. Costruzione di una immagine................................................................................................................................14
3. Pushing docker image to docker hub:...................................................................................................................15
Resourses are shared among various containers, in virtual machine they are allocated to a vm until ended.
usando il “run” creiamo i container: dal nostro client partirà comando (run) verso il demone che scaricherà (pull) una
immagine dal registry, la repository, e costruirà (build) l’immagine che desideriamo.
Features di docker:
3. Componenti docker:
Image: contiene tutte le dipendenze necessarie per far girare una applicazione
Machine: aiuta ad installare docker sui virtual hosts e offre le capability per gestire l’host usando i comandi docker
In poche parole abbiamo un demone che girerà su una macchina oppure che è considerato come un host locale su
cui puoi creare più container e immagini
Le immagini possono essere memorizzate su un docker hub repository da cui possono essere distribuite. Abbiamo
due tipi di repos: pubbliche, accessibili da vari utenti, private che possono essere accessibili solo dall’utente corrente.
Iot: possiamo usare docker per implementare le iot che producono molti dati che dobbiamo processare usando
microservizi
Federal governament applications: è stato adottato da diverse agenzie governative per risparmiare sui costi
Codice -> push in bitbucket -> trigger build -> source checkout commit per la build di una immagine docker -> docker
run and sanity testing (identificazione di test fails etc) -> push docker image to docker registry (se test ok)
dopo la push è possibile effettuare la pull nell’enviroment desiderato (EC2/K8s cluster oppure developer
workstation)
6. docker on windows
download e install docker-toolbox
dopo l’installazione lanciamo kitematic e dopo esserci loggati su docker otteniamo un elenco di immagini
preconfezionate da cui partire
nella barra di stato avremo l’apposita icona che ci permetterà di accedere ad un menù
andiamo su settings
da notare che il demone è esposto su una determinata porta su localhost e permette agli sviluppatori di collegarsi a
docker per svolgere i propri task
nella sezione network possiamo configurare la rete locale docker, nella sezione shared drivers possiamo decidere se
condividere o meno i dischi locali
se apriamo un command e digitiamo docker info otteniamo i dettagli della configurazione di docker.
“sudo usermod –a –G <nome gruppo docker> <utente che vogliamo aggiungere>” (es ec2-user)
infine
“docker info” ci dirà che non c’è alcun servizio docker attivo (verifica prima del seguente comando)
“sudo service docker start” per far partire il servizio (docker.service usando systemctl)
“docker info” adesso ci dirà permission denied per collegarsi al demone docker, se precediamo il tutto da sudo
otterremo le informazioni sul servizio e sui componenti
se facciamo logout e proviamo a connetterci con putty all’istanza docker usando le chiavi docker per la connessione
sicura (staranno in una cartella windows in locale) e le credenziali precedentemente usate (ec2-user) questa volta
digitando docker info non avremo bisogno di usare sudo perchè in precedenza abbiamo aggiunto l’utente al gruppo
docker
abbiamo un application load balancer su cui girano 2 servizi distinti su porta 70 e 90, questi servizi sono mappati sui
servizi amazon (ecs) che si occupano di orchestrare le richieste in modo da ospitare i nostri “target groups”
Parliamo adesso di uno scenario su aws: consideriamo jenkins come tool di build in modo da configurare aws e
docker scegliendo il plugin corretto.
Per deployare docker community edition su aws andiamo su hub.docker.com, ci logghiamo con l’account docker che
abbiamo creato, andiamo in /edition/community/docker-ce-aws che ci visualizza la pagina che ci permetterà
l’installazione su aws: un one-click template che permette il deploy di docker su una ec2
abbiano 2 opzioni: stable channel o edge channel, il primo è testato e perfettamente funzionante, il secondo invece
ha delle features sperimentali non testate completamente
se eravamo già loggati su aws verremo direzionati alla pagina per costruire lo stack cloudformation:
allo step successivo amazon chiederà i dettagli dello stack, come ad esempio nome stack, numero di swarm
managers per gestire lo stack (1) numero di swarm nodes (1), il tipo di istanza ec2 (t2.large), il size del volume dove
memorizzare i dati, il type di volume
nello step successivo possiamo specificare i tags e i iam roles o iam names
9. Persistenza dati
approccio del volume: è la cartella sull’host che può essere usata da uno o più containers (dati condivisi da più
containers), possiamo fare operazioni di scrittura che non impatteranno sul data mirroring. il data volume esisterà
per default anche se i container vengono eliminati, non è legato ad un singolo container
approccio tmpfs: che si occuperà della gestione dei files temporanei, è come il precedente ma i files vengono salvati
su memoria volatile piuttosto che su un device di storage persistente
approccio named pipes: per costruire comunicazioni tra l’host e il docker container; tipicamente
Questi diversi tipi di gestione della persistenza collaborano in modo da implementare la persistenza dei dati nelle nei
container di Docker
10. Network
CNM, container networking model: l’architettura docker è basata su un set di interfaces chiamate così
quando la rete è configurata i container avranno una nw endpoint che verrà gestita dal motore docker usando i
driver di rete o i driver ipam che comunicheranno con l’infrastruttura di rete nativa
CNM driver interface: cnm sta per container network model e mette a disposizione 2 pluggable e open interfaces che
possono essere usate da utenti, community e vendor per implementare funzionalità addizionali, visibility o i controlli
di rete necessari
native:
host driver: tramite questo un container userà lo stack di rete dell’host, nessun namespace separation e
tutte le interfacce dell’host possono essere usate dai container
bridge: viene creato un bridge linux sull’host, gestito da docker, i container possono comunicare tra loro, ed
è usato per far comunicare i container tra loro
overlay: usa la combinazione di bridge e vxlan per implementare la comunicazione container to container
utilizzando però l’infrastruttura fisica
macvlan: usa il macvlan bridge mode per instaurare una connessione tra l’interfaccia del container e il parent
host interface, viene usato per dare un indirizzo ip al container utilizzabile sulla rete fisica, nel caso in cui
vogliamo che il container sia accessibile dall’esterno
1. Tags dockerfile
ADD: copia nuovi file, cartelle, o una url remota sul file system dell’immagine specificata come destinazione
COPY: per copiare nuovi file o cartelle dal sorgente aggiungendoli al file system ad un path ben specifico
EXPOSE: per permettere di ascoltare un container su una porta di rete specifica quando è in esecuzione specificando
anche se tcp o udp
FROM: viene usato per indicare che l’immagine corrente sarà basata su una immagine di base ben specifica
USER: imposta lo user name e opzionalmente la user group quando si esegue una immagine
WORKDIR: imposta la cartella di lavoro per l’esecuzione di qualsiasi comando o comando “entrypoint”, supporta
anche le istruzione copy e add
esempio di dockerfile:
RUN apt-get update.... -> comando per eseguire l’update e/o installare software
RUN git clone.... -> comando per clonare una repo git
RUN systemctl start ngix -> comando per far partire un server ngix
2. Costruzione di una immagine
Docker version a riga di comando per conoscere la versione docker
apprendiamo che la versione del motore docker 10.03.1 e il fatto che supporta sistemi linux/amd64
FROM ubuntu:16.04
...altri comandi per configurare la rete, crare volumi, data directories e altro
l’id dopo la parola built va usato come tag quando si fa la push nella repository, ignoriamo i messaggi di warning
perchè stiamo costruendo una immagine ubuntu sotto windows
poniamo che vogliamo taggare l’immagine con un tag personale, per fare questo scriviamo
l’output sarà:
dopo la login otterremo l’elenco delle repos nostre, con apposito bottone creiamo una nuova
ci verrà chiesto se la repo deve essere pubblica o privata, il nome della repo, la descrizione, opzionalmente i build
settings
cliccando su create parte la creazione
usando il comando docker push possiamo fare la push sulla repos appena creata tramite il prompt dei comandi
dopo aver ottenuto il messaggio “login succeded” possiamo pushare la immagine specificando anche il nome del tag:
Se entriamo nella nostra repos da web ci accorgeremo della presenza della nostra immagine
Riepilogo:
creiamo una repo su web, poi proviamo a fare la push di una image
docker push <username>/<nome immagine>
a questo punto abbiamo aggiunto l’immagine in una repo locale, possiamo pusharla su docker: