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 .
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.
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.
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
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
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.
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
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.
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.
Excelente artículo y explicación. Sin duda la mejor página.
Una duda:
¿Los contenedores se pueden comunicar entre si en un mismo servidor físico o contra otros contenedores ubicados en otros servidores?
Si hay que mapear puertos pero es lo habitual
Excelente artículo. Muy explícito para entender este concepto y saber en que momento usarlo en nuestras soluciones de TI.
gracias 🙂
Hola cecilio, tienes aguna idea sobre como usar el servidor de aplicaciones websphere 9 con docker. Podes hacer algun articulo. Muy interesante.
Saludos
[…] máquina el resto de las aplicaciones sufrirán . El siguiente paso es generar contenedores tipo Docker y aislar las aplicaciones haciéndolas completamente […]
[…] 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 […]
Excelente articulo, estos ambientes son utiles para el desarrollo o son estables en ambientes de produccion tambien?
Yo creo que están avanzando mucho , pero hay que tomárselo con calma yo no me he puesto con ello aún 🙂
Hola Cecilio,
Quería saber si realizas consultas a particulares respecto a arquitectura. Posibilidad de paquete de horas de consultoría.
Gracias,
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
Muy interesante. Gracias por el post !
De nada 🙂
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.
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 😉
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
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
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.
Llevamos un año con Docker en producción y no volvería a las VMs por nada del mundo.
Gracias por el aporte 🙂 , se agradecen comentarios desde las experiencia
Excelente post, la verdad es que hace un tiempo estoy escuchando de docker pero no o habia entendido.
🙂