Sobre nosotros
Ignacio López Flores
Founder & CEO @ Introbay
@ignaciolflores
IRC: ignaciolflores
Sobre nosotros
Javier Gómez Gómez
Drupal Developer @ Introbay
@fjgomez2
IRC: codigoweb
La matriz del infierno
Conceptos básicos
- Virtualización: Creación por software de la versión virtual de un recurso tecnológico, habitualmente servidores.
- Maquina virtual (VM): Emulación de una ordenador físico por medio de software en un sistema anfitrión.
- Hipervisor: Sistema anfitrión sobre el que funcionan las VM, puede ser por software ó hardware (poco habituales).
- Escritorio: virtualbox, vmware, etc.
- Servidor: xenserver, proxmox, etc.
Linux Containers (LCX)
- Permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados compartiendo el core.
- Pueden tener diferentes Sistemas Operativos (debian, centos, redhat, ubuntu, etc.) siempre que tengan la misma versión del core 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
La solución 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.
- uname -r nos devuelve la versión del core.
- hay varios métodos para instalarlo, vamos a explicarlo sobre debian 8.
Instalación en Linux
- Actualizamos Apt sources
editamos /etc/apt/sources.list.d/docker.list y le añadimos
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
- Añadimos el repo
editamos /etc/apt/sources.list.d/docker.list y le añadimos
deb https://apt.dockerproject.org/repo debian-jessie main
- Actualizamos paquetes
apt-get update
- Instalamos docker y levantamos el servicio
apt-get install docker-engine
service docker start
Windows y Mac OSX
Tres metodos
Docker machine
Parte de Docker Toolbox, imprescindible en osx y windows.
- Creamos la máquina
docker-machine create -d virtualbox drupalcamp
- Para que nuestro la reconozca
eval $(docker-machine env drupalcamp)
- Levantamos la máquina
docker-machine start drupalcamp
- Paramos la máquina
docker-machine stop drupalcamp
docs.docker.com/machine/reference
Linea de comandos
Sintaxis:
docker [OPTIONS] COMMAND [argumentos]
docker [OPTIONS] COMMAND [argumentos] IMAGE
Ejemplos:
docker exec -it 4ac7ebc37986 bash
docker run -d --link db:mysql -p 80:80 drupal:7
docker COMMAND --help
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.
- No queremos saber nada de sistemas!
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...
Hay más dockers en el mar.
Google, CoreOs, RancherOs, ...
A tener en cuenta...
Cuidado con los trendy guys.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Gracias
Javier Gómez Gómez
Ignacio López Flores