Upload
raul-requero-garcia
View
342
Download
0
Embed Size (px)
Citation preview
MADRID · NOV 18-19 · 2016
Quién soy?Raúl Requero GarcíaTwitter: @rrequeroLinkedIn: https://www.linkedin.com/in/requerogarciaraul
MADRID · NOV 18-19 · 2016
Que vamos a ver?
- Qué es docker?- Como crear nuestra imagen (Dockerfile)- Y ahora, cómo ejecutamos nuestra imagen? Creamos
nuestro container- Mi aplicación necesita varios contenedores. Qué
hago? -> Docker Compose- Recomendaciones
MADRID · NOV 18-19 · 2016
Veámoslo todo con ejemplos
Código en github: https://github.com/rrequero/docker4developers-talk-codemotion-2
016
MADRID · NOV 18-19 · 2016
Qué es docker?
- Es un proyecto de código abierto (https://github.com/docker/docker)
- Permite crear contenedores Linux de forma programática (LXC LinuX Containers)
- Escrito en Golang
MADRID · NOV 18-19 · 2016
Qué es docker?
- Ligero
- Portable
- Autosuficiente
- Repositorio de imágenes (docker-hub)
MADRID · NOV 18-19 · 2016
FROM
Nos proporciona un “lenguaje” con el que definir nuestros contenedores.
Cómo crear nuestra imagen? Dockerfile
MAINTAINER
COPYRUN
EXPOSE
VOLUME WORKDIRUSERCMD
ENTRYPOINTENV
MADRID · NOV 18-19 · 2016
Siempre se parte de una imagen base.
Cómo crear nuestra imagen? Dockerfile
MADRID · NOV 18-19 · 2016
Vamos añadiendo cambios sobre la imagen base.ej:
Estos cambios se reflejarán como “capas” que docker cachea.
Cómo crear nuestra imagen? Dockerfile
MADRID · NOV 18-19 · 2016
Por último, hacemos build de nuestro Dockerfile con docker-cli
Cómo crear nuestra imagen? Dockerfile
MADRID · NOV 18-19 · 2016
Posibles parámetros:- --no-cache: No utiliza las capas cacheadas- --force-rm: No genera una cache por cada capa- -t: Da un nombre a la imagen. Ej: -t <name>:<version>- Más.....
Cómo crear nuestra imagen? Dockerfile
MADRID · NOV 18-19 · 2016
Ejemplo en vivo :)
Código en github: https://github.com/rrequero/docker4developers-talk-codemo
tion-2016#second-part
Cómo crear nuestra imagen? Dockerfile
MADRID · NOV 18-19 · 2016
Docker-cli nos ofrece el comando run para ejecutar una instancia de una imagen:
Y ahora, cómo ejecutamos nuestra imagen?
MADRID · NOV 18-19 · 2016
Posibles parámetros:- -e: Pasar variables de entorno ej: -e NODE_ENV=prod- -p: Exponer puertos hacia fuera del contenedor ej: -p
80:8000- -v: Volúmenes. Compartir directorios entre el contenedor
y nuestra máquina ej: -v $PWD/app:/home/user/app- -d: Ejecutar en background- Más.....
Y ahora, cómo ejecutamos nuestra imagen?
MADRID · NOV 18-19 · 2016
Además de run, nos proporciona otros comandos como:- docker stop <idContainer>: Parar el contenedor- docker ps: Muestra los contenedores en ejecución (con la opción -a
muestra todos los contenedores parados y en ejecución)- docker images: Muestra las imágenes que tenemos en nuestra
máquina- docker rmi <idImage>: Elimina una imagen- docker exec <container> <command>: Ejecuta un comando en el
contenedor. Ej: docker exec -it <name/id> bash
Y ahora, cómo ejecutamos nuestra imagen?
MADRID · NOV 18-19 · 2016
Docker compose:- Herramienta que nos proporciona
Docker- Permite componer de forma
programática un entorno de varios contenedores que se pueden comunicar entre sí
- docker-compose.yml
Mi aplicación necesita varios contenedores. Qué hago? -> Docker compose
MADRID · NOV 18-19 · 2016
- Cada contenedor es un “service” - Cada “service” se puede configurar:
- Imagen o dockerfile- Puertos- Volúmenes- Variables de entorno- etc
- Se pueden establecer dependencias entre ellos (depends_on)- v2 genera una subred entre los servicios definidos (v1 necesita
link)
Mi aplicación necesita varios contenedores. Qué hago? -> Docker compose
MADRID · NOV 18-19 · 2016
Para generar las imágenes de los servicios que dependen de un Dockerfile, ejecutamos:
Para ejecutar los contenedores
Mi aplicación necesita varios contenedores. Qué hago? -> Docker compose
MADRID · NOV 18-19 · 2016
Docker-compose también nos proporciona comandos otros comandos, como:- docker-compose stop: Para todos los contenedores
definidos en el docker-compose- docker-compose rm: Elimina los contenedores
definidos en el docker-compose
Mi aplicación necesita varios contenedores. Qué hago? -> Docker compose
MADRID · NOV 18-19 · 2016
Ejemplo en vivo :)
Código en github: https://github.com/rrequero/docker4developers-talk-codemo
tion-2016#final-part
Mi aplicación necesita varios contenedores. Qué hago? -> Docker compose
MADRID · NOV 18-19 · 2016
Seguridad:
- Nunca dejéis una imagen con el usuario de root. Establecer un usuario.
- Solo ejecutar contenedores de confianza- No instaleis software innecesario- Chequear los contenedores de forma periódica en busca de posibles
vulnerabilidades y regenerarlos con los parches de seguridad- Cuidado con que volúmenes exponeis
--volume=/var/run/docker.sock:/tmp/docker.sock
Recomendaciones
MADRID · NOV 18-19 · 2016
Performance:
- Borrar de forma periódica las imágenes sin tag que se generan y/o utilizar --force-rm
- Al generar una imagen, intentar equilibrar el número de capas/cache que utilizais. ¿Porque? Cada capa genera una imagen intermedia de cache que ocupa espacio.
Recomendaciones
MADRID · NOV 18-19 · 2016
Utilidades:
- Borrar todas los contenedores paradosdocker rm $(docker ps -a -q)
- Borrar todas las imagenes sin tagdocker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Recomendaciones
MADRID · NOV 18-19 · 2016
Preguntas / dudas
Twitter: @rrequero
LinkedIn: https://www.linkedin.com/in/requerogarciaraul