SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
Docker & DevOps
Gerardo Di Iorio
@arete
Chi Sono
Gerardo Di Iorio
Programmatore presso
Organizzatore DevDay AV
Linux dal 1992 ( potevo utilizzare UNIX su x86)
Recap del talk precedente
Git - gestione del sorgente
● Uso di git
● Branch,Merge,Rebase,Cherry-pick
● Collaborazione con altri sviluppatori
● Pull,Push Fetch
Continuous Integration
● Effettua la Build e i Test
Accenno a Docker
DevOps
In informatica DevOps (dalla contrazione inglese di development, "sviluppo", e operations, qui simile a "messa in produzione" o
"deployment") è una metodologia di sviluppo del software che punta alla comunicazione, collaborazione e integrazione tra sviluppatori
e addetti alle operations dell'information technology (IT).[1]
DevOps vuole rispondere all'interdipendenza tra sviluppo software e IT
operations, puntando ad aiutare un'organizzazione a sviluppare in modo più rapido ed efficiente prodotti e servizi software.[2][3][4][5]
DevOps
L'integrazione continua è un metodo di sviluppo software in cui gli sviluppatori aggiungono
regolarmente modifiche al codice in un repository centralizzato, quindi la creazione di build e i test
vengono eseguiti automaticamente.
Distribuzione Continua è un metodo di sviluppo software in cui le modifiche al codice vengono
applicate a una build, testate e preparate per il rilascio in produzione in modo automatico.
Architettura di microservizi è un approccio alla progettazione in cui un'applicazione si basa su un
gruppo di servizi di minori dimensioni. Ogni servizio esegue il proprio processo e comunica con gli
altri servizi tramite un' interfaccia predefinita.
Infrastruttura Come Codice è una prassi secondo cui provisioning e gestione dell'infrastruttura
avvengono tramite metodologie di sviluppo di software e codice quali il controllo di versione e
l'integrazione continua.
Sviluppiamo un progetto in C
#include <stdio.h>
int main()
{
// printf() displays the string inside
quotation
printf("Hello, World!");
return 0;
}
Strumenti Necessari
Sviluppo
● Editor (Vim,Emacs,Visual Studio Code,Eclispe,etc)
● VCS (git,mercurial,bazar,etc)
● Compilatore (gcc,MVSC,etc)
● Header e Librerie per la compilazione
Debug & Run
● Librerie per il debug
● Librerie per il runtime
HelloWorld.c
Build
# gcc -o helloword helloword.c
Dipendenze
# ldd helloword
linux-vdso.so.1 (0x00007ffd5e5e3000)
libc.so.6 => /usr/lib/libc.so.6
(0x00007f02f1d10000)
/lib/ld-linux-x86-64.so.2 (0x00007f02f22d0000)
Setup ambiente : Progetto in C
Sviluppo
● Editor (Vim,Emacs,Visual Studio Code,Eclispe,etc)
● VCS (git,mercurial,bazar,etc)
● Compilatore (gcc,MVSC,etc)
● Header e Librerie per la compilazione
Debug & Run
● Librerie per il debug
● Librerie per il runtime
# sudo apt-get install vim
# sudo apt-get install git
# sudo apt-get install git
# sudo apt-get install gcc-4.6-base cpp-4.6
libgomp1 libquadmath0
# sudo apt-get install libc6-dev
# sudo apt-get install libc6-dbg
Solo le stesse librerie dinamiche che usa il
mio OS
Cosa devo installare sul mio pc ?
Progetto in C : static build
#include <stdio.h>
int main()
{
// printf() displays the string inside
quotation
printf("Hello, World!");
return 0;
}
Strumenti Necessari
Sviluppo
● Editor (Vim,Emacs,Visual Studio Code,Eclispe,etc)
● VCS (git,mercurial,bazar,etc)
● Compilatore (gcc,MVSC,etc)
● Header e Librerie per la compilazione
Debug & Run
● Nulla
HelloWorld.c
Build
# gcc -static -o helloword helloword.c
Nessuna Dipendenza
# ldd helloword
non e’ un eseguibile dinamico
Enviroment differenti : Build Android
Android Distribuzione consigliata:
Ubuntu 14.04
Ma io ho Fedora 27 !!!
Soluzione : Virtual Machine vs Container
● cosa serve ad un exe per essere eseguito ?
● Posso creare un ambiente isolato con tutte le corrette dipendenze ?
● Posso eseguire un comando in questo ambiente isolato ?
● Soluzione VM oppure Container
Container Vantaggi
● Replica dell’ambiente di produzione.
● Modulare
● Scalabile
● Separazione tra i servizi
● Portabile
● Personalizzabile
● Utilizzo solo le risorse necessarie
● Nessun Hypervisor
● Kernel condiviso
Container: Vantaggi DevOps
● Deployment semplificato: impacchettando un’applicazione in un
singolo immagine distribuibile e configurabile. Docker semplifica il
deployment di qualsiasi applicazione.
● Disponibilità istantanea: “virtualizzando” solo le componenti
necessarie all’esecuzione dell’applicazione il container si avvia in
un ventesimo di secondo, rispetto ai tempi di avvio di una VM
● Controllo granulare: i container consentono agli operatori e agli
sviluppatori di suddividere le risorse computazionali in microservizi,
garantendo così un controllo superiore sull’eseguibilità delle
applicazioni e un miglioramento delle prestazioni dell’intero sistema.
● Deploy semplificato: l’amministrazione dei cicli di rilascio delle
applicazioni è semplificato: basta pubblicare la nuova immagine
docker e ricaricare il container per avere tutto aggiornato
● Testing: le attività di testing traggono un beneficio,infatti il testing
avviene solo su container, che è la stessa situazione in ambiente di
produzione, isolato dagli altri ambienti.
● 1979: Unix V7 Viene introdotta la system call chroot : cambia la root directory di un processo figlio in una nuova
posizione del filesystem. Permette l’isolazione del processo all’accesso del file-system
● 2000: FreeBSD Jails consente agli amministratori di suddividere un sistema in diversi sistemi indipendenti più
piccoli, denominati "jail", con la possibilità di assegnare un indirizzo IP per ogni sistema e configurazione.
● 2001: Linux VServer e’ un meccanismo in cui e’ possibile partizionare le risorse (filesystem,indirizi di
memoria,indirizzi di rete)
● 2004: Oracle Containers Solaris permette di gestire le risorse del sistema e la separazione fra zone, le quali erano
in grado di sfruttare le funzionalità di snapshot di ZFS.
● 2005: Open VZ (Open Virtuzzo) Tecnologia di virtualizzazione a livello di sistema operativo per Linux, che utilizza il
kernel linux con una patch per la virtualizzazione, isolamento, gestione delle risorse etc.
● 2006: Process Container è stato progettato per limitare, contabilizzare e isolare l'utilizzo delle risorse (CPU,
memoria, I / O del disco, rete) di una raccolta di processi. È stato rinominato "Control Groups (cgroups)" un anno
dopo e infine unito al kernel Linux 2.6.24.
● 2008: LXC stata la prima implementazione più completa di Linux container manager. È stato implementato nel 2008
utilizzando cgroup e spazi dei nomi Linux(namespaces) e funziona su un singolo kernel Linux senza richiedere
alcuna patch.
● 2011: Warden CloudFoundry ha avviato Warden nel 2011, utilizzando LXC nella fase iniziale e in seguito
sostituendolo con una propria implementazione.Warden include un servizio per gestire cgroup, spazi dei nomi e il
ciclo di vita del processo.
● 2013 : LMCTFY è stato lanciato nel 2013 come una versione open source dello stack container di Google, fornendo
contenitori per applicazioni Linux.
● 2013: Docker e il futuro Come ha fatto Warden, Docker ha utilizzato anche LXC nelle fasi iniziali e
successivamente ha sostituito quel gestore di container con la propria libreria, libcontainer.
Storia di Docker
Docker : Installazione
● L’installazione di Docker dipende dal sistema operativo
● Windows 10 ha bisogno di HyperV (Windows 10 Professional)
● Sistemi Windows senza HyperV (virtualbox image)
● Quando possibile seguire le instruzioni riportati sul sito di Docker:
○ Il processo di installazione è trasparente e standard : apt-get or yum
○ Tutte le dipendenze vengono automaticamente risolte
○ I file di configurazioni sono impostati correttamente
○ Gli aggiornmanti sono automatici
Get Docker https://www.docker.com/get-docker
Docker : Architettura
● Cosa è Docker?
● Docker è una piattaforma per sviluppatori e sysadmin per “ develop, ship, and run
applications”, basata su containers
● Docker è open-source, scritta in Go e originariamente basata su libvirt e LXC -
dopo rimpiazzata dalla libreria libcontainer, scritta in Go.
● Docker semplifica e standardizza la creazione e la manutenzione di containers,
eespone delle API semplici ed elegenti per effetuare query e azioni
● Architettura Client -- Server
● Docker Engine (Server) ha bisogno di un kernel 64bit e di essere avviata come root
● Docker cli (client) da qualsiasi device/piattaforma , si connette al Docker Engine via
Rest Api
Docker : Quale Versione ?
● Docker-EE
● Docker-CE Edge / Relase Channel
● Moby
Vocabolario Docker
Images Rappresenta la base di un Docker container, contiene l'intera applicazione.
Container L’unità standard nella quale vive e viene eseguita un comando
HUB servizio cloud o locale, dove si registrano e redistribuiscono le immagini di docker
Volumi E' un file system esterno al file system del container
Network tipologie di networking per comunicare tra container e host
Docker: Image
● 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
● La costruzione di un'immagine è un'operazione incrementale
● Aggiornamento da/al docker hub non dovrò ricaricare tutta l'immagine ma solo le modifiche.
Docker: Container
● 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.
Docker: HUB
● è un repository pubblico dove vengono caricate le immagine.
● Immagini dei più diffusi software e di sviluppo web,database,etc
● Immagini Ufficiali
● Immagini pubbliche degli utenti
● Le immagini sono taggate versione,etc
● Possono essere caricate (cli,CI,travis,...)
● Possono essere scaricate
● Possiamo creare la nostra immagine e condividerla
● L’Hub puo’ creare/aggiornare autonomamente attraverso un Dockerfile
Docker: Volumi
I container possono essere cancellati e ricreati… Dove Salvo i Dati ?
Come faccio ad avere la persistenza dei dati ?
● Volume
● Bind Mounts (link container path con host folder)
File di configurazione,data storage, log etc...
Docker: Volumi
Se devo fare il sync del
backup verso S3 ?
Creo un container con il
comando S3, con il
volume backup!
Docker : Networking
● bridge quando sono necessari più contenitori per comunicare sullo stesso host Docker.
● host quando lo stack di rete non deve essere isolato dall'host Docker, ma si desidera isolare altri aspetti del
contenitore.
● overlay quando hai bisogno di contenitori in esecuzione su diversi host Docker per comunicare o quando più
applicazioni lavorano insieme utilizzando i servizi di sciame.
● Macvlan quando si esegue la migrazione da un'installazione di VM o si richiede che i contenitori sembrano host
fisici sulla rete, ognuno con un indirizzo MAC univoco.
● I plug-in di rete di terze parti consentono di integrare Docker con stack di rete specializzati.
Docker : Networking
● Con docker e’ possibile isolare i container utilizzando reti virtuali dedicate.
● La rete di default per docker e’ il bridge (docker0)
● I container possono collegarsi o collegarsi ad una rete in qualsiasi
momento
● E’ possibili effettuare un port mapping tra le porte del container e quella
dell’host
Docker Comandi
I comandi di docker sono strutturati
docker <comandoPrincipale> <comandoSecondario> [parametri]
Lista dei comandi
docker
La versione di docker installata sul sistema
docker version
Informazioni sull'installazione di docker del sistema
docker info
Docker Image
Lista delle immagini in cache locale
# docker image ls
Per scaricare un'immagine dall’ hub
# docker pull <nomeImmagine>
Per eliminare un' immagine
# docker rmi <nomeImmagine>
Per rimuovere le immagini non usate:
# docker image prune
Storia di un'immagine
# docker image history <nomeImmagine>
Per visualizzare contenuto/configurazione di un'immagine
# docker image inspect <nomeImmagine>
Per creare un immagine da tar
# docker image import <file|url> <nomeImmagine:[tag]>
Docker Container
Lista di tutti i container
# docker ps -a
Container attivi
# docker ps
Creare un container da un immagine
# docker run <nomeImmagine>
Crea una immagine da un container
# docker commit
Avviare un comando nel container in modo interattivo
# docker exec -it <nomeContainer|idContainer> <command>
Per visualizzare contenuto/configurazione di un'container
# docker inspect <nomeContainer>
Cancellare un container
# docker rm <nomeContainer>
Docker Container -> Image
Partendo da un immagine base la modifichiamo per creare una nostra immagine
# docker create --name web -p 8080:80 nginx:alpine
7e3daf8129b286c5b8febe4675408fa3dcdc12b3b30a035370dfd1847dbf2385
# docker cp index.html web:/usr/share/nginx/html/
# docker start web
web
# curl localhost:8080
Adesso vogliamo creare la nostra immagine da questo container
# docker ps -a (Ho il commit dello stato del container)
# docker commit -m”Web + html” -a “DevDayBN” <commit> devdaybnweb
Docker Volume
Crea un volume
# docker volume create
Elenco dei volumi
# docker volume ls
Eliminare i volumi non usati
# docker volume prune
Eliminare un volume
# docker volume rm
Per visualizzare contenuto/configurazione di un volume
# docker inspect <nomeVolume>
Per dare un nome al volume
# docker volume create -d <nomeVolume>
Variabili di Ambiente
# curl -I HEAD -i localhost:8080
# docker exec -it web date
La Data e’ sbagliata, devo configurare /etc/localtime correttamente
● devo montare il container settare la timezone
● ma se devo simulare un server che si trova in America ?
● ma se devo simulare un server che si trova in Cina ?
# docker exec -it web env TZ=Europe/Rome date
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.
Per creare un immagine da un Dockerfile
# docker image build -t nodewebapp .
# docker run -p 8080:8080 nodewebapp
# curl localhost:8080
FROM node:carbon
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND
package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm install --only=production
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "npm", "start" ]
Docker Container : Progetto in C
Cli
# docker run --rm --user="$(id -u):$(id -g)" --net=none -v "$PWD":/tmp
frolvlad/alpine-gcc gcc /tmp/helloworld.c -o /tmp/helloworld -static
Dockerfile
FROM frolvlad/alpine-gcc
RUN mkdir -p /app
WORKDIR /app
COPY helloworld.c .
RUN gcc -static -o helloworld helloworld.c
FROM scratch
COPY --from=0 /app/helloworld /helloworld
CMD ["/helloworld"]
Docker Container : Build Arduino
Docker image per compilare Firmaware per
Arduino
https://github.com/opsxcq/docker-dev-arduino
Docker compose
Il docker-compose.yml è un file ben preciso, scritto in yaml, che ci permette di
creare un ambiente a partire da uno o più container.
Permette il settaggio di:
● variabili
● variabili d'ambiente
● porte
● referenze ad altri container
● volumi
● reti
Docker compose WordPress
version: '2'
services:
wordpress:
image: wordpress:latest # https://hub.docker.com/_/wordpress/
ports:
- 127.0.0.1:80:80 # change ip if required
volumes:
- ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./wp-app:/var/www/html # Full wordpress project
#- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development
#- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
depends_on:
- db
networks:
- wordpress-network
db:
image: mysql:latest # https://hub.docker.com/_/mysql/ - or mariadb https://hub.docker.com/_/mariadb
ports:
- 127.0.0.1:3306:3306 # change ip if required
volumes:
- ./wp-data:/docker-entrypoint-initdb.d
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: password
networks:
- wordpress-network
networks:
wordpress-network:
driver: bridge
https://github.com/nezhar/wordpress-docker-compose
Docker & DevOps
Con i container posso ricreare l’ambiente per la build e di test
Con i container posso ricreare l’ambiente di produzione
Posso gestire in modo semplice i microservizi
Infrastruttura Come Codice
Docker nel Cloud
● Paralell Plesk
● K8s
● Docker swarm
● OpenShift
Domande ?
Don't ask to ask, just ask!
@gdiiorio
@arete

Contenu connexe

Tendances

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
 
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
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017MongoDB
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)Giuliano 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
 
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 studioPar-Tec S.p.A.
 
Introduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itIntroduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itFabio Ros
 
DevOps - Come diventare un buon DevOpper
DevOps -  Come diventare un buon DevOpperDevOps -  Come diventare un buon DevOpper
DevOps - Come diventare un buon DevOpperConsulthinkspa
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummiesfirenze-gtug
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Romualdo Gobbo
 
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
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxTruelite
 
Debian translation party 2
Debian translation party 2Debian translation party 2
Debian translation party 2Stefano Canepa
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetesblexin
 

Tendances (20)

Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)
 
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
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)
 
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
 
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 .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Introduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itIntroduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.it
 
Introduzione a docker
Introduzione a dockerIntroduzione a docker
Introduzione a docker
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
DevOps - Come diventare un buon DevOpper
DevOps -  Come diventare un buon DevOpperDevOps -  Come diventare un buon DevOpper
DevOps - Come diventare un buon DevOpper
 
Anatomia di un progetto open-source
Anatomia di un progetto open-sourceAnatomia di un progetto open-source
Anatomia di un progetto open-source
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
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
 
Git best practices
Git best practicesGit best practices
Git best practices
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente Linux
 
Debian translation party 2
Debian translation party 2Debian translation party 2
Debian translation party 2
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
 

Similaire à Docker & DevOps

ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerLuca Congiu
 
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
 
Docker Workshop - Coretech Summit 2018
Docker Workshop - Coretech Summit 2018Docker Workshop - Coretech Summit 2018
Docker Workshop - Coretech Summit 2018Yefry Figueroa
 
Meetup ASP.NET Core e Kubernetes
Meetup ASP.NET Core e KubernetesMeetup ASP.NET Core e Kubernetes
Meetup ASP.NET Core e Kubernetesdotnetcode
 
Alfresco meetup Roma - docker
Alfresco meetup Roma - dockerAlfresco meetup Roma - docker
Alfresco meetup Roma - dockerDavid Ciamberlano
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSNucleode Srl
 
Docker e Kubernetes per professionisti IT
Docker e Kubernetes per professionisti ITDocker e Kubernetes per professionisti IT
Docker e Kubernetes per professionisti ITYefry Figueroa
 
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
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migrationAndrea Cirioni
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]gioacchinolonardo
 
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
 
Docker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptx
Docker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptxDocker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptx
Docker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptxGiuliano Latini
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOpsdotnetcode
 

Similaire à Docker & DevOps (20)

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
 
Docker Workshop - Coretech Summit 2018
Docker Workshop - Coretech Summit 2018Docker Workshop - Coretech Summit 2018
Docker Workshop - Coretech Summit 2018
 
Meetup ASP.NET Core e Kubernetes
Meetup ASP.NET Core e KubernetesMeetup ASP.NET Core e Kubernetes
Meetup ASP.NET Core e Kubernetes
 
Docker jug taa
Docker   jug taaDocker   jug taa
Docker jug taa
 
Introduzione A Docker
Introduzione A DockerIntroduzione A Docker
Introduzione A Docker
 
Controllo di versione e Git
Controllo di versione e GitControllo di versione e Git
Controllo di versione e Git
 
Alfresco meetup Roma - docker
Alfresco meetup Roma - dockerAlfresco meetup Roma - docker
Alfresco meetup Roma - docker
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACS
 
Docker e Kubernetes per professionisti IT
Docker e Kubernetes per professionisti ITDocker e Kubernetes per professionisti IT
Docker e Kubernetes per professionisti IT
 
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 - ...
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migration
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]
 
Da DotNet a DotNetCore
Da DotNet a DotNetCoreDa DotNet a DotNetCore
Da DotNet a DotNetCore
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
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
 
Docker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptx
Docker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptxDocker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptx
Docker_vs_Rancher_chi_dominerà_i_Desktop_dei_developers.pptx
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOps
 

Plus de Gerardo Di Iorio

Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)Gerardo Di Iorio
 
Scan Back and Vertex Analysis
Scan Back and Vertex AnalysisScan Back and Vertex Analysis
Scan Back and Vertex AnalysisGerardo Di Iorio
 
Ricostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERA
Ricostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERARicostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERA
Ricostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERAGerardo Di Iorio
 

Plus de Gerardo Di Iorio (6)

Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)
 
Scan Back and Vertex Analysis
Scan Back and Vertex AnalysisScan Back and Vertex Analysis
Scan Back and Vertex Analysis
 
Ricostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERA
Ricostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERARicostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERA
Ricostruzione di interazioni di pioni nelle Emulsion Cloud Chamber di OPERA
 
Think open IoT
Think open IoTThink open IoT
Think open IoT
 
Privacy e sicurezza
Privacy e sicurezzaPrivacy e sicurezza
Privacy e sicurezza
 
Cubie board
Cubie boardCubie board
Cubie board
 

Docker & DevOps

  • 1. Docker & DevOps Gerardo Di Iorio @arete
  • 2. Chi Sono Gerardo Di Iorio Programmatore presso Organizzatore DevDay AV Linux dal 1992 ( potevo utilizzare UNIX su x86)
  • 3. Recap del talk precedente Git - gestione del sorgente ● Uso di git ● Branch,Merge,Rebase,Cherry-pick ● Collaborazione con altri sviluppatori ● Pull,Push Fetch Continuous Integration ● Effettua la Build e i Test Accenno a Docker
  • 4. DevOps In informatica DevOps (dalla contrazione inglese di development, "sviluppo", e operations, qui simile a "messa in produzione" o "deployment") è una metodologia di sviluppo del software che punta alla comunicazione, collaborazione e integrazione tra sviluppatori e addetti alle operations dell'information technology (IT).[1] DevOps vuole rispondere all'interdipendenza tra sviluppo software e IT operations, puntando ad aiutare un'organizzazione a sviluppare in modo più rapido ed efficiente prodotti e servizi software.[2][3][4][5]
  • 5. DevOps L'integrazione continua è un metodo di sviluppo software in cui gli sviluppatori aggiungono regolarmente modifiche al codice in un repository centralizzato, quindi la creazione di build e i test vengono eseguiti automaticamente. Distribuzione Continua è un metodo di sviluppo software in cui le modifiche al codice vengono applicate a una build, testate e preparate per il rilascio in produzione in modo automatico. Architettura di microservizi è un approccio alla progettazione in cui un'applicazione si basa su un gruppo di servizi di minori dimensioni. Ogni servizio esegue il proprio processo e comunica con gli altri servizi tramite un' interfaccia predefinita. Infrastruttura Come Codice è una prassi secondo cui provisioning e gestione dell'infrastruttura avvengono tramite metodologie di sviluppo di software e codice quali il controllo di versione e l'integrazione continua.
  • 6. Sviluppiamo un progetto in C #include <stdio.h> int main() { // printf() displays the string inside quotation printf("Hello, World!"); return 0; } Strumenti Necessari Sviluppo ● Editor (Vim,Emacs,Visual Studio Code,Eclispe,etc) ● VCS (git,mercurial,bazar,etc) ● Compilatore (gcc,MVSC,etc) ● Header e Librerie per la compilazione Debug & Run ● Librerie per il debug ● Librerie per il runtime HelloWorld.c Build # gcc -o helloword helloword.c Dipendenze # ldd helloword linux-vdso.so.1 (0x00007ffd5e5e3000) libc.so.6 => /usr/lib/libc.so.6 (0x00007f02f1d10000) /lib/ld-linux-x86-64.so.2 (0x00007f02f22d0000)
  • 7. Setup ambiente : Progetto in C Sviluppo ● Editor (Vim,Emacs,Visual Studio Code,Eclispe,etc) ● VCS (git,mercurial,bazar,etc) ● Compilatore (gcc,MVSC,etc) ● Header e Librerie per la compilazione Debug & Run ● Librerie per il debug ● Librerie per il runtime # sudo apt-get install vim # sudo apt-get install git # sudo apt-get install git # sudo apt-get install gcc-4.6-base cpp-4.6 libgomp1 libquadmath0 # sudo apt-get install libc6-dev # sudo apt-get install libc6-dbg Solo le stesse librerie dinamiche che usa il mio OS Cosa devo installare sul mio pc ?
  • 8. Progetto in C : static build #include <stdio.h> int main() { // printf() displays the string inside quotation printf("Hello, World!"); return 0; } Strumenti Necessari Sviluppo ● Editor (Vim,Emacs,Visual Studio Code,Eclispe,etc) ● VCS (git,mercurial,bazar,etc) ● Compilatore (gcc,MVSC,etc) ● Header e Librerie per la compilazione Debug & Run ● Nulla HelloWorld.c Build # gcc -static -o helloword helloword.c Nessuna Dipendenza # ldd helloword non e’ un eseguibile dinamico
  • 9. Enviroment differenti : Build Android Android Distribuzione consigliata: Ubuntu 14.04 Ma io ho Fedora 27 !!!
  • 10. Soluzione : Virtual Machine vs Container ● cosa serve ad un exe per essere eseguito ? ● Posso creare un ambiente isolato con tutte le corrette dipendenze ? ● Posso eseguire un comando in questo ambiente isolato ? ● Soluzione VM oppure Container
  • 11. Container Vantaggi ● Replica dell’ambiente di produzione. ● Modulare ● Scalabile ● Separazione tra i servizi ● Portabile ● Personalizzabile ● Utilizzo solo le risorse necessarie ● Nessun Hypervisor ● Kernel condiviso
  • 12. Container: Vantaggi DevOps ● Deployment semplificato: impacchettando un’applicazione in un singolo immagine distribuibile e configurabile. Docker semplifica il deployment di qualsiasi applicazione. ● Disponibilità istantanea: “virtualizzando” solo le componenti necessarie all’esecuzione dell’applicazione il container si avvia in un ventesimo di secondo, rispetto ai tempi di avvio di una VM ● Controllo granulare: i container consentono agli operatori e agli sviluppatori di suddividere le risorse computazionali in microservizi, garantendo così un controllo superiore sull’eseguibilità delle applicazioni e un miglioramento delle prestazioni dell’intero sistema. ● Deploy semplificato: l’amministrazione dei cicli di rilascio delle applicazioni è semplificato: basta pubblicare la nuova immagine docker e ricaricare il container per avere tutto aggiornato ● Testing: le attività di testing traggono un beneficio,infatti il testing avviene solo su container, che è la stessa situazione in ambiente di produzione, isolato dagli altri ambienti.
  • 13. ● 1979: Unix V7 Viene introdotta la system call chroot : cambia la root directory di un processo figlio in una nuova posizione del filesystem. Permette l’isolazione del processo all’accesso del file-system ● 2000: FreeBSD Jails consente agli amministratori di suddividere un sistema in diversi sistemi indipendenti più piccoli, denominati "jail", con la possibilità di assegnare un indirizzo IP per ogni sistema e configurazione. ● 2001: Linux VServer e’ un meccanismo in cui e’ possibile partizionare le risorse (filesystem,indirizi di memoria,indirizzi di rete) ● 2004: Oracle Containers Solaris permette di gestire le risorse del sistema e la separazione fra zone, le quali erano in grado di sfruttare le funzionalità di snapshot di ZFS. ● 2005: Open VZ (Open Virtuzzo) Tecnologia di virtualizzazione a livello di sistema operativo per Linux, che utilizza il kernel linux con una patch per la virtualizzazione, isolamento, gestione delle risorse etc. ● 2006: Process Container è stato progettato per limitare, contabilizzare e isolare l'utilizzo delle risorse (CPU, memoria, I / O del disco, rete) di una raccolta di processi. È stato rinominato "Control Groups (cgroups)" un anno dopo e infine unito al kernel Linux 2.6.24. ● 2008: LXC stata la prima implementazione più completa di Linux container manager. È stato implementato nel 2008 utilizzando cgroup e spazi dei nomi Linux(namespaces) e funziona su un singolo kernel Linux senza richiedere alcuna patch. ● 2011: Warden CloudFoundry ha avviato Warden nel 2011, utilizzando LXC nella fase iniziale e in seguito sostituendolo con una propria implementazione.Warden include un servizio per gestire cgroup, spazi dei nomi e il ciclo di vita del processo. ● 2013 : LMCTFY è stato lanciato nel 2013 come una versione open source dello stack container di Google, fornendo contenitori per applicazioni Linux. ● 2013: Docker e il futuro Come ha fatto Warden, Docker ha utilizzato anche LXC nelle fasi iniziali e successivamente ha sostituito quel gestore di container con la propria libreria, libcontainer. Storia di Docker
  • 14. Docker : Installazione ● L’installazione di Docker dipende dal sistema operativo ● Windows 10 ha bisogno di HyperV (Windows 10 Professional) ● Sistemi Windows senza HyperV (virtualbox image) ● Quando possibile seguire le instruzioni riportati sul sito di Docker: ○ Il processo di installazione è trasparente e standard : apt-get or yum ○ Tutte le dipendenze vengono automaticamente risolte ○ I file di configurazioni sono impostati correttamente ○ Gli aggiornmanti sono automatici Get Docker https://www.docker.com/get-docker
  • 15. Docker : Architettura ● Cosa è Docker? ● Docker è una piattaforma per sviluppatori e sysadmin per “ develop, ship, and run applications”, basata su containers ● Docker è open-source, scritta in Go e originariamente basata su libvirt e LXC - dopo rimpiazzata dalla libreria libcontainer, scritta in Go. ● Docker semplifica e standardizza la creazione e la manutenzione di containers, eespone delle API semplici ed elegenti per effetuare query e azioni ● Architettura Client -- Server ● Docker Engine (Server) ha bisogno di un kernel 64bit e di essere avviata come root ● Docker cli (client) da qualsiasi device/piattaforma , si connette al Docker Engine via Rest Api
  • 16. Docker : Quale Versione ? ● Docker-EE ● Docker-CE Edge / Relase Channel ● Moby
  • 17. Vocabolario Docker Images Rappresenta la base di un Docker container, contiene l'intera applicazione. Container L’unità standard nella quale vive e viene eseguita un comando HUB servizio cloud o locale, dove si registrano e redistribuiscono le immagini di docker Volumi E' un file system esterno al file system del container Network tipologie di networking per comunicare tra container e host
  • 18. Docker: Image ● 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 ● La costruzione di un'immagine è un'operazione incrementale ● Aggiornamento da/al docker hub non dovrò ricaricare tutta l'immagine ma solo le modifiche.
  • 19. Docker: Container ● 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.
  • 20. Docker: HUB ● è un repository pubblico dove vengono caricate le immagine. ● Immagini dei più diffusi software e di sviluppo web,database,etc ● Immagini Ufficiali ● Immagini pubbliche degli utenti ● Le immagini sono taggate versione,etc ● Possono essere caricate (cli,CI,travis,...) ● Possono essere scaricate ● Possiamo creare la nostra immagine e condividerla ● L’Hub puo’ creare/aggiornare autonomamente attraverso un Dockerfile
  • 21. Docker: Volumi I container possono essere cancellati e ricreati… Dove Salvo i Dati ? Come faccio ad avere la persistenza dei dati ? ● Volume ● Bind Mounts (link container path con host folder) File di configurazione,data storage, log etc...
  • 22. Docker: Volumi Se devo fare il sync del backup verso S3 ? Creo un container con il comando S3, con il volume backup!
  • 23. Docker : Networking ● bridge quando sono necessari più contenitori per comunicare sullo stesso host Docker. ● host quando lo stack di rete non deve essere isolato dall'host Docker, ma si desidera isolare altri aspetti del contenitore. ● overlay quando hai bisogno di contenitori in esecuzione su diversi host Docker per comunicare o quando più applicazioni lavorano insieme utilizzando i servizi di sciame. ● Macvlan quando si esegue la migrazione da un'installazione di VM o si richiede che i contenitori sembrano host fisici sulla rete, ognuno con un indirizzo MAC univoco. ● I plug-in di rete di terze parti consentono di integrare Docker con stack di rete specializzati.
  • 24. Docker : Networking ● Con docker e’ possibile isolare i container utilizzando reti virtuali dedicate. ● La rete di default per docker e’ il bridge (docker0) ● I container possono collegarsi o collegarsi ad una rete in qualsiasi momento ● E’ possibili effettuare un port mapping tra le porte del container e quella dell’host
  • 25. Docker Comandi I comandi di docker sono strutturati docker <comandoPrincipale> <comandoSecondario> [parametri] Lista dei comandi docker La versione di docker installata sul sistema docker version Informazioni sull'installazione di docker del sistema docker info
  • 26. Docker Image Lista delle immagini in cache locale # docker image ls Per scaricare un'immagine dall’ hub # docker pull <nomeImmagine> Per eliminare un' immagine # docker rmi <nomeImmagine> Per rimuovere le immagini non usate: # docker image prune Storia di un'immagine # docker image history <nomeImmagine> Per visualizzare contenuto/configurazione di un'immagine # docker image inspect <nomeImmagine> Per creare un immagine da tar # docker image import <file|url> <nomeImmagine:[tag]>
  • 27. Docker Container Lista di tutti i container # docker ps -a Container attivi # docker ps Creare un container da un immagine # docker run <nomeImmagine> Crea una immagine da un container # docker commit Avviare un comando nel container in modo interattivo # docker exec -it <nomeContainer|idContainer> <command> Per visualizzare contenuto/configurazione di un'container # docker inspect <nomeContainer> Cancellare un container # docker rm <nomeContainer>
  • 28. Docker Container -> Image Partendo da un immagine base la modifichiamo per creare una nostra immagine # docker create --name web -p 8080:80 nginx:alpine 7e3daf8129b286c5b8febe4675408fa3dcdc12b3b30a035370dfd1847dbf2385 # docker cp index.html web:/usr/share/nginx/html/ # docker start web web # curl localhost:8080 Adesso vogliamo creare la nostra immagine da questo container # docker ps -a (Ho il commit dello stato del container) # docker commit -m”Web + html” -a “DevDayBN” <commit> devdaybnweb
  • 29. Docker Volume Crea un volume # docker volume create Elenco dei volumi # docker volume ls Eliminare i volumi non usati # docker volume prune Eliminare un volume # docker volume rm Per visualizzare contenuto/configurazione di un volume # docker inspect <nomeVolume> Per dare un nome al volume # docker volume create -d <nomeVolume>
  • 30. Variabili di Ambiente # curl -I HEAD -i localhost:8080 # docker exec -it web date La Data e’ sbagliata, devo configurare /etc/localtime correttamente ● devo montare il container settare la timezone ● ma se devo simulare un server che si trova in America ? ● ma se devo simulare un server che si trova in Cina ? # docker exec -it web env TZ=Europe/Rome date
  • 31. 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. Per creare un immagine da un Dockerfile # docker image build -t nodewebapp . # docker run -p 8080:8080 nodewebapp # curl localhost:8080 FROM node:carbon # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm install --only=production # Bundle app source COPY . . EXPOSE 8080 CMD [ "npm", "start" ]
  • 32. Docker Container : Progetto in C Cli # docker run --rm --user="$(id -u):$(id -g)" --net=none -v "$PWD":/tmp frolvlad/alpine-gcc gcc /tmp/helloworld.c -o /tmp/helloworld -static Dockerfile FROM frolvlad/alpine-gcc RUN mkdir -p /app WORKDIR /app COPY helloworld.c . RUN gcc -static -o helloworld helloworld.c FROM scratch COPY --from=0 /app/helloworld /helloworld CMD ["/helloworld"]
  • 33. Docker Container : Build Arduino Docker image per compilare Firmaware per Arduino https://github.com/opsxcq/docker-dev-arduino
  • 34. Docker compose Il docker-compose.yml è un file ben preciso, scritto in yaml, che ci permette di creare un ambiente a partire da uno o più container. Permette il settaggio di: ● variabili ● variabili d'ambiente ● porte ● referenze ad altri container ● volumi ● reti
  • 35. Docker compose WordPress version: '2' services: wordpress: image: wordpress:latest # https://hub.docker.com/_/wordpress/ ports: - 127.0.0.1:80:80 # change ip if required volumes: - ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini - ./wp-app:/var/www/html # Full wordpress project #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: password depends_on: - db networks: - wordpress-network db: image: mysql:latest # https://hub.docker.com/_/mysql/ - or mariadb https://hub.docker.com/_/mariadb ports: - 127.0.0.1:3306:3306 # change ip if required volumes: - ./wp-data:/docker-entrypoint-initdb.d environment: MYSQL_DATABASE: wordpress MYSQL_ROOT_PASSWORD: password networks: - wordpress-network networks: wordpress-network: driver: bridge https://github.com/nezhar/wordpress-docker-compose
  • 36. Docker & DevOps Con i container posso ricreare l’ambiente per la build e di test Con i container posso ricreare l’ambiente di produzione Posso gestire in modo semplice i microservizi Infrastruttura Come Codice
  • 37. Docker nel Cloud ● Paralell Plesk ● K8s ● Docker swarm ● OpenShift
  • 38. Domande ? Don't ask to ask, just ask! @gdiiorio @arete