42
Docker Ecosystem by @mario21ic Jenkins Perú Meetup

Jenkins Peru Meetup Docker Ecosystem

Embed Size (px)

Citation preview

Docker Ecosystem

by @mario21ic

Jenkins Perú Meetup

AgendaIntro a Containers

Docker Engine

Docker Compose

Docker Machine

Docker Swarm

ContainersChroots con esteroides

Son procesos aislados que corren con recursos asignados

Comparten el kernel del host

Livianos a comparacion de hypervisor o emuladores

Containers vs VMS

Containers vs VMS

Docker Engine

El problema

Solución

Docker EngineUna plataforma abierta para aplicaciones distribuidas para developers y sysadmins

Desarrollado inicialmente en Python y migrado a Go

Servidor (Linux) - Cliente (multiplataforma)

Open-source https://github.com/docker/docker

Docker Server - Cliente

Docker Engine

Docker syntax$ docker <command> [params] <image>:[tag]

command: accion a ejecutar

params: para cambiar comportamiento

image: la plantilla a usar

tag: la version de la plantilla

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 <[email protected]>

!

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 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=miclavedb -d mysql

$ 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

Demo

docker-compose.ymlnginx:

build: .

volumes:

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

ports:

- "8080:80"

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 Machine

Docker MachinePara la manipulacion de Docker hosts

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

Integración nativa con Docker Swarm

Docker Machine - DemoCrear 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 SwarmCluster de forma nativa

Permite programacion

Discovery mediante TOKEN

Requiere de Master y Nodes

Desarrollado en Go

Docker Swarm

Demo con Docker Machine y driver

VirtualBox

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'

Gracias

Preguntas?