29
Docker4Developers by @ rrequero MADRID · NOV 18-19 · 2016

Docker4developers Codemotion2016

Embed Size (px)

Citation preview

Docker4Developersby @rrequero

MADRID · NOV 18-19 · 2016

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

Qué cosas hago?

MADRID · NOV 18-19 · 2016

Qué cosas hago?

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

Qué es docker?

Se basa en 2 conceptos principales:

- Imagen

- Contenedor

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

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

MADRID · NOV 18-19 · 2016

Muchas gracias