Docker y sus contenedores: una nueva forma de desplegar tus ambientes

"¡En mi máquina funciona, en el cliente no!"  

docker ok

¿Cuántas veces nos ha pasado de desarrollar un sistema, probarlo y ver que funciona, pero al momento de desplegarlo, todo se rompe? ¿Qué hacemos? ¿Redesplegamos? ¿Debugeamos? 

En el presente artículo se describe una herramienta que ayuda a evitar este incómodo momento que ha sufrido aluna vez todo desarrollador. 

A continuación, presentamos una introducción al uso de contenedores, sus ventajas y desventajas y algunos comandos simples para probar.

¿Qué es un contenedor?

Los contenedores de software son un conjunto de elementos que permiten ejecutar una aplicación determinada en cualquier sistema operativo, permitiendo garantizar que una aplicación se ejecute correctamente cuando cambie su entorno. 

La idea general es, que al desarrollar un sistema en un entorno específico se puede ejecutar en otros entornos con características diferentes, sin tener que cambiar frameworks o configuraciones. 

Debido a su utilidad y agilidad para migrar cualquier desarrollo de una plataforma a otra, el uso de loscontenedores de software ha crecido en los últimos años.

 

Contenedor VS Máquina Virtual

1

 

Dado que cada herramienta tiene sus propias ventajas y desventajas, es común preguntarse cuál de estas opciones es conveniente usar y la respuesta es que dependerá de lo que uno quiera lograr. Si se quieren correr diferentes tipos de aplicaciones que insuman varios y distintos recursos, probablemente se elegirá la opción de una VM. En cambio, si la idea es ejecutar varias copias de la misma aplicación, tal vez lo mejor sea un contenedor. También se puede recurrir a una solución que use tanto VM como contenedores y, de esta manera, aprovechar las ventajas de ambas herramientas. El desafío en este caso consistirá en cómo manejar/administrar ambas arquitecturas al mismo tiempo. 

¿Qué es Docker?

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización a nivel de sistema operativo. 

Con esta herramienta se puede empaquetar una aplicación y sus dependencias en un contenedor virtual, que puede ejecutarse en cualquier servidor. Asimismo, permite la flexibilidad y portabilidad en dónde la aplicación se puede ejecutar, ya sea en las instalaciones físicas, en la nube pública, en la nube privada, etc. 

Docker utiliza características de aislamiento de recursos del kernel, tales como cgroups y namespaces, para permitir que "contenedores" independientes se ejecuten dentro de una sola instancia, evitando la sobrecarga de iniciar y mantener máquinas virtuales. 

El soporte del kernel de Linux para los espacios de nombres, aísla la vista que tiene una aplicación de su entorno operativo, incluyendo árboles de proceso, red, ID de usuario y sistemas de archivos montados. Por su parte, los cgroups del kernel proporcionan aislamiento de recursos, incluyendo la CPU, la memoria, el bloque de E / S y de la red. 

En la versión 0.9, Docker incluye la biblioteca libcontainer como su propia manera de utilizar directamente las facilidades de virtualización que ofrece el kernel de Linux, además de utilizar las interfaces abstraídas de virtualización.

Comandería básica Docker

Para listar nuestros contenedores activos utilizamos el comando:

docker ps 

Para crear un contenedor se usa el comando: 

docker run -it imagen(se puede poner el -it para que corra de modo iterativo)

Para ver los contenedores creados, pero que no se están ejecutando, usamos el comando:

docker ps -a

Para que se ejecute nuestro contenedor ya creado: 

docker start <id>

Para eliminar el contenedor hay que detenerlo con el comando stop:

docker stop <id>

Luego podremos borrarlo con el comando: 

docker rm <nombre_contenedor>

Se puede borrar en ejecución si se usa el flag f:

docker rm <nombre_contenedor> -f 

Otros comandos de Docker son:

2

Links útiles:

https://docs.docker.com/get-started/

https://www.codeschool.com/courses/try-docker

Autores:

Javier Horacio Campa - Desarrollador .NET

Gregorio Michalopulos - Desarrollador .NET

José María Virgili - Desarrollador .NET

 

Contacto

info@baufest.com