Introducció a Docker

Post on 20-Jul-2015

121 views 4 download

Transcript of Introducció a Docker

Docker

DESPLEGAMENT D’APLICACIONSXavier Sala Pujolar

Institut Cendrassos

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

Linux containers (LXC)

Un contenidor permet executar aplicacions

Aplicacióhola

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

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

Aïllats!

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

Pesen menys

Es creen més ràpidament permeten aprofitar

millor els recursos

contenidor

Docker

Docker és una plataforma de virtualització de codi obert

sistema de fitxers

AUFS

linux containers

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

aplicacions amb dependències

aplicacions configurades

Portables

Simplifica el desplegament de programari

Llibreries

drivers

configuracions

servidors de dades

El contenidor conté tot el que cal !

Els contenidors Docker són portables

Es pot executar en altres hosts

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

A través de Boot2Docker

$ docker

comanda per donar ordres al servei

Servei docker que executa els contenidors

Repositori local d’imatges

docker hub

Arquitectura

# 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

Treballar amb Docker

La base de tot són les imatges

Read onlyImatge

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

que calgui

Imatge

Aplicació

contenidor

llibreries

Al executar docker s’especifica la imatge a fer servir

$ docker run -it ubuntu /bin/bash

nom de l’imatge

La imatge es busca en el repositori local ...

$ docker run manel …

Manel

NO

Docker hub

manel

Repositori local

… i si no la troba, a Docker Hub

$ docker run manel …

Manel

manel

Docker hub

Repositori local

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

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

mariano

Es poden gestionar les imatges del repositori local

$ docker images

$ docker rmi mariano

$ docker import a.tar

manel frederic mariano

$ docker pull pep

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

contenidors

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

Imatge

contenidor

Pot crear tants contenidors com calgui contenidor

Un cop en marxa els contenidors poden divergir

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

Els contenidors executen una comanda en una imatge

$ docker run manel ls

I’m “ls”

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

$

Es poden executar contenidors interactius

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

interactive

terminal

Es poden executar contenidors en mode daemon

$ docker run -d mysql -e MYSQL_ROOT_PASSWORD=patata

DAEMON

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

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

compartir dades

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

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

/opt/x /var/y

Es poden

compartir dades

amb el host

Es poden crear contenidors de volums de dades agafar

dades

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

$ docker run -d -volumes-from data pepet

pepet

data

dades

dades?

accés de xarxa

Perquè un contenidor es comuniqui hi ha dues opcions link

expose ports

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

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

http://localhost:8000 80

$ 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ç

Crear una imatge

Es poden crear imatges a partir d’un contenidor

Imatgecontenidor

$ docker -a “xavier” commit 2341f02a234 josep

pepet2341f02a234

josep

mantenidor ID

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

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

export

save

load

import

Es poden “construir” imatges dient com han de ser

Dockerfile

frederic

Instruccions

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

Es construeix passant-li el fitxer amb les instruccions

$ docker build -name=frederic Dockerfile

nom de l’imatge

utilitats basades en 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

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

facilita desplegar aplicacions complexes

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

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

qualsevol

O sigui...

Docker ofereix els avantatges de les

màquines virtuals

Docker facilita la distribució de

programari

Versió 1 - 2015

algunes images són d’openclipart.org