Seguramente si te dedicas a la tecnología habrás escuchado la palabra contenedor bastante en los últimos años. Por norma general, docker se relaciona a perfiles de IT o DevOps. Esto no quiere decir que si desarrollas software a día de hoy no puedas empezar a sacarle partido a los contenedores.
Antes un poco de contexto
Docker es un sistema que persigue los mismos objetivos que sistemas de virtualización tradicionales. Desde el punto de vista de un experto en virtualización hay muchas diferencias entre docker y el resto pero para lo que veremos en este post me quedaría con el hecho que nos permite generar imágenes más ligeras que corren en contenedores. Los contenedores son instancias aisladas que no necesitan otra capa de sistema operativo ya que comparten el kernel del host. Originalmente este host es un sistema Linux.
En 2014 Microsoft oficializa una colaboración con docker. Se anuncia que docker soportará Windows Server 2016 como motor y que empieza a trabajar en un cliente docker para Windows.
Igual que la mayoría de fabricantes, Microsoft está sumándose al carro de contenedores. Ya dispone de servicios en Azure para hospedar contenedores e incorpora tools que nos facilitan las cosas para trabajar con docker desde Visual studio Team Services y Visual Studio 2017 con .net core. Con las últimas versiones de Visual Studio ya tienes la opción de deployar contra docker directamente en contenedores tu código. Al ser imágenes ligeras, los contenedores se reconstruyen cada vez que cambia el código y hacemos una build.
¿En qué puede ayudarte docker?
Cuántas veces te ha pasado que arrancas en un proyecto y tienes que instalarte en tu sistema operativo un motor de SQL Server, Redis, MongoDb, Oracle, etc… Es posible que el equipo tenga infraestructura dev en Azure u On Premise con todos estos recursos contra los que los desarrolladores trabajamos… pero no siempre es así.
Docker permite definir una imagen de cada uno de estos recursos en ficheros y tenerlos en el repositorio versionado junto al resto de código fuente. No sólo podemos definir un servidor de datos y así evitar instalar el servicio directamente en nuestro pc, sino que además podemos definir una imagen en la que ya exista la base de datos asociada al proyecto con ciertos datos por defecto. Ya existe SQL Server para Linux o la otra opción es usar contenedores Windows que ya está soportado con la última versión de docker para Windows (preview en el momento que escribo este post).
A continuación veremos una demo práctica que nos ayudará a hacernos una idea de lo sencillo que es levantar un contenedor con Redis.
Demo Redis
En primer lugar tendremos que instalarnos docker for windows (10) y activar Hyper V.
Una vez termina la instalación abrimos powershell (o cmd) y simplemente ejecutamos este comando. Donde mapeas un puerto de tu localhost al host docker (sea linux o windows) y seguidamente le das el nombre de la imagen.
La primera vez que lo ejecutas tardará un poco más y necesitarás conexión a internet porque descargará la imagen del hub público de docker. Puedes echar un vistazo al hub de docker si te gusta minecraft o que sé yo.. en un momento levantas un servidor.
Si queremos conectar al redis podemos usar el mismo cliente que usemos habitualmente para conectarnos al servicio redis en Azure apuntando la conexión en este caso a 127.0.0.1.
Es sencillo familiarizarse con los comandos de docker, pero si le tienes alergia a la línea de comandos puedes usar Kitematic que permite manipular el host docker con una aplicación, donde puedes añadir y quitar imágenes, contenedores, configuración, etc desde una aplicación de escritorio…
Virtualizar un servicio con docker es algo bastante sencillo de hacer y opino que puede ser útil ya a día de hoy.
Para finalizar el post dejo algo de documentación y enlaces para los que les haya interesado el tema y aprovecho para recordar que si te mueves por Barcelona, el 22 de Abril se organiza el Global Azure, evento en el que seguro se habla en alguna sesión de Azure Container Services y cómo deployar asp.net core.
Connect 2016, Get Started with Net Core and Docker
Video donde “Glenn Condron” hace una demo práctica sobre una de las novedades de visual studio 2017 que se presentaron en el evento Connect de este año pasado relacionadas con net core y docker. (Inglés)
Docker-compose permite levantar aplicaciones orientadas a microservicios donde cada dll corre en un contenedor aislado. En este post se explica cómo practicar con un escenario “hola mundo” con 3 contenedores asp.net core que publica a docker local la aplicación con docker-compose (sin integración con el ide, ni vsts…). (Español)
Post en el que se explica como conectar por ssh a una máquina virtual en Azure con docker instalado y deployar desde tu máquina con docker-compose. No es ACS pero verás que es muy sencillo mover tus contenedores a la nube! (Español)
Free eBook on “Containerized Docker Application Lifecycle with Microsoft Tools And Platform”
Este post resume y hace referencia a las novedades sobre Microsoft y docker que se presentaron en connect y enlaza con un libro interesante escrito por el mismo autor del post “Cesar de la Torre”. (Inglés)
Hasta la próxima!
Senior Developer and Cloud Specialist | Soluciones Microsoft| SOGETI ESPAÑA
Pingback: Lo nuevo – itblogsogeti