Qué es Docker?


Docker es un proyecto open-source que permite automatizar el despliegue de aplicaciones en entornos Linux. Está basado en el formato estándar de contenedores de Linux(LXC) y permite correr aplicaciones en ambientes aislados de manera ligera. Docker nos permite crear “imágenes” con nuestra aplicación y sus dependencias, garantizando que ésta funcionará, a escala, en producción o en cualquier otro ambiente. De esta manera evitamos el llamado “dependency hell” y facilitamos el desarrollo y mantenimiento de las aplicaciones.
A diferencia de las máquinas virtuales tradicionales, un contenedor Docker no incluye un sistema operativo independiente, sino que se basa en la funcionalidad del sistema operativo proporcionado por la infraestructura subyacente. Esto es gracias a usar contenedores de Linux (LXC), ya que corren sobre el mismo sistema operativo que el mismo host. Además usa AuFS1 para sistema de archivos y se encarga de las redes por los usuarios.

A continuación se presentan dos tutoriales para iniciarse con Docker y ver todas las possibilidades que ofrece el entorno. Para los tutoriales se ha utilizado la herramienta Docker Toolbox.
 

Tutorial 1: OpenLDAP / PhpLdapAdmin

Buscamos la imagen que nos interese, en nuestro caso OpenLdap, con el siguiente comando:

docker search openldap

Luego podemos descargar la imagen con el comando:

docker pull osixia/openldap

Una vez finalizada la descarga podemos consultar las imágenes que tenemos disponibles con el comando:

docker images

Cuando tenemos la imagen disponible ya podemos instanciar un contenedor:

docker –-name myldap run --env LDAP_ORGANISATION="CloudAdmins" --env LDAP_DOMAIN="cloudadmins.org" --env LDAP_ADMIN_PASSWORD="Admin" --detach osixia/openldap

Este comando lo que realiza es levantar un contenedor con los siguientes parámetros
–name el nombre asociado al contenedor
–env para definir varias variables de entorno que configuraran nuestro LDAP
Podemos comprobar los contenedores que están levantados, con el comando:

docker ps -a

También podemos obtener una Shell del contenedor con el comando:

docker exec -it myldap bash

o ejecutar comandos sobre el contenedor:

docker exec myldap ldapsearch -h localhost -D "cn=admin,dc=cloudadmins,dc=org" -w Admin

 
Para instanciar un contenedor con phpldapadmin realizamos la misma operación:

docker search phpldapadmin
docker pull osixia/phpldapadmin

Con el siguiente comando podemos obtener la IP del contenedor donde hemos instanciado nuestro LDAP:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' myldap

Finalmente, podemos instanciar el contenedor para administrar nuestro LDAP con phpldapadmin:

docker run -p 443:443 -e PHPLDAPADMIN_LDAP_HOSTS=172.17.0.2 -d osixia/phpldapadmin

Y así de una forma rápida tendríamos disponible nuestro servidor LDAP:

Podemos parar un contenedor:

docker stop myldap

Para borrar un contenedor deberíamos ejecutar el siguiente comando

docker rm myldap

Por último, para borrar la imagen descargada de Openldap, ejecutaríamos el comando:

docker rmi osixia/openldap

Tutorial 2: Crear una imagen desde un fichero Dockerfile

Un fichero Dockerfile es simplemente un fichero de texto que nos permite definir las instrucciones a seguir por Docker para construir una imagen.
En este ejemplo vamos a crear una imagen con un SO Centos 7 y le vamos a instalar el servidor web Apache:

FROM centos:latest
MAINTAINER http://www.centos.org
RUN yum -y update && yum clean all
RUN yum -y install httpd && yum clean all
EXPOSE 80
RUN rm -rf /run/httpd/* /tmp/httpd*
ENTRYPOINT /usr/sbin/apachectl -D FOREGROUND

RUN: Ejecuta una sentencia sobre la imagen base
EXPOSE: Expone el puerto 80 del contenedor para que pueda ser mapeado por la máquina anfitrión.
ENTRYPOINT: Indicamos que se ejecute apache2ctl -D FOREGROUND cada vez que arranquemos el contenedor.
Construimos la imagen con el comando:

docker build -t cloudadmins/centos7-httpd --file <DOCKERFILE_NAME> .

Finalmente, instanciamos nuestro contenedor con el comando:

docker run -d --name cloudadmins -p 80:80 -v <PATH_HOST>/www:/var/www/html cloudadmins/centos7-httpd

En esta ocasión hemos utilizado el parámetro -v para que el directorio /var/www/html del contenedor, sea el indicado en el comando de la máquina anfitrión.
 

Referencias i recursos

http://inlab.fib.upc.es/es/blog/docker-insights-des-de-la-jasp
http://media.fib.upc.edu/fibtv/streamingmedia/view/2/1128