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

Post on 22-Jan-2017

916 views 0 download

Transcript of Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry

Docker Ecosystem

by @mario21ic

Agenda

Docker Engine

Docker Compose

Docker Machine

Docker Swarm

Docker Registry

Docker Engine

El problema

Solución

Docker Engine

Una plataforma abierta para aplicaciones distribuidas para developers y sysadmins

Desarrollado inicialmente en Python y migrado a Go

Servidor - Cliente

Open source

Docker Engine

Docker Engine

Demo Images: search & pull• En cli ejecutar:

$ docker search alpine

$ docker pull alpine:latest

• Verificar:

$ docker images

Demo Container: Hello• En cli ejecutar:

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

• Verificar en otro terminal:

$ docker ps -a

Docker Hub

Demo Container: Bash• En cli ejecutar:

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

• Verificar en otro terminal:

$ docker ps

Demo Container: Forward port• En cli ejecutar:

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

• Abrir browser:

http://localhost:8080/

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/

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

Dockerfile

Y como genero mi propio Docker Image personalizado?

Dockerfile• Generar archivo Dockerfile con contenido:

FROM nginx:latest

MAINTAINER Mario Inga <mario21ic@gmail.com>

!

RUN echo 'Building from Dockerfile'

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

Dockerfile• Ejecutar:

$ docker build -t image_from_dockerfile:latest .

• Verificar: $ docker images

• Usar:

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

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/

Docker Compose

ProblemaContainers aislados

Configurar la ip cada vez que reinicia

Compartir configs

Construir cada Image desde Dockerfile

Escalar un container

Docker ComposePermite una facil orchestacion entre containers

Configuracion en un "docker-compose.yml"

Desarrollado en Python

Instalacion: pip install docker-compose

docker-compose.ymlnginx:

build: .

volumes:

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

ports:

- "8080:80"

docker-compose.ymlwordpress:

image: wordpress

links:

- db

ports:

- 8080:80

db:

image: mariadb

environment:

MYSQL_ROOT_PASSWORD: example

Docker Compose

Demo

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

Docker Compose

Demo

Docker Machine

Docker MachinePara la manipulacion de Docker hosts

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

Integración nativa con Docker Swarm

Docker Machine

Demo

Docker MachineCrear Host:

$ docker-machine create -d virtualbox devopsday

Listar: $ docker-machine list

Conectar:

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

Verificar: docker info

Docker MachineProbar:

$ docker run apline echo 'Hello from Machine'

Deploy:

$ docker-compose up

Docker Swarm

Docker Swarm

Cluster de forma nativa

Permite programacion

Discovery mediante TOKEN

Requiere de Master y Nodes

Docker Swarm

Demo con Docker Machine

Docker SwarmCrear token: $ docker run swarm create

Crear nodo master:

docker-machine create \

-d virtualbox \

--swarm \

--swarm-master \

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

swarm-master

Docker SwarmCrear nodo agent-00:

$ docker-machine create \

-d virtualbox \

--swarm \

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

swarm-node-00

Docker SwarmCrear nodo agent-00:

$ docker-machine create \

-d virtualbox \

--swarm \

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

swarm-node-01

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)"

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'

Docker Registry

Docker 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

Preguntas?