Introducció a Docker

59
Docker DESPLEGAMENT D’APLICACIONS Xavier Sala Pujolar Institut Cendrassos

Transcript of Introducció a Docker

Page 1: Introducció a Docker

Docker

DESPLEGAMENT D’APLICACIONSXavier Sala Pujolar

Institut Cendrassos

Page 2: Introducció a Docker

El kernel de Linux pot particionar el host en espais aïllats!

Linux containers (LXC)

Page 3: Introducció a Docker

Un contenidor permet executar aplicacions

Aplicacióhola

Page 4: Introducció a Docker

Les aplicacions que s'executin en diferents contenidors estaran aïllades

Page 5: Introducció a Docker

L’execució en un contenidor no podrà afectar als altres

Aïllats!

Page 6: Introducció a Docker

Els contenidors són més eficients i àgils que les màquines virtuals

Server

Sistema Operatiu

Hipervisor

Sistema operatiu

virtualitzat

Binaris i llibreries

Aplicació

Sistema operatiu

virtualitzat

Binaris i llibreries

Aplicació

Server

Sistema Operatiu

Hipervisor

Binaris i llibreries

Aplicació

Binaris i llibreries

Aplicació

Màquines virtuals

Contenidors

Page 7: Introducció a Docker

Pesen menys

Es creen més ràpidament permeten aprofitar

millor els recursos

contenidor

Page 8: Introducció a Docker

Docker

Page 9: Introducció a Docker

Docker és una plataforma de virtualització de codi obert

sistema de fitxers

AUFS

linux containers

Page 10: Introducció a Docker

És una eina per empaquetar, distribuir i executar aplicacions en un contenidors LXC paquets Lleugers

aplicacions amb dependències

aplicacions configurades

Portables

Page 11: Introducció a Docker

Simplifica el desplegament de programari

Llibreries

drivers

configuracions

servidors de dades

El contenidor conté tot el que cal !

Page 12: Introducció a Docker

Els contenidors Docker són portables

Es pot executar en altres hosts

Page 13: Introducció a Docker

S’executa en sistemes Linux però també es pot executar en Windows i MacOS

A través de Boot2Docker

Page 14: Introducció a Docker

$ docker

comanda per donar ordres al servei

Servei docker que executa els contenidors

Repositori local d’imatges

docker hub

Arquitectura

Page 15: Introducció a Docker

# apt-

get in

stall

docker

.io

# yum instal

l docker

Docker es pot instal·lar de moltes formes...

# wget -N https://get.docker.com/ | sh

En Windows i MacOS a través de Boot2Docker

Page 16: Introducció a Docker

Treballar amb Docker

Page 17: Introducció a Docker

La base de tot són les imatges

Read onlyImatge

Page 18: Introducció a Docker

A partir de les imatges es creen els contenidors S’hi afegeix el

que calgui

Imatge

Aplicació

contenidor

llibreries

Page 19: Introducció a Docker

Al executar docker s’especifica la imatge a fer servir

$ docker run -it ubuntu /bin/bash

nom de l’imatge

Page 20: Introducció a Docker

La imatge es busca en el repositori local ...

$ docker run manel …

Manel

NO

Docker hub

manel

Repositori local

Page 21: Introducció a Docker

… i si no la troba, a Docker Hub

$ docker run manel …

Manel

manel

Docker hub

Repositori local

Page 22: Introducció a Docker

En el Docker Hub hi ha una sèrie d’imatges predefinides

N’hi ha d’oficials i de creades pels usuaris

Page 23: Introducció a Docker

mariano

Es poden gestionar les imatges del repositori local

$ docker images

$ docker rmi mariano

$ docker import a.tar

manel frederic mariano

$ docker pull pep

Page 24: Introducció a Docker

Les imatges es poden identificar de diverses formes

IMATGE TAG ID

ubuntu 14.04 826544226fdc

ubuntu latest 826544226fdc

ubuntu 14.10 245ce11c1f25

mongo latest 05976bd2eb65

centos latest 88f9454e60dd

nom+

etiqueta

ID

Page 25: Introducció a Docker

contenidors

Page 26: Introducció a Docker

Un contenidor Docker és pot veure com una imatge en execució

Imatge

contenidor

Pot crear tants contenidors com calgui contenidor

Page 27: Introducció a Docker

Un cop en marxa els contenidors poden divergir

Page 28: Introducció a Docker

CONTAINER IMAGE ... NAMES

9e517e81391d ubuntu:14.04 ... serene_elion

d1f29780b247 mysql:latest ... goofy_yalow

si no es defineix , rep un nom aleatori

ID

Els contenidors s’identifiquen amb un nom o amb l’id

Page 29: Introducció a Docker

Els contenidors executen una comanda en una imatge

$ docker run manel ls

I’m “ls”

Page 30: Introducció a Docker

El contenidor està actiu fins que s’acaba la comanda que s’hi executa

$ docker run ubuntu uname -aLinux 0bc52c16ccc4 3.19.1-201.fc21.x86_64 #1 SMP Wed Mar 18 04:29:24 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$

Page 31: Introducció a Docker

Es poden executar contenidors interactius

$ docker run -i -t ubuntu /bin/bash

interactive

terminal

Page 32: Introducció a Docker

Es poden executar contenidors en mode daemon

$ docker run -d mysql -e MYSQL_ROOT_PASSWORD=patata

DAEMON

Page 33: Introducció a Docker

Hi ha comandes per veure l’estat dels contenidors

$ docker ps

$ docker inspect pep

$ docker port pep

$ docker logs pep $ docker top pep

$ docker diff pep

contenidors creats

informació sobre el

contenidor

Page 34: Introducció a Docker

Per controlar-ne l’execució i el cicle de vida

$ docker start id

$ docker restart id

$ docker stop id

$ docker attach id

$ docker rm id

$ docker kill id

reiniciar contenidor

aturat

aturar un contenidor

unir-se a un

contenidor

Page 35: Introducció a Docker

compartir dades

Page 36: Introducció a Docker

Es poden compartir carpetes entre contenidors amb els volums de dades

$ docker run ubuntu -v /webapp programa

carpeta persistent

sobreviuen al contenidor

es pot muntar en diversos

contenidors

Page 37: Introducció a Docker

$ docker run ubuntu -v /opt/x:/var/y programa

/opt/x /var/y

Es poden

compartir dades

amb el host

Page 38: Introducció a Docker

Es poden crear contenidors de volums de dades agafar

dades

Page 39: Introducció a Docker

$ docker run -it --name data -v /dades busybox /bin/sh

$ docker run -d -volumes-from data pepet

pepet

data

dades

dades?

Page 40: Introducció a Docker

accés de xarxa

Page 41: Introducció a Docker

Perquè un contenidor es comuniqui hi ha dues opcions link

expose ports

Page 42: Introducció a Docker

Els ports es poden mapejar en el host

$ docker run -p 80:80 -d nginx

$ docker run -P -d nginx

tots els ports automàticament

host contenidor

Page 43: Introducció a Docker

$ docker run ubuntu -p 8000:80 -d nginx

http://localhost:8000 80

Page 44: Introducció a Docker

$ docker run --name db -d mysql$ docker run -d -P --name app --link db:bdd webapp

db

app

bddL’enllaç permet

comunicar de forma segura els contenidors

contenidor Àlies de l’enllaç

Page 45: Introducció a Docker

Crear una imatge

Page 46: Introducció a Docker

Es poden crear imatges a partir d’un contenidor

Imatgecontenidor

$ docker -a “xavier” commit 2341f02a234 josep

pepet2341f02a234

josep

mantenidor ID

Page 47: Introducció a Docker

Si es té una aplicació dins d’un contenidor es podrà distribuir en forma d’imatge

Imatge

josep

$ docker run -d josep

que es podrà executar fàcilment

Page 48: Introducció a Docker

Per transportar-lo a una altra màquina s’empaqueta amb tar

export

save

load

import

Page 49: Introducció a Docker

Es poden “construir” imatges dient com han de ser

Dockerfile

frederic

Instruccions

Page 50: Introducció a Docker

FROM ubuntu:14.10MAINTAINER Xavier Sala

RUN apt-get updateRUN apt-get install -y apache2

ENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2"]CMD ["-D", "FOREGROUND"]

Imatge base

comandes a executar

Port a obrir

executar al iniciar

Page 51: Introducció a Docker

Es construeix passant-li el fitxer amb les instruccions

$ docker build -name=frederic Dockerfile

nom de l’imatge

Page 52: Introducció a Docker

utilitats basades en docker

Page 53: Introducció a Docker

Hi ha eines per automatitzar el desplegament, crear clústers de contenidors, etc...

Docker es pot fer servir en

producció

Swarm

kubernetes

docker

-machine

compose

Mesos

Page 54: Introducció a Docker

Compose està pensat per crear diversos contenidors en un sol fitxer

facilita desplegar aplicacions complexes

Page 55: Introducció a Docker

Docker-machine simplifica el desplegament en el núvol o en màquines virtuals

Page 56: Introducció a Docker

Swarm permet crear clústers de hosts Docker es pot fer servir

qualsevol

Page 57: Introducció a Docker

O sigui...

Page 58: Introducció a Docker

Docker ofereix els avantatges de les

màquines virtuals

Docker facilita la distribució de

programari

Page 59: Introducció a Docker

Versió 1 - 2015

algunes images són d’openclipart.org