¿Qué es Docker y para qué sirve?

Docker es una de las tecnologías más de moda y poco a poco entrará en prácticamente todas las plataformas. Ahora bien ¿qué es ? y ¿cómo funciona?. Docker esta relacionado con el mundo del despliegue de aplicaciones. Todos desarrollamos aplicaciones y las  instalamos  en nuestros servidores .

sin docker

Con el paso de los años ha dejado de ser habitual trabajar de esta forma y se ha optado por soluciones de virtualización tipo VMWare o Virtual Box .Estas permiten aprovechar mejor los recursos de nuestro hardware. Podemos disponer de una máquina de doble procesador físico  con 16 núcleos  y 64 GB de RAM y virtualizar varios sistemas operativos de forma simultánea . En cada sistema operativo instalaremos lo que necesitemos MySQL , Tomcat , Apache , JBoss etc.

sin docker vm

Esta solución es mejor que la anterior en la que utilizabamos servidores físicos y nos permite una gestión mucho más moderna de los recursos . La pregunta más importante es : ¿Es esta solución óptima? . Si revisamos el esquema nos daremos cuenta que cada máquina virtual contiene un sistema operativo COMPLETO . ¿Es esto necesario? . Es decir, si nosotros en un sistema operativo lo único que necesitamos es instalar un MySQL , ¿Es obligatorio instalar el sistema operativo completo?. O podemos instalar un núcleo mínimo  sobre el que desplegar MySQL. Esta es una idea muy interesante  y es el concepto sobre el que Docker se basa. Docker genera CONTENEDORES . Estos contenedores se encargan de almacenar un sistema operativo mínimo y la aplicación que deseamos desplegar.

docker diagrama

De esta manera podemos sacar un mayor rendimiento al hardware del que disponemos ya que a partir de este momento no es necesario virtualizar el sistema operativo entero sino que podemos crear contenedores con nuestras necesidades especificas. De esta forma aumentamos la capacidad de despliegue de nuestras máquinas físicas y ahorramos costes.

Un ejemplo de Docker

Utilizar docker no es complicado , aunque si es cierto que todavía la información es un poco confusa. El primer paso es instalarlo desde la página web.  Una vez instalado  empezar es relativamente fácil. Abrimos una linea de comandos y escribimos

docker search apache2

Este comando hace que docker se conecte a su repositorio y nos busque un contenedor de apache2

docker listado

El siguiente paso es seleccionar un contenedor e instalarlo , en este caso podemos usar el servidor Apache2 para PHP. Escribiremos en linea de comandos

docker pull reinblau/php-apache2

Se descargará la imagen del contenedor

docker download

Descargada la imagen del contenedor nos queda arrancarlo y crear una instancia para poder trabajar con ella. Para ello usamos el comando run.

docker run -it reinblau/php-apache2 /bin/bash

Ya tenemos un contenedor arrancado y nos hemos conectado a su shell.

docker ls

El siguiente paso es escribir desde la shell :

service apache2 start

Esto arrancará apache2 desde el contenedor y asignará una ip propia al contenedor . Para saber la ip del contenedor abriremos otra shell y escribiremos

docker ps -a

Que nos devolverá los contenedores  existentes  y sus ids

docker ps

Con la id del contenedor solicitaremos inspeccionar el contenedor

docker inspect 46cd875db945

Esto  devuelve una estructura JSON con mucha información entre ella la IP del container. Abrimos un navegador y accedemos a la IP.

docker apache

Tenemos nuestro primer contenedor de Docker arrancado con un Apache. Estas tecnologías tienen un presente y futuro brillante. La llegada de las arquitecturas orientadas a microservicios les darán un plus. Habrá situaciones en las que encaje mejor un servidor físico , otras un contenedor y otras una máquina virtual. Lo importante es tener opciones.

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

16 Responses to ¿Qué es Docker y para qué sirve?

  1. Carlo 6 octubre, 2016 at 16:28 #

    Excelente post, la verdad es que hace un tiempo estoy escuchando de docker pero no o habia entendido.
    🙂

  2. Carles 7 octubre, 2016 at 11:38 #

    Llevamos un año con Docker en producción y no volvería a las VMs por nada del mundo.

    • Cecilio Álvarez Caules 9 octubre, 2016 at 20:05 #

      Gracias por el aporte 🙂 , se agradecen comentarios desde las experiencia

  3. Antonio 7 octubre, 2016 at 15:04 #

    Hola Cecilio, una aclaración. Esta tecnologia me sirve para configurar entornos? Es decir, si yo tengo un proyecto que utiliza un determinado servidor y una determinada base de datos puedo crear un contenedor con todas esas tecnologias para llegar y desarrollar sobre el? La cuestion es que tengo multiples proyectos con multiples tecnologias, y me resultaria util cada vez que tengo que cambiar de proyecto, tener un entorno configurado para que sea rapido ponerme a desarrollar. o en este caso seria mejor utilizar maquinas virtuales?

    gracias

    un saludo

    • Cecilio Álvarez Caules 9 octubre, 2016 at 20:04 #

      Primero decirte que no soy un experto en Docker , pero si que puedes replicar entornos de desarrollo etc , sin problemas y pienso que va a substituir a las máquinas virtuales en bastantes situaciones. Es algo que va a cambiar muchos paradigmas.

  4. Alejandro G. 11 octubre, 2016 at 18:56 #

    Muy interesante el artículo. Yo vengo trabajando con Docker desde hace unos meses, y un problema que se me planteó es la forma adecuada de realizar los respaldos, teniendo en cuenta que hay contenedores que usan volúmenes mapeados, y otros que no.
    Otro tema que no he explorado a fondo aún es la capacidad de docker de realizar un commit de una imagen, y cómo utilizarla en nuestras operaciones.

    Muchas gracias

  5. Jesús Perales 19 octubre, 2016 at 20:56 #

    Yo ando con la idea de meter Docker, pero mi idea realmente es fomentar las DevOps, actualmente ya pude meter un repositorio de código(Git), ahora toca al servidor de integración continua y por ultimo Docker.

    • Cecilio Álvarez Caules 20 octubre, 2016 at 9:19 #

      Si yo creo que git es un obligatorio, hoy en día es el que más me gusta 🙂 . Pero actualizar una plataforma lleva tiempo y hay que ir poco a poco 😉

  6. Carol 25 octubre, 2016 at 12:46 #

    Muy interesante. Gracias por el post !

    • Cecilio Álvarez Caules 25 octubre, 2016 at 13:21 #

      De nada 🙂

  7. Yolanda 28 octubre, 2016 at 12:52 #

    Hola Cecilio,

    Quería saber si realizas consultas a particulares respecto a arquitectura. Posibilidad de paquete de horas de consultoría.

    Gracias,

    • Cecilio Álvarez Caules 1 noviembre, 2016 at 8:56 #

      Buenas Yolanda , muchas gracias por tu consulta. En estos momentos no estoy ofreciendo servicios online supongo que en un futuro me anime. Pero ahora ando con muchos lios 🙂

      Gracias por preguntar

  8. Anthony Piñero 2 noviembre, 2016 at 15:53 #

    Excelente articulo, estos ambientes son utiles para el desarrollo o son estables en ambientes de produccion tambien?

    • Cecilio Álvarez Caules 2 noviembre, 2016 at 17:59 #

      Yo creo que están avanzando mucho , pero hay que tomárselo con calma yo no me he puesto con ello aún 🙂

Trackbacks/Pingbacks

  1. El porqué de los MicroServicios - Arquitectura Java - 23 diciembre, 2016

    […] queremos tener servicios realmente independientes tendremos que desplegar una solución como Docker basada en contenedores y en cada contenedor un WAR. De esta forma conseguiremos un aislamiento […]

  2. Reactive MicroServices y Arquitectura - Arquitectura Java - 7 enero, 2017

    […] máquina el resto de las aplicaciones sufrirán .  El siguiente paso es generar contenedores tipo Docker y aislar las aplicaciones haciéndolas completamente […]

Deja un comentario