_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

&

Una imagen vale más que mil palabras

Sobre mi

Ignacio López Flores

Founder & CEO @ Introbay

@ignaciolflores

IRC: ignaciolflores

La matriz del infierno

La matriz del infierno

La solución de Docker

Linux Containers (LCX)

  • Permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados compartiendo el kernel.
  • Pueden tener diferentes Sistemas Operativos (debian, centos, redhat, ubuntu, etc.) siempre que tengan la misma versión del kernel que el sistema anfitrión.
  • Consumen menos recursos hardware y software que las VM.
  • Implementación basada en imágenes.
  • Aislamiento de aplicaciones que se pueden combinar.

Y llegó Docker

  • LCX independiza sistemas operativos ligeros sobre los que lanzar aplicaciones.
  • Docker define un formato para empaquetar una aplicación y todas sus dependencias en un solo objeto que pueden ser transferidas a cualquier otro sistema Docker, y ser ejecutados allí con la garantía de que el entorno de ejecución será siempre el mismo.
  • Contenedores: contienen todo lo necesario para que una aplicación pueda funcionar.
  • Imágenes: sistema operativo con aplicaciones instaladas y configuradas.

Estructura de Docker

Docker Registry

  • Registry: Servidor que contiene repositorios e imágenes.
  • Repositorios: Contiene imagenes creadas y listas para ser descargadas.
  • Repositorio oficial https://hub.docker.com
  • En Dockerhub podemos crear repositorios privados ó públicos.
  • Dockerhub se integra con repositorios de código como GitHub y construye las imagenes al actualizarlos.
  • También podemos tener nuestro propio Registry que se crea a partir de una imagen Docker.

Requisitos de Docker

  • Docker necesita que el host sea linux 64bits y que el core sea como mínimo v3.10, se recomienda ubuntu o debian aunque puede ser cualquier distro.

Instalación en servicios cloud


docs.docker.com/engine/installation/cloud docs.docker.com/machine/drivers

Cómo funciona?

  • Descargamos una imagen base de un repositorio.
    docker pull
  • A partir de la imagen base creamos nuestro contenedor.
    docker run
  • Realizamos los cambios que deseamos sobre el contenedor.
  • Creamos nuestra imagen personalizada
    docker commit
  • Subimos la imagen a un repositorio (público ó privado).
    docker push
  • Reutilizamos nuestra imagen docker como base para nuevos contenedores.

Video

Ver el video.

Docker-compose

Constructor de aplicaciones multi-contenedor
Qué necesitamos:
  • Carpeta del proyecto.
  • fichero docker-compose.yml.
  • levantar todo: docker compose up

qué contiene docker-compose.yml?

  • descriptor de los contenedores.
  • formato de serialización yaml.
  • especificamos: contenedores, propiedades, variables de entorno, etc

Video

Ver el video.

Dockerfile

Docker build Construye un contenedor a partir de un Dockerfile.
Dockerfile: Archivo de texto plano que contiene un conjunto de instrucciones para construir un contenedor.
dockerfile -> docker build ==== makefile -> drush make

Qué necesitamos?
  • Carpeta del proyecto.
  • Archivo Dockerfile.
  • Construir: docker build.

Ejemplos de Dockerfile: github, github y github.
docs.docker.com/engine/reference/builder

Video

Ver el video.

Video

Ver el video.

Aplicaciones prácticas

Dependiendo de tu perfil:

  • DevOps
  • Desarrollador (back o front)

DevOps

Es posible tener diferentes configuraciones dependiendo del entorno

  • Prod: Mínima configuración, foco en performance.
  • Pre-prod: Basado en la configuración de Prod. Se usa habitualmente para construir el entorno de integración.
  • Dev: Basado en Pre-prod, puede añadir herramientas útiles en desarrollo: xdebug, vim, sass compiler, etc.

DevOps

Otras cosas que hacen la vida más fácil:

  • Distribución de imágenes cocinadas listas para usar en cada entorno.
  • Sistemas de integración continua.
  • Control de versiones sobre la configuración.
  • Eliminación del efecto “a mi me funciona”.

DevOps

Despliegues

  • Las imágenes de nuestra aplicación son los artifacts que desplegamos
  • Worflow simple: generas una imagen, despliegas, post-scripts
  • Desplegar o actualizar una imagen nueva es simple y rápido:
    docker-compose up -d
  • Gestionar actualizaciones y cambios de versión pasa por construir la nueva imagen y cambiar un número en el docker-compose.yml

Dev (back & front)

  • Simplificación del workflow de trabajo.
  • Posibilidad de tener múltiples entornos en la misma máquina.
  • Cambiar entre proyectos es fácil.
  • Desarrollo y tests sobre entorno idéntico a producción.

Dev (back & front)

¿Cómo modifico mi código?

Hay varias opciones.

  • Entro en el contenedor, uso Vim, git, etc.
  • Mapeo el directorio donde está mi código y lo modifico desde el exterior. (=> permisos :-S).
  • Nuestra solución: contenedor extra con SSH y que usa el volumen de Drupal (sshfs).

A tener en cuenta...

No confies en alguien que te diga que Docker es un camino de rosas.

A tener en cuenta...

Empieza desde abajo, déjate el balconing.

A tener en cuenta...

Cuidado con los trendy guys.

A tener en cuenta...

Hay más dockers en el mar.

Google, CoreOs, RancherOs, ...

¿Preguntas?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Gracias

Ignacio López Flores
@ignaciolflores