docker ecosystem: engine, compose, machine, swarm, registry

44
Docker Ecosystem by @mario21ic

Upload: mario-j-inga-cahuana

Post on 22-Jan-2017

924 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Ecosystem

by @mario21ic

Page 2: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Agenda

Docker Engine

Docker Compose

Docker Machine

Docker Swarm

Docker Registry

Page 3: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Engine

Page 4: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

El problema

Page 5: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Solución

Page 6: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Engine

Una plataforma abierta para aplicaciones distribuidas para developers y sysadmins

Desarrollado inicialmente en Python y migrado a Go

Servidor - Cliente

Open source

Page 7: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Engine

Page 8: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Engine

Page 9: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Demo Images: search & pull• En cli ejecutar:

$ docker search alpine

$ docker pull alpine:latest

• Verificar:

$ docker images

Page 10: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Demo Container: Hello• En cli ejecutar:

$ docker run -ti debian echo "Hello from container"

• Verificar en otro terminal:

$ docker ps -a

Page 11: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Hub

Page 12: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Demo Container: Bash• En cli ejecutar:

$ docker run -ti debian:latest /bin/bash

• Verificar en otro terminal:

$ docker ps

Page 13: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Demo Container: Forward port• En cli ejecutar:

$ docker run --name mynginx -p 8080:80 -d nginx

• Abrir browser:

http://localhost:8080/

Page 14: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Demo Container: Volume• En cli ejecutar:

$ docker run --name mynginx -v $(pwd)/html:/usr/share/nginx/html -p 8080:80 -d nginx

• Abrir browser:

http://localhost:8080/

Page 15: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Container save as Image• En cli ejecutar:

$ docker run --name container_debian -ti debian bash

# echo "hello from container debian"

• En otro terminal:

$ docker commit container_debian debian_hola

• Verificar:

$ docker images

Page 16: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Dockerfile

Y como genero mi propio Docker Image personalizado?

Page 17: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Dockerfile• Generar archivo Dockerfile con contenido:

FROM nginx:latest

MAINTAINER Mario Inga <[email protected]>

!

RUN echo 'Building from Dockerfile'

COPY html/index.html /usr/share/nginx/html/index.html

Page 18: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Dockerfile• Ejecutar:

$ docker build -t image_from_dockerfile:latest .

• Verificar: $ docker images

• Usar:

$ docker run --name newcontainer -p 8088:80 -d image_from_dockerfile

Page 19: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Link• Ejecutar:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=myclavesecreta -d mysql:latest

$ docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -d wordpress

• Browser: http://localhost:8080/

Page 20: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Compose

Page 21: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

ProblemaContainers aislados

Configurar la ip cada vez que reinicia

Compartir configs

Construir cada Image desde Dockerfile

Escalar un container

Page 22: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker ComposePermite una facil orchestacion entre containers

Configuracion en un "docker-compose.yml"

Desarrollado en Python

Instalacion: pip install docker-compose

Page 23: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

docker-compose.ymlnginx:

build: .

volumes:

- ./html:/usr/share/nginx/html

ports:

- "8080:80"

Page 24: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

docker-compose.ymlwordpress:

image: wordpress

links:

- db

ports:

- 8080:80

db:

image: mariadb

environment:

MYSQL_ROOT_PASSWORD: example

Page 25: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Compose

Demo

Page 26: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

docker-compose.ymlweb:

image: odoo:8

volumes:

- ./odoo_vps:/mnt/extra-addons/odoo_vps

links:

- db

ports:

- "8069:8069"

db:

image: postgres:latest

environment:

POSTGRES_USER: odoo

POSTGRES_PASSWORD: odoo

Page 27: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Compose

Demo

Page 28: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Machine

Page 29: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker MachinePara la manipulacion de Docker hosts

Provee Docker hosts para: Digital Ocean, VirtualBox, Azure, Amazon, etc

Integración nativa con Docker Swarm

Page 30: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Machine

Demo

Page 31: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker MachineCrear Host:

$ docker-machine create -d virtualbox devopsday

Listar: $ docker-machine list

Conectar:

$ eval "$(docker-machine env devopsday)"

Verificar: docker info

Page 32: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker MachineProbar:

$ docker run apline echo 'Hello from Machine'

Deploy:

$ docker-compose up

Page 33: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Swarm

Page 34: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Swarm

Cluster de forma nativa

Permite programacion

Discovery mediante TOKEN

Requiere de Master y Nodes

Page 35: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Swarm

Demo con Docker Machine

Page 36: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker SwarmCrear token: $ docker run swarm create

Crear nodo master:

docker-machine create \

-d virtualbox \

--swarm \

--swarm-master \

--swarm-discovery token://<TOKEN> \

swarm-master

Page 37: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker SwarmCrear nodo agent-00:

$ docker-machine create \

-d virtualbox \

--swarm \

--swarm-discovery token://<TOKEN> \

swarm-node-00

Page 38: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker SwarmCrear nodo agent-00:

$ docker-machine create \

-d virtualbox \

--swarm \

--swarm-discovery token://<TOKEN> \

swarm-node-01

Page 39: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker SwarmConectarse a cada nodo:

$ eval "$(docker-machine env swarm-node-00)"

$ eval "$(docker-machine env swarm-node-01)"

Conectarse al master:

$ eval "$(docker-machine env --swarm swarm-master)"

Page 40: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker SwarmLanzar en cada nodo:

$ watch docker ps -a

En el master:

$ docker info

$ docker run alpine echo 'hello swarm 1'

$ docker run alpine echo 'hello swarm 2'

$ docker run alpine echo 'hello swarm 3'

Page 41: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Registry

Page 42: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Registry

Page 43: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Registry

docker run -d -p 5000:5000 --restart=always --name registry registry:2

docker pull ubuntu && docker tag ubuntu localhost:5000/ubuntu

docker push localhost:5000/ubuntu

docker pull localhost:5000/ubuntu

Page 44: Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Preguntas?