composizione e orchestrazione di contenitori...

21
Architettura dei Sistemi Software Luca Cabibbo Luca Cabibbo ASW Luca Cabibbo ASW Composizione e orchestrazione di contenitori Docker dispensa asw895 marzo 2019 Composizione e orchestrazione di contenitori Docker 1 You can't play a symphony alone, it takes an orchestra to play it. Navjot Singh Sidhu Luca Cabibbo ASW - Fonti Docker https://docs.docker.com/ Docker Compose https://docs.docker.com/compose/ Docker – Swarm mode overview https://docs.docker.com/engine/swarm/ Composizione e orchestrazione di contenitori Docker 2

Upload: others

Post on 21-Jun-2020

16 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Architettura dei Sistemi

Software

Luca Cabibbo

Luca Cabibbo ASWLuca Cabibbo ASW

Composizione e orchestrazione di

contenitori Dockerdispensa asw895

marzo 2019

Composizione e orchestrazione di contenitori Docker1

You can't play a symphony alone, it takes an orchestra to play it.

Navjot Singh Sidhu

Luca Cabibbo ASW

- Fonti

Docker

https://docs.docker.com/

Docker Compose

https://docs.docker.com/compose/

Docker – Swarm mode overview

https://docs.docker.com/engine/swarm/

Composizione e orchestrazione di contenitori Docker2

Page 2: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

- Obiettivi e argomenti

Obiettivi

introdurre ed esemplificare la composizione e l’orchestrazione di contenitori nel contesto di Docker

Argomenti

introduzione

composizione di contenitori

composizione con Docker Compose

orchestrazione con uno swarm Docker

discussione

Composizione e orchestrazione di contenitori Docker3

Luca Cabibbo ASW

* Introduzione

Un contenitore Docker ha in genere lo scopo di incapsulare ed eseguire una singola istanza di un servizio software individuale

tuttavia, un sistema software distribuito è composto da molti servizi software

inoltre, per motivi di scalabilità e disponibilità, questi servizi sono in genere anche replicati

la composizione e l’orchestrazione di contenitori riguardano la gestione e l’esecuzione di sistemi distribuiti complessi, scalabili e disponibili, realizzati con la tecnologia dei contenitori

Composizione e orchestrazione di contenitori Docker4

Page 3: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Composizione e orchestrazione di contenitori

La composizione e l’orchestrazione di contenitori riguardano la gestione e l’esecuzione di sistemi distribuiti, scalabili e disponibili, realizzati con la tecnologia dei contenitori

la composizione di contenitori è la possibilità di definire ed eseguire applicazioni multi-servizi e multi-contenitore

ciascun contenitore viene utilizzato per eseguire un diverso servizio – l’intera applicazione è definita dalla composizione di questi servizi, tra loro distribuiti

inoltre, l’orchestrazione di contenitori riguarda l’esecuzione di applicazioni multi-servizi e multi-contenitore su più (molti) nodi

le funzionalità di base di Docker Engine esaminate finora consentono di gestire le forme più semplici di composizione

le applicazioni multi-contenitore e distribuite su più nodi possono essere gestite mediante funzionalità aggiuntive di Docker Engine e/o altri strumenti dell’ecosistema di Docker

Composizione e orchestrazione di contenitori Docker5

Luca Cabibbo ASW

* Composizione di contenitori

La composizione di contenitori è la possibilità di definire ed eseguire applicazioni multi-contenitore

come esempio, consideriamo di nuovo il servizio sentence per generare frasi in modo casuale – come presentata nella dispensa su Spring Cloud – che utilizza degli ulteriori servizi per generare parole di tipo diverso (subject, verb e object), nonché un servizio di discovery eureka e un gateway zuul

Composizione e orchestrazione di contenitori Docker6

subject

verb

object

sentencezuul

eureka

8080

Page 4: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

- Composizione con Docker

Le funzionalità di base di Docker consentono di gestire i casi di composizione più semplici – in cui ci sono diversi tipi di contenitori (servizi), ciascuno con un numero prefissato di istanze

vediamo come realizzare il servizio sentence per generare frasi usando le funzionalità di base di Docker

Composizione e orchestrazione di contenitori Docker7

subject

verb

object

sentencezuul

eureka

8080

Luca Cabibbo ASW

Un’applicazione per frasi casuali

Per realizzare il servizio sentence per generare frasi casuali –insieme ai servizi aggiuntivi subject, verb, object, eureka e zuul –possiamo utilizzare

immagini diverse per i servizi sentence, word, eureka e zuul

uno o più contenitori per il servizio sentence – per affidabilità e scalabilità

uno o più contenitori per ciascuno dei servizi subject, verb e object – tutti basati sull’immagine per il servizio word

ulteriori contenitori per eureka e zuul

il collegamento in rete tramite una rete definita dall’utente sentence-net

in particolare, questa rete consente ai diversi contenitori di vedere il servizio eureka su un nodo di nome eureka

inoltre la porta 8080 di zuul va esposta sull’host

Composizione e orchestrazione di contenitori Docker8

Page 5: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Modifiche alle applicazioni

Rispetto a quanto visto nella dispensa su Spring Cloud, bisogna modificare le configurazioni dei nostri servizi come segue

configurazione dei servizi sentence e word (file application.properties)

eureka.client.serviceUrl.defaultZone deve puntare a eureka:8761/eureka/ – anziché a localhost:8761/eureka/

server.port deve valere 8080

configurazione del servizio zuul (file application.properties)

eureka.client.serviceUrl.defaultZone deve puntare a eureka:8761/eureka/ – anziché a localhost:8761/eureka/

Composizione e orchestrazione di contenitori Docker9

Luca Cabibbo ASW

Dockerfile

Per ciascuno dei servizi bisogna definire un Dockerfile

come esempio, questo è il Dockerfile per il servizio sentence

l’applicazione Spring per il servizio sentence viene associata ad una porta nota (del contenitore, non dell’host) – ad es., 8080

i Dockerfile per gli altri servizi sono simili

Composizione e orchestrazione di contenitori Docker10

# Dockerfile per il servizio sentence

FROM openjdk:8-jdk

ADD build/libs/sentence.jar sentence.jar

EXPOSE 8080

ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m", "-jar", "sentence.jar"]

Page 6: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Immagini dei contenitori

Questo è lo script di creazione delle immagini Docker per l’applicazione sentence

per evitare un errore comune

dopo aver modificato (il codice sorgente di) una delle applicazioni, ricordarsi (sempre!) di effettuare (o ripetere) sia la build (Java) delle applicazioni che la build (Docker) delle immagini Docker!

Composizione e orchestrazione di contenitori Docker11

#!/bin/bash

docker build --rm -t eureka-img ./eureka-server docker build --rm -t word-img ./word-service docker build --rm -t sentence-img ./sentence-service docker build --rm -t zuul-img ./zuul-gateway

Luca Cabibbo ASW

Avvio dei contenitori

Questo è lo script per la creazione e l’avvio dei contenitori per l’intera applicazione – nonché per la creazione di una rete privata

Composizione e orchestrazione di contenitori Docker12

#!/bin/bash

docker network create sentence-net

docker run -d --network= sentence-net --name=eureka eureka-img

docker run -d --network= sentence-net -e "SPRING_PROFILES_ACTIVE=subject" --name=subject word-img

docker run -d --network= sentence-net-e "SPRING_PROFILES_ACTIVE=verb" --name=verb word-img

docker run -d --network= sentence-net-e "SPRING_PROFILES_ACTIVE=object" --name=object word-img

docker run -d --network= sentence-net --name=sentence-1 sentence-imgdocker run -d --network= sentence-net --name=sentence-2 sentence-img

docker run -d --network= sentence-net -p 8080:8080 --name=zuul zuul-img

Page 7: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

* Composizione con Docker Compose

Docker Compose è uno strumento per definire ed eseguire applicazioni Docker composte da più contenitori

Docker Compose è basato sull’utilizzo di un file di configurazione docker-compose.yml per specificare i diversi servizi che compongono un’applicazione

dopo di che, le immagini per i contenitori dell’applicazione si possono costruire con un singolo comando

docker-compose build

poi si può avviare l’applicazione (creando e avviando i suoi contenitori) con un singolo comando

docker-compose up

infine, l’applicazione può essere arrestata con un singolo comando

docker-compose down

Composizione e orchestrazione di contenitori Docker13

Luca Cabibbo ASW

Servizi

In Docker Compose, un’applicazione è composta da uno o più servizi

un servizio (in Docker Compose) corrisponde intuitivamente ad un contenitore dedicato all’esecuzione di un servizio applicativo – ad es., un microservizio in un’applicazione a microservizi

per ciascun servizio, nel file docker-compose.yml vanno specificati

l’immagine per il contenitore

il comando da eseguire nel contenitore (se diverso da quello di default)

ulteriori informazioni e vincoli aggiuntivi

Composizione e orchestrazione di contenitori Docker14

Page 8: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Esempio

Ecco la struttura (parziale) delle cartelle per l’applicazione di esempio sentence per generare frasi in modo casuale

Composizione e orchestrazione di contenitori Docker15

|+--- docker-compose.yml+--- eureka-server/ | +--- Dockerfile| +--- build.gradle| +--- src/ | | +--- ... | \--- build/ | +--- ... +--- sentence-service/ | +--- ... +--- word-service/ | +--- ... \--- zuul-gateway/

+--- ...

Luca Cabibbo ASW

Esempio

Ecco il file docker-compose.yml per l’applicazione di esempio sentence per generare frasi in modo casuale

Composizione e orchestrazione di contenitori Docker16

version: '2'

services:eureka:

build:context: ./eureka-server

container_name: eureka

subject:build:

context: ./word-serviceenvironment:

- SPRING_PROFILES_ACTIVE=subject

verb: ... simile a subject ...

object: ... simile a subject ...

... segue ...

Page 9: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Esempio

Ecco il file docker-compose.yml per l’applicazione di esempio sentence per generare frasi in modo casuale

Composizione e orchestrazione di contenitori Docker17

sentence:build:

context: ./sentence-service

zuul:build:

context: ./zuul-gatewaycontainer_name: zuulports:- "8080:8080"

Luca Cabibbo ASW

Ulteriori osservazioni

Alcune ulteriori osservazioni su Docker Compose

Docker Compose definisce automaticamente una rete dedicata all’applicazione – tutti i suoi servizi/contenitori sono collegati a questa rete, e possono comunicare tramite il loro nome

è anche possibile definire altre reti e topologie di rete complesse

in questo modo, un host può ospitare più ambienti isolati, ciascuno dedicato ad una diversa applicazione – è anche possibile avere più copie di una stessa applicazione (in ambienti separati e isolati)

Composizione e orchestrazione di contenitori Docker18

Page 10: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Ulteriori osservazioni

Alcune ulteriori osservazioni su Docker Compose

Docker Compose supporta anche la gestione di volumi

l’operazione di build evita di ripetere la creazione di immagini già create ed aggiornate

consente anche di definire più configurazioni di una stessa applicazione – mediante meccanismi di estensione dei file di configurazione e l’uso di variabili

Docker Compose può essere usato soprattutto per supportare lo sviluppo e il test di applicazioni multi-servizi – nel computer dello sviluppatore o in un server CI

Composizione e orchestrazione di contenitori Docker19

Luca Cabibbo ASW

* Orchestrazione con uno swarm Docker

L’orchestrazione di contenitori riguarda la definizione e l’esecuzione di applicazioni multi-contenitore su più (molti) nodi

l’orchestrazione di contenitori è necessaria per eseguire un’applicazione multi-contenitore in un cluster, in modo scalabile ed affidabile – il che è di solito richiesto per rilasciare le applicazioni in produzione

Composizione e orchestrazione di contenitori Docker20

Page 11: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

- Docker in modalità swarm

Docker può essere utilizzato, in produzione, nella cosiddetta modalità “swarm” (letteralmente, “sciame”) – uno swarm è un cluster di nodi Docker (ovvero, di host che eseguono Docker Engine)

la modalità swarm fornisce l’orchestrazione di contenitori –consente di specificare applicazioni multi-servizi e multi-contenitore e di eseguirle su più nodi

Docker può essere utilizzato, dalla linea di comando, per creare e configurare uno swarm, rilasciare applicazioni nello swarm e gestire il comportamento dello swarm

in pratica, i diversi contenitori necessari per un’applicazione vengono rilasciati ed eseguiti in nodi diversi dello swarm

Docker Engine fornisce la modalità swarm in modo nativo da luglio 2016 (versione 1.12) – in precedenza veniva utilizzato uno strumento (separato) chiamato Docker Swarm

Composizione e orchestrazione di contenitori Docker21

Luca Cabibbo ASW

Docker in modalità swarm

Caratteristiche principali della modalità swarm

la gestione di un cluster swarm è integrata con Docker Engine, e può essere utilizzato lo stesso client (CLI o REST)

utilizzo di un modello dichiarativo per i servizi, che estende quello di Docker Compose – ad es., supporta la scalabilità dei servizi, sulla base della specifica di quante repliche (contenitori) vanno allocati per ciascun servizio

gestione dell’affidabilità – il cluster swarm effettua il monitoraggio continuo dei nodi e dei servizi, con la possibilità di ricreare automaticamente le repliche dei servizi che falliscono

rete multi-host e sicurezza – comunicazione tra contenitori nello swarm, mediante un’overlay network per i servizi

servizi di supporto per service discovery e load balancing (sia interno che esterno)

supporto per l’aggiornamento incrementale dei servizi

Composizione e orchestrazione di contenitori Docker22

Page 12: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Concetti della modalità swarm

I concetti principali della modalità swarm

uno swarm è un cluster di nodi Docker Engine (basato su SwarmKit), dove è possibile rilasciare e orchestrare servizi

un nodo è un’istanza di Docker Engine che partecipa a uno swarm – i nodi swarm possono essere distribuiti su più macchine fisiche, virtuali o sul cloud

Composizione e orchestrazione di contenitori Docker23

Luca Cabibbo ASW

Concetti della modalità swarm

I concetti principali della modalità swarm

un servizio (service) è la definizione di un “compito” da eseguire nello swarm

i servizi costituiscono la nozione centrale usata dagli utenti (amministratori) per interagire con lo swarm

ciascun servizio viene specificato in termini di un’immagine di contenitore e dei comandi da eseguire nei relativi contenitori

un task (“compito”) è un contenitore (ovvero, un’istanza di contenitore) per un servizio

l’esecuzione di un servizio è basata sull’esecuzione di un certo numero di task per quel servizio – tanti quante sono le repliche desiderate del servizio (discusse più avanti)

i task costituiscono l’unità atomica di schedulazione nello swarm

Composizione e orchestrazione di contenitori Docker24

Page 13: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Concetti della modalità swarm

I concetti principali della modalità swarm

ci sono due tipi di nodi

i nodi manager ricevono (dagli utenti) richieste di rilascio di servizi – che gestiscono schedulando task ai nodi worker

i nodi worker ricevono (dai nodi manager) richieste di task e li eseguono

in un cluster ci possono essere

più nodi worker (per disponibilità e scalabilità)

più nodi manager (per disponibilità) – di cui un leader (con una rielezione automatica, in caso di un suo fallimento)

inoltre i nodi manager

si occupano della gestione del cluster e dei suoi nodi

per default, in uno swarm i nodi manager svolgono anche il ruolo di worker – anche se è possibile configurarli perché agiscano esclusivamente come manager

Composizione e orchestrazione di contenitori Docker25

Luca Cabibbo ASW

Concetti della modalità swarm

I concetti principali della modalità swarm

ci sono due tipi di servizi

servizi replicati – per cui lo swarm deve allocare un numero configurabile di repliche del task corrispondente

servizi globali – con un task per ciascun nodo

le responsabilità di orchestrazione dei nodi manager comprendono la gestione dello stato desiderato dei servizi –per fare in modo che nello swarm venga eseguito il numero desiderato di task per ciascun servizio, anche a seguito dell’eventuale fallimento di contenitori e nodi

i nodi manager effettuano il monitoraggio dei contenitori e dei nodi, e se serve rischedulano i task falliti su altri nodi

Composizione e orchestrazione di contenitori Docker26

Page 14: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Concetti della modalità swarm

I concetti principali della modalità swarm

bilanciamento del carico

è possibile (e semplice) esporre all’esterno di uno swarm le porte per i servizi in esecuzione nello swarm

ogni nodo dello swarm è infatti in grado di accettare richieste sulle porte pubblicate per ciascuno dei servizi dello swarm(“ingress routing mesh”) – anche se quel nodo non ha task (contenitori) corrispondenti a quel servizio

quando un client fa una richiesta per un servizio (a un qualunque nodo dello swarm), il load balancer dello swarmgira la richiesta a una replica attiva per quel servizio

in questo modo, qualunque componente esterno (come ad es., un load balancer per il cloud) può accedere ai servizi dello swarm, sulle loro porte pubblicate, a partire da qualunque nodo dello swarm

Composizione e orchestrazione di contenitori Docker27

Luca Cabibbo ASW

- Servizi in uno swarm

Prima di discutere come avviene in pratica l’orchestrazione di contenitori, discutiamo la creazione e l’esecuzione di un servizio in uno swarm

per prima cosa, è necessario inizializzare lo swarm (se non è stato già fatto in precedenza)

per semplicità, usiamo uno swarm costituito da un singolo nodo

eseguire su quel nodo il comando docker swarm init

nella creazione di un servizio in uno swarm, bisogna far riferimento a delle immagini Docker in un registry (che deve essere accessibile da tutti i nodi dello swarm)

non è invece possibile far riferimento ad immagini nella cache oppure a dei Dockerfile (come in Docker Compose)

Composizione e orchestrazione di contenitori Docker28

Page 15: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Uso di Docker Hub

Per salvare un’immagine su Docker Hub, si proceda come segue

effettuare il login su Docker Hub (se necessario)

eseguire il comando docker login – in questa dispensa viene usato l’utente aswroma3 – ciascuno deve utilizzare il proprio account e le proprie credenziali

creare l’immagine

il comando docker build --rm -t aswroma3/hello . crea l’immagine (però localmente)

effettuare il push dell’immagine su Docker Hub

con il comando docker push aswroma3/hello

si noti che, se si vuole semplicemente utilizzare un’immagine presente su Docker Hub, non è necessario effettuare il login

Composizione e orchestrazione di contenitori Docker29

Luca Cabibbo ASW

Servizi in uno swarm

In uno swarm, le applicazioni più semplici, mono servizio, possono essere gestite mediante il comando docker service

docker service create avvia un servizio nello swarm

ad es., avvio di un servizio hello (di immagine aswroma3/hello)

docker service create --name hello --publish 8080:8080 --mode replicated --replicas 2 aswroma3/hello

i contenitori per i task associati al servizio vengono schedulati ed eseguiti nei diversi nodi dello swarm

in pratica, il servizio hello può essere acceduto alla porta 8080 di ciascun nodo dello swarm

è anche possibile scalare dinamicamente i servizi

ad es., docker service scale hello=3

il servizio può essere arrestato con docker service rm hello

Composizione e orchestrazione di contenitori Docker30

Page 16: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

- Orchestrazione in uno swarm

La specifica della composizione di un’applicazione in uno swarm è simile alla specifica della composizione con Docker Compose –ma ci sono alcune differenze

la composizione di un’applicazione può essere espressa come uno stack, che è l’insieme dei servizi che costituisce un’applicazione

la specifica di uno stack va descritta in un file YAML – ad es., ancora di nome docker-compose.yml

la sintassi da utilizzare però è un po’ diversa da quella di Docker Compose – poiché ciascuna sintassi ha delle caratteristiche esclusive

in effetti, è possibile “mischiare” le due sintassi – ciascuno dei due strumenti prenderà in considerazione solo gli elementi di proprio interesse (ed ignorerà gli altri)

Composizione e orchestrazione di contenitori Docker31

Luca Cabibbo ASW

Un’applicazione per frasi casuali

Consideriamo ancora la nostra applicazione per la generazione di frasi casuali

come servizio di service discovery, decidiamo di utilizzare quello fornito dallo swarm – anziché Eureka

continuiamo invece ad utilizzare i servizi sentence, subject, verb, object e zuul

Composizione e orchestrazione di contenitori Docker32

Page 17: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Modifiche alle applicazioni

Rispetto alla versione per Docker Compose, bisogna modificare i nostri servizi come segue

in tutte le applicazioni

rimuovere la dipendenza starter per Eureka Client (che non viene più usato)

dalla configurazione (file application.properties) rimuovere la sezione per Eureka

inoltre, nel servizio sentence, i client Feign devono specificare la locazione dei servizi per i diversi tipi di parole (poiché non vengono più acceduti mediante Eureka) – ad esempio

Composizione e orchestrazione di contenitori Docker33

@FeignClient(name="subject", url="subject:8080")public interface SubjectClient { ... }

Luca Cabibbo ASW

Modifiche alle applicazioni

Rispetto alla versione per Docker Compose, bisogna modificare i nostri servizi come segue

va anche modificata la configurazione di Zuul del servizio zuul(file application.yml) – anche quella faceva riferimento a Eureka

Composizione e orchestrazione di contenitori Docker34

zuul:routes:

sentence:path: /sentence/**url: http://sentence:8080

subject:path: /subject/**url: http://subject:8080

verb:path: /verb/**url: http://verb:8080

object:path: /object/**url: http://object:8080

Page 18: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Composizione con uno stack

Ecco il file docker-compose.yml per l’applicazione di esempio

si noti l’uso della versione 3 (anziché 2)

Composizione e orchestrazione di contenitori Docker35

version: '3'

services:subject:

image: aswroma3/word-swarmbuild: ./word-serviceenvironment:

- SPRING_PROFILES_ACTIVE=subjectdeploy:

mode: replicatedreplicas: 2

verb: ... simile a subject ...

object: ... simile a subject ...

... segue ...

Luca Cabibbo ASW

Composizione con uno stack

Ecco il file docker-compose.yml per l’applicazione di esempio

Composizione e orchestrazione di contenitori Docker36

sentence:image: aswroma3/sentence-swarmbuild: ./sentence-servicedeploy:

mode: replicatedreplicas: 2

zuul:image: aswroma3/sentence-zuul-swarmbuild: ./zuul-gatewayports:- "8080:8080"

Page 19: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

Push delle immagini su Docker Hub

Per creare e salvare le immagini su Docker Hub (se necessario), si proceda come segue

effettuare il login su Docker Hub

creare le immagini con il comando docker-compose build – che crea tutte le immagini localmente

effettuare il push delle immagini su Docker Hub con il comando docker-compose push

in pratica, Docker Compose prende in considerazione sia l’opzione build (per la locazione del contesto e del Dockerfile) che l’opzione image (con il nome dell’immagine)

l’opzione build viene invece ignorata dal comando dockerstack deploy (dello swarm)

Composizione e orchestrazione di contenitori Docker37

Luca Cabibbo ASW

Composizione con uno stack

L’applicazione sentence può essere poi avviata con il comando

docker stack deploy--compose-file docker-compose.yml sentence

è anche possibile monitorare lo stato dell’applicazione e dei servizi che la compongono

docker stack ps sentence

docker stack services sentence

docker service ps sentence_subject

è anche possibile scalare dinamicamente i servizi che compongono lo stack

docker service scale sentence_subject=3

infine, per arrestare lo stack

docker stack rm sentence

Composizione e orchestrazione di contenitori Docker38

Page 20: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

- Aggiornamento incrementale di servizi

Docker, in modalità swarm, supporta l’aggiornamento incrementale (rolling update) dei servizi in esecuzione

è possibile chiedere l’aggiornamento di un servizio in esecuzione nello swarm specificando la nuova immagine su cui deve essere basato il servizio

l’aggiornamento viene effettuato aggiornando, uno alla volta e in sequenza, i task (contenitori) per il servizio – per ciascuno dei task, il task viene arrestato, aggiornato e poi riavviato

in caso di problemi, è possibile effettuare il rollback ad una versione precedente

ad esempio, avvio di un servizio

docker service create --replicas 3 --name redis redis:3.0.6

aggiornamento del servizio

docker service update --image redis:3.0.7 redis

Composizione e orchestrazione di contenitori Docker39

Luca Cabibbo ASW

- Altri strumenti di orchestrazione

Oltre agli strumenti nativi per Docker, esistono altri strumenti per l’orchestrazione di contenitori Docker – tra cui

Amazon EC2 Container Service (Amazon ECS) is a highly scalable, fast, container management service that makes it easy to run, stop, and manage Docker containers on a cluster of Amazon EC2 instances

Google Container Engine is a powerful cluster manager and orchestration system for running your Docker containers

Kubernetes (by Google) is an open-source system for automating deployment, scaling, and management of containerized applications

Apache Mesos provides applications (e.g., Hadoop, Spark, Kafka, Elasticsearch, and Docker) with API’s for resource management and scheduling across entire datacenter and cloud environments

Composizione e orchestrazione di contenitori Docker40

Page 21: Composizione e orchestrazione di contenitori Dockercabibbo.dia.uniroma3.it/asw-2019/pdf/asw895-docker... · contenitori Docker dispensa asw895 marzo 2019 1 Composizione e orchestrazione

Luca Cabibbo ASW

* Discussione

La composizione e, soprattutto, l’orchestrazione di contenitori sono funzionalità fondamentali per poter rilasciare in produzione le applicazioni multi-servizi e multi-contenitore – in un singolo nodo oppure in un cluster di nodi – on premises oppure sul cloud

la composizione e l’orchestrazione di contenitori sostengono infatti la disponibilità e la scalabilità delle applicazioni di questo tipo – e consentono di sfruttare l’elasticità delle piattaforme virtualizzate e sul cloud

per questo, i contenitori sono diventati una tecnologia abilitante per le applicazioni altamente scalabili – di solito realizzate come applicazioni a microservizi

anche per questo, la piattaforma Docker si è imposta molto rapidamente come tecnologia di riferimento per i contenitori

Composizione e orchestrazione di contenitori Docker41