Docker
Compose
by Mario Inga
@mario21ic
Who I am?
• Mario Inga Cahuana
• Software Developer
• Member A.P.E.S.O.L.
• Community Docker Lima
• DevOps at Bookingmotor
• Metal m/
Recordando Docker
• Engine:
• Image
• Container
• Volume
• Network
• Ecosystem
Docker Flow
1 2 3
4
5
Problemas
• Containers aislados
• Construir image antes de lanzar container
• Dependencia de containers
• Reiniciar solo algunos containers
• Service discovery
• Mapear todos los: puertos, volumes, vars, etc etc
Ventajas
• Configuración centralizada en un solo archivo
docker-compose.yml
• Resolución de services mediante el DNS embebido
de Docker
• Extensión de configuración
• Infrastructure as Code
Estructura
• version: "2"
• services:
nginx:
image:
ports:
volumes:
command:
depends_on:
another:
…
Example - Ports
version: '2'
services:
nginx:
image: nginx:1.11
ports:
- 80:80
Example - Volumes
version: '2'
services:
nginx:
image: nginx:1.11
ports:
- 80:80
volumes:
- ./logs/:/var/log/nginx/
- ./html/:/usr/share/nginx/html
Example: Build
version: '2'
services:
nginx:
image: mario21ic/nginx
build:
context: ./
ports:
- 8080:80
Example: Command
version: '2'
services:
composer:
image: composer
volumes:
- ./:/app/
command: install
Example: Depends
version: '3.1'
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: example
mysql:
image: mysql:5.5
environment:
MYSQL_ROOT_PASSWORD: example
Comands
• Descargar las images:
$ docker-compose pull
$ docker-compose pull wordpress
• Revisar el log:
$ docker-compose logs
$ docker-compose logs -f wordpress
Commands
• Build de images:
$ docker-compose build
$ docker-compose build nginx
• Iniciar todos los services:
$ docker-compose up
$ docker-compose up -d --no-deps db
Commands
• Ejecutar un comando de un service:
$ docker-compose run composer install
• Ejecutar un comando en un container existente:
$ docker-compose exec nginx bash
Comands
• Stop de services:
$ docker-compose stop
$ docker-compose stop mysql
• Reiniciar services:
$ docker-compose restart
$ docker-compose restart mysql
Comands
• Kill services:
$ docker-compose kill
$ docker-compose kill mysql
• Eliminar services:
$ docker-compose rm
$ docker-compose rm mysql
Estructura II
• volumes:
db-data:
• networks:
front-tier:
back-tier:
Example - Odooversion: '2'
services:
odoo:
image: odoo:10
environment:
PGHOST: database
PGUSER: odoo
PGPASSWORD: odoo
depends_on:
- db
ports:
- 8069:8069
db:
image: postgres:9.3
environment:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
volumes:
- "db-data:/var/lib/postgresql/data"
ports:
- 5432:5432
volumes:
db-data:
Example - App voting
• https://github.com/docker/example-voting-app
front
back
Override
• Se define en docker-compose.override.yml
• Sobre escritura del archivo docker-compose.yml
• Recomendado para separar en un template base
el mapeo de todos los componentes de nuestro
proyecto.
• No requiere ser invocado con -f myfile.yml, es
ejecutado con el comando docker-compose up
Version
Compose file
format
Docker Engine
release
3.0; 3.1 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+
https://docs.docker.com/compose/compose-file/compose-versioning/
Preguntas?
https://github.com/mario21ic/gdg-lima-docker-compose
twitter: @mario21ic
email: mario21ic@gmail.com
www.facebook.com/gdglima
www.twitter.com/gdglima
Gracias

GDG Lima - Docker Compose