10 Ene

Comenzando el desarrollo con Docker

Mateo Santos
Desarrollador Web

El mundo del desarrollo web, como en el mundo de la tecnología en general, avanza tan rápido que cuando conseguimos controlar una tecnología es probable que ya haya surgido otra que en poco tiempo la desbanque. En Vital Innova nos gusta siempre aprovechar al máximo los nuevos avances y por ello llevamos ya tiempo usando Docker para el desarrollo de nuestras páginas webs.

Antes de nada, ¿Qué es Docker?

De forma rápida y sencilla, digamos que Docker es un conjunto de contenedores que funcionan como una máquina virtual en nuestro ordenador. Más claro todavía: digamos que Docker nos ofrece la posibilidad de crear varios y muy distintos entornos de desarrollo sin que esté realmente instalado en nuestro sistema.

Nos da la posibilidad de tener una máquina funcionando con php7, otra con php 5 y otra con NodeJS 8.

Cuando trabajas con múltiples clientes, es realmente útil. Es muy normal que estés desarrollando una página para un cliente, funcione todo correctamente, y cuando lo publicas en el servidor de producción del cliente ves que ocurren fallos por incompatibilidad de las versiones. Porque puede ser que en tu entorno de desarrollo utilices PHP 7 y el servidor del cliente tenga PHP 5 por ejemplo, o una versión atrasada también de MySQL… Pasa y mucho…

¿Cómo funciona Docker?

Una vez instalado Docker en nuestro sistema, podremos ir añadiendo imágenes y contenedores para montar nuestro entorno.

Las imágenes son el sistema operativo base que se va a utilizar y los contenedores son instancias de estas imágenes base, totalmente configurables.

¿Se puede compartir información entre entornos?

¡Sí! Y es muy útil. Personalmente tengo una imagen montada de MySQL donde voy creando las bases de datos de los proyectos y luego vamos creando diferentes entornos que se conectan a esa base de datos común.

¿Entre cuantas imágenes puedo elegir?

Miles. Hay una imagen para prácticamente todo lo que necesites. El repositorio oficial de las imágenes de Docker se encuentra aquí, en DockerHub. Imagina tener en el mismo sistema un entorno con Node 10, una base de datos Mongo, pero a su vez también una base de datos Postgresql y otra de Couchbase… Maravilloso.

Vale, pero, ¿puedo crear mis propias imágenes?

¡Por supuesto! Docker ofrece la posibilidad de crear tus propias “recetas” a partir de una imagen básica. Esto se conoce como Dockerfile.

Un ejemplo de receta para crear un servidor web Apache sería:

FROM ubuntu
MAINTAINER VitalInnova
RUN apt-get update
RUN apt-get install apache2 -y
RUN echo "Apache con Docker!" > /var/www/html/index.html
EXPOSE 80
ENTRYPOINT apache2ctl -D FOREGROUND

Lo que le estamos diciendo aquí es:
– Créame una imagen contando con la imagen base ubuntu
– Identificamos al creador de la imagen
– Los comandos RUN son comandos que se ejecutarán en la máquina virtual cuando creemos el entorno.
EXPOSE indica el puerto que se utilizará en la máquina virtual
ENTRYPOINT es el comando que se ejecutará cada vez que se arranque el contenedor.

Para construir la imagen hacemos:

docker build -t vitalinnova/servidorweb .

Y para hacerla correr:

docker run --name servidorweb -d -p 8080:80 vitalinnova/servidorweb

Aquí lo que hacemos es crear un contenedor llamado “servidorweb” a partir de la imagen creada Vitalinnova/servidorweb

El parámetro -p le está diciendo que el puerto 8080 en nuestra máquina se corresponde con el 80 de la máquina virtual.

¡Resumiendo!

Este post es sólo un pequeño avance de la potencia que nos ofrece Docker a la hora de cumplir con el objetivo de desarrollar la mejor experiencia para el cliente, pues el igualar el entorno de desarrollo con el entorno de producción nos evitará muchos dolores de cabeza.

En Vital Innova nos gusta estar al tanto de los nuevos avances y Docker es algo que no podíamos dejar pasar por alto.