Acerca de mí
Drupal Developer, Software Libre enthusiast, new technologies and geek
Ruben Egiguren a.k.a. Keopx
Blog: www.keopx.net
Drupal: www.drupal.org/u/keopx
Miembro de:
Drupal association
Asociación Española de Drupal
G.D.O Basque Country
…
Drupal Developer
Introducción
Hablaremos de
¿Qué es Docker?
Ventajas de trabajar con Docker (vs VM)
Instalación de Docker
Componentes de Docker
Principales comandos de Docker
Docker-Compose
Introducción a DockerHub
DevOps
Cómo usarlo en el día a día.
Demo time
¿Qué es Docker?
Docker es un proyecto de código abierto que
automatiza el despliegue de aplicaciones dentro de
contenedores de software.
Permite crear, empaquetar y distribuir sus aplicaciones
rápidamente.
Docker sirve para ejecutar “máquinas virtuales” ligeras.
Ventajas de trabajar con Docker
(vs VM)
Principales características:
Consume pocos recursos, lo que permite desplegar multitud
de contenedores en un mismo equipo físico.
Se elimina el problema de dependencias de las aplicaciones.
Los contenedores son livianos y facilitan su almacenaje,
transporte y despliegue.
Hubs de imagenes públicos y privados de imágenes
Compatibilidad Multi-Sistema, podremos desplegar nuestros
contenedores en multitud de plataformas.
Ventajas de trabajar con Docker
(vs VM)
aprovisionamiento ->
configuración ->
despliegue ->
ejecución
Ventajas de trabajar con Docker
Máquina Virtual (VM)
Simula a un ordenador
Un duplicado eficiente y aislado de una
máquina física.
Algunos sistemas:
VirtualBox (Libre - escritorio)
QEMU (Libre - escritorio)
VMWARE (Gratis/Pago - escritorio/server)
KVM (Libre - server)
XEN (Libre - server)
Ventajas de trabajar con Docker
Vagrant
Vagrant es una aplicación escrita en Ruby
Facilita considerablemente la creación de entornos
virtuales de desarrollo
Vagrant nos abstrae del sistema de virtualización
Nos permite instalar y configurar el software de la VM
Herramientas de automatización
Puppet, chef, ansible,...
Más info: www.vagrantup.com
Ventajas de trabajar con Docker
Docker
Crear, enviar y ejecutar aplicaciones distribuidas.
Portable, ligero en ejecución y herramienta de
empaquetado.
Más info: www.docker.com/
15
Instalación de Docker
Mac
Descárgate la app para mac
Arrastrar e instalar.
Fuente: https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac
Componentes de Docker
Image: una capa de sólo lectura que nunca cambia
(casi), semejante a una plantilla.
Container: una capa de lectura escritura. Una instancia
a partir de una image.
Hub: Es el repositorio de images docker.
Link: Acción de linkear un container con otro
Volume: Compartir carpeta/fichero entre
containers/Host
Principales comandos de Docker
Crear imagen con Dockerfile
Dockerfile
FROM debian:jessie
MAINTAINER keopx <keopx@keopx.net>
RUN apt-get -qq update && apt-get -qqy upgrade
RUN apt-get -qy install mysql-client mysql-server
RUN apt-get -q autoclean &&
rm -rf /var/lib/apt/lists/*
RUN sed -i "s/^bind-address/#bind-address/" /etc/mysql/my.cnf
VOLUME /var/lib/mysql
COPY scripts/docker-entrypoint.sh /usr/local/bin/
RUN chmod a+x /usr/local/bin/docker-entrypoint.sh
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards
compat
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306
CMD ["mysqld"]
Fuente: https://github.com/keopx/docker-mysql/blob/master/5.5/Dockerfile
Principales comandos de Docker
Lanzar docker
Build
$ docker build -t .
Lanzar
$ docker run hello-world
Correr el bash de un Ubuntu
$ docker run -it ubuntu bash
Principales comandos de Docker
Comandos básicos containers
Listar
$ docker ps -a
Ejecutar a partir de un image:tag
$ docker run --name mycontainer -ti alpine:latest
/bin/sh
Start|Stop|Restart
$ docker start|stop|restart mycontainer
Eliminar
$ docker rm mycontainer
Docker Compose
Principales comandos de Docker
● Ejecutar el comando:
$ docker-compose up (-d)
● Abrir en browser: http://localhost:8008
● En caso de usar Mac OS X o Windows reemplazar
localhost con la ip de:
$ boot2docker ip
Fuente: https://github.com/keopx/docker-lamp/blob/master/docker-compose.yml
Introducción a DockerHub
Crear un repositorio en Docker Hub que obtenga los
Dockerfile de un repositorio de GitHub y construya las
imágenes de los Dockerfile de forma automática
cuando haya cambios en los archivos dockerfile de
GitHub.
Crear una cuenta en Docker Hub
Subir el archivo Dockerfile a un repositorio de
GitHub/Bitbucket
Crear el repositorio en DockerHub y la build automática
DevOps
DevOps es un acrónimo inglés de development
(desarrollo) y operations (operaciones)
Qué ofrece
Entornos configurados para su uso
Entornos aislados
Evitar conflictos de versiones y/o configuraciones
Agilizar la puesta a punto de los entornos de
desarrollo/testing/producción
Entornos CI
DevOps
Pero la maquina virtual solo es una parte
Aísla el sistema pero…
No nos facilita muchas operaciones
Nos mantiene lo que hagamos, pero y si cambio
algo y se “rompe”
No podemos desplegarlo tal y como está a
producción
...
Cómo usarlo en el día a día
Sistemas homogéneos
Mismas versiones
Mismas configuraciones
Todos en el proyecto usan el mismo entorno
Se acabó el, “en mi maquina funciona”
No hay excepciones
Si se requiere un cambio se realiza en la
configuración o en el contenedor
Exportable a producción *
Cómo usarlo en el día a día
Comienzas un nuevo proyecto
Clonas el repo del proyecto
Arrancas docker compose
Se supone que es más cómodo para sistemas
complejos.
Importas la base de datos
Puede que tengas incluso un setup.sh que haga
esto
Ya puedes comenzar a trabajar