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.
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.
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
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
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, ...
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Gracias
Ignacio López Flores
@ignaciolflores