Que debes saber si vas a empezar a trabajar con Docker

Victoria Redondocontenedores, docker

¿Docker funciona con Windows?

Sí. Docker Desktop está disponible para Windows, MacOS y Linux. Aquí tienes los enlaces de descarga:

¿Cuál es la diferencia entre las Máquinas Virtuales (VM) y los Contenedores?

Esta es una pregunta que hacen mucho. La forma más simple en la que se pueden explicar las diferencias entre las Máquinas Virtuales y los Contenedores es que una VM virtualiza el hardware y un Contenedor “virtualiza” el SO, o incluso una parte del SO (Kernel).

Si se mira la imagen de arriba, se puede ver que hay múltiples Sistemas Operativos funcionando cuando se usa la tecnología de Máquina Virtual. Esto se traduce en un incremento en los tiempos de inicio, generación de restricciones y gastos generales al instalar y mantener un sistema operativo completo. Además, con las máquinas virtuales, puedes ejecutar diferentes tipos de sistemas operativos. Por ejemplo, puedo ejecutar Windows 10 y una distribución de Linux en el mismo hardware al mismo tiempo.

Ahora echemos un vistazo a la imagen de los contenedores Docker.

Como puedes ver en esta imagen, sólo tenemos un Sistema Operativo de Anfitrión instalado en nuestra infraestructura. Docker se instala justo “encima” de la capa del sistema operativo del anfitrión. Cada aplicación está entonces empaquetada en una imagen que contiene toda la configuración, librerías, archivos y ejecutables que la aplicación necesita para funcionar.

En el núcleo de la tecnología, los contenedores son sólo un proceso ejecutado por el sistema operativo, pero con restricciones en cuanto a los archivos y otros recursos que pueden consumir y a los que pueden tener acceso, como la CPU y las redes.

Dado que los contenedores utilizan características del sistema operativo anfitrión y, por lo tanto, comparten el Kernel, es necesario crearlos para ese sistema operativo. Así, por ejemplo, no se puede ejecutar un contenedor que contenga binarios de linux en Windows o viceversa.

Esto es sólo lo básico y, por supuesto, los detalles técnicos pueden ser un poco más complejos. Pero si se entienden estos conceptos, se puede adquirir una buena base en la diferencia entre las Máquinas Virtuales y los Contenedores.

¿Cuál es la diferencia entre una imagen y un contenedor?

Esta es otra pregunta muy común. Parte de la confusión proviene del hecho de que a veces se intercambian estos términos cuando se habla de contenedores.

Una imagen es un conjunto de binarios que es usada por Docker para crear tu Contenedor (proceso). Para definir una imagen se crea un Dockerfile. Cuando Docker lee y ejecuta los comandos dentro del Dockerfile, el resultado obtenido es una imagen que luego puede ser ejecutada en forma de contenedor.

Un contenedor, en términos simples, es un proceso. Puedes ejecutar múltiples instancias de tu imagen y puedes crearlas, iniciarlas y detenerlas, así como conectarlas a otros contenedores mediante redes.

¿Cuál es la diferencia entre Docker y Kubernetes?

La confusión entre los dos proviene de la comunidad de desarrollo, que hablan como si estos conceptos fueran iguales, pero no lo son.

Kubernetes es simplemente un orquestador y Docker es una plataforma de construcción, envío y manejo de contenedores. Docker, como plataforma, tiene su propio orquestador llamado Swarm.

La orquestación de contenedores, en términos sencillos, es el proceso de gestión y programación del funcionamiento de los contenedores en los nodos que gestiona el orquestador. Para que todo el mundo lo entienda, es como un director de una orquesta. El director se encarga de que todos los instrumentos estén coordinados y si alguno falla, lo detecta para poner una solución lo más inmediata posible.

¿Por qué no puedo conectarme a mi aplicación web que se ejecuta en un contenedor?

Por defecto, los contenedores son seguros y están aislados del tráfico de la red exterior y no exponen ninguno de sus puertos. Por lo tanto, si se quiere ser capaz de manejar el tráfico que viene de fuera del contenedor, necesita abrir el puerto en el que el contenedor está escuchando. Para las aplicaciones web esto es típicamente el puerto 80 o 443.

Para exponer un puerto cuando se está manejando un contenedor, se puede hacer de varias formas:

  • Utilizando un flag en la línea de comandos al lanzar el contenedor – Por ejemplo: $ docker run -p 80:80 nginx. Dicho comando de muestra ejecuta un contenedor Nginx y publicará el puerto 80 interno al puesto 80 del mundo exterior.
  • Definiéndolo en un fichero Yaml.

Puedes leer todo sobre redes y mapeo de puertos de Docker en la siguiente documentación.

¿Cómo puedo ejecutar varias aplicaciones en un mismo contenedor?

Esta es una pregunta muy común de aquellos que vienen de trabajar con Máquinas Virtuales. La razón es que al trabajar con estas máquinas, podemos pensar que nuestra aplicación es dueña de todo el sistema operativo y por lo tanto puede crear múltiples procesos o tiempos de ejecución.

Cuando se trabaja con contenedores, es una buena práctica asignar un proceso a un contenedor por varias razones (securización, filosofía de microservicios, etc.). Pero la mayor razón para ejecutar un proceso dentro de un contenedor es con respecto al principio KISS.

Cuando los contenedores tienen un único proceso, pueden concentrarse en hacer una cosa y sólo una cosa. Esto les permite aumentar y disminuir el escalado con relativa facilidad.

¿Cómo persistir los datos cuando se ejecuta un contenedor?

Los contenedores son inmutables y no se debe escribir en ellos datos que deseemos mantener después de que el contenedor deje de funcionar. Hay que pensar en los contenedores como procesos inmutables que podrían dejar de funcionar en cualquier momento y ser reemplazados por otro muy fácilmente.

Dicho esto, ¿cómo escribimos datos y hacemos que un contenedor los use en tiempo de ejecución o escribimos datos en tiempo de ejecución que puedan persistir? Aquí es donde los volúmenes entran en juego.

Los volúmenes son el mecanismo preferido para escribir y leer datos persistentes. Los volúmenes son gestionados por Docker y pueden ser trasladados, copiados y administrados fuera de los contenedores.

Para una excelente visión general del almacenamiento y los detalles sobre los volúmenes y los montajes de las carpetas, aquí está la documentación sobre Almacenamiento.

Conclusión

Estas son algunas de las preguntas comunes que nos pueden surgir cuando estamos interesados en Docker y en la tecnología de contenedores, pero no se tiene un conocimiento profundo de la herramienta.

Si estás interesado en esta tecnología y quieres leer más preguntas y respuestas comunes, ponte en contacto con nosotros, o consulta la FAQ que tiene Docker en su página web.