Download - Jenkins Peru Meetup Docker Ecosystem
ContainersChroots con esteroides
Son procesos aislados que corren con recursos asignados
Comparten el kernel del host
Livianos a comparacion de hypervisor o emuladores
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 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
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• 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/
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.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 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 SwarmCluster de forma nativa
Permite programacion
Discovery mediante TOKEN
Requiere de Master y Nodes
Desarrollado en Go
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'