Categories
General In detail OpenSource

Docker Machine con el driver de OpenNebula

Siguiendo con la serie de posts sobre Docker, en esta ocasión os presentamos el driver de Docker Machine para OpenNebula, con el que podremos crear máquinas virtuales con Docker dentro de nuestra plataforma cloud.
docker_opennebula
Los requisitos para poder utilizar el driver son los siguientes:

  • Docker Machine 0.5+
  • OpenNebula 4.x+

Para la instalación del plugin basta con seguir todos los pasos descritos en la URL del repositorio:
https://github.com/OpenNebula/docker-machine-opennebula

Como utilizar el driver de OpenNebula con Docker Machine:

Para utilizar el driver sólo necesitaremos disponer de acceso a un cloud con OpenNebula i configurar las variables de entorno ONE_AUTH y ONE_XMLRPC para que apunten a nuestro cloud OpenNebula y una imagen ya preparada con Docker Engine.
OpenNebula dispone de dos imágenes en modo appliance que se pueden importar desde su marketplace:

Una vez dispongamos de la imagen con Docker Engine, ya podemos levantar una màquina virtual con el driver de Docker Machine para OpenNebula, con la ejecución del siguiente comando:

docker-machine  create --driver opennebula --opennebula-network-id $NETWORK_ID --opennebula-image-name boot2docker --opennebula-image-owner oneadmin --opennebula-b2d-size 10240 mydockerengine

one-docker-1
 
 
 
 
 
 
 
 
 
 
 
Podemos personalizar el comando con los siguientes parámetros:

--opennebula-cpu: CPU value for the VM
--opennebula-vcpu: VCPUs for the VM
--opennebula-memory: Size of memory for VM in MB
--opennebula-template-id: Template ID to use
--opennebula-template-name: Template to use
--opennebula-network-id: Network ID to connect the machine to
--opennebula-network-name: Network to connect the machine to
--opennebula-network-owner: User ID of the Network to connect the machine to
--opennebula-image-id: Image ID to use as the OS
--opennebula-image-name: Image to use as the OS
--opennebula-image-owner: Owner of the image to use as the OS
--opennebula-dev-prefix: Dev prefix to use for the images: 'vd', 'sd', 'hd', etc...
--opennebula-disk-resize: Size of disk for VM in MB
--opennebula-b2d-size: Size of the Volatile disk in MB (only for b2d)
--opennebula-ssh-user: Set the name of the SSH user
--opennebula-disable-vnc: VNC is enabled by default. Disable it with this flag

Ahora lo que haremos será conectar nuestra shell local a la de la máquina virtual para que cada vez que ejecutamos un comando de Docker, este dé órdenes al Docker Engine instalado en la máquina virtual de OpenNebula.
Obtenemos las variables de entorno de la máquina virtual.

docker-machine env mydockerengine

Link  a la shell.

eval "$(docker-machine env mydockerengine)"

Con esto ya podemos empezar a utilizar docker sobre la máquina virtual  que acabamos de crear:

docker pull nginx
docker run --name mynginx -d -p 80:80 ngin

image2016-3-16 19-21-38

Categories
General In detail

Docker for Dummies

Qué es Docker?

DockerLogo
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.
docker4
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.
 
docker1
docker2

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:
docker3
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