Docker: Qué es, containers y cómo usarlo en tus proyectos
Debes haber oído hablar de Docker y tener esa pulga detrás de la oreja, preguntándote qué hace realmente y de qué se trata eso de containers, ¿verdad? En este artículo abordaremos estos temas.
¿Qué es Docker?
Docker es una plataforma open source desarrollada por Docker Inc. que tiene como objetivo crear y facilitar la administración de entornos aislados. Por lo tanto, permite empaquetar una aplicación o entorno dentro de un container, haciéndolos manejables para cualquier otro host que tenga Docker instalado.
De esta forma podrás crear, desplegar, migrar, copiar, etc. de un entorno a otro con mayor facilidad.
¿Docker es una máquina virtual?
Debes estar preguntándote esto, ¿verdad? Pero la respuesta a esa pregunta es no. Docker parece una máquina virtual súper liviana, pero en realidad no es una máquina virtual.
A continuación haré un breve resumen de containers y máquinas virtuales para una mejor comprensión.
Máquina virtual
La virtualización de máquinas se produce empaquetando una determinada aplicación en un modelo estándar con su propio entorno operativo.
Por lo tanto, independientemente de la máquina en la que ejecutará la aplicación, su configuración será la misma desde la capa del sistema operativo hasta las capas de bibliotecas y dependencias necesarias para la aplicación.
Pensando en la arquitectura de cluster de una base de datos, si se tiene una estructura dividida con Load Balance (estructura balanceada) entre 15 Vps. Los 15 Vps deberán tener la misma configuración y el mismo funcionamiento.
Si nos detenemos en esto, imagina tener que hacer todo esto manualmente…
Así, con el uso de la virtualización, todas estas configuraciones seguirán el modelo realizado de forma automática. Si pasas por una situación similar, utiliza administradores de máquinas virtuales para hacerte la vida más fácil.
Containers
Como máquinas virtuales, los containers también realizan empaquetado, pero no virtualizarán todo el entorno de la máquina. De esta forma, sólo funcionará encima de la aplicación y sus dependencias, realizando la virtualización sólo a nivel del sistema operativo y no de la máquina en sí.
Como tal, tendrá la ventaja de ejecutar entornos aislados con un solo Vps.
Además, el tamaño del sistema virtual será mucho menor en comparación con una máquina virtual, ya que el container solo integrará la configuración de su aplicación y no de una máquina virtual completa.
En este caso, el mejor ejemplo para usar containers es Docker, porque es open source, sencillo y colaborativo, convirtiéndose en el mayor referente a la hora de hablar de containers.
En la imagen de arriba tenemos un buen ejemplo de la diferencia entre container y máquina virtual.
Si nos fijamos en la virtualización, podemos ver que cada nueva aplicación que se ejecuta dentro de una máquina física replica el entorno como un todo, es decir, dentro de cada máquina virtual está todo el sistema base de archivos y un sistema operativo, por lo que consume una gran cantidad de recursos y potencia de procesamiento.
Ya en la parte de container, ten en cuenta que los recursos se comparten entre containerso quien te hospeda, es decir, el container utiliza el recurso operativo de la propia máquina física, aumentando la eficiencia en su uso, teniendo en cuenta que los containers están aislados en los niveles de memoria, procesamiento, disco y red.
Después de este breve resumen, pasaremos a la siguiente pregunta: ¿Por qué utilizar Docker?
A continuación mencionaré algunos puntos que hacen que valga la pena usar Docker.
1 - Aplicación como paquete completo
Al utilizar imágenes de Docker, es posible empaquetar toda su aplicación y sus dependencias, facilitando así la distribución, ya que no necesitarás enviar una enorme documentación explicando la configuración de infraestructura necesaria para ejecutar la aplicación. Simplemente, haz que la imagen esté disponible en el repositorio y otorga acceso al usuario y podrás descargar el paquete y ejecutarlo sin problemas.
Además, la actualización de tu aplicación también se ve beneficiada con Docker, ya que la estructura de capas de Docker hace que, si hay cambios, solo se transfiera la parte modificada, haciendo que el entorno cambie de forma rápida, sencilla y práctica. Con solo un comando, el usuario puede actualizar la imagen de la aplicación, la cual se reflejará en el container justo en el momento deseado.
2 - Semejanza entre ambientes
Cuando tu aplicación se convierte en una imagen de Docker, se puede crear una instancia de ella como container en cualquier entorno que desees. Esto significa que podrás utilizar tu aplicación de ayer como quieras, desde tu libreta personal o el notebook de la empresa donde trabajas, tal como se ejecutaría en el servidor de producción.
3 - Idioma común entre desarrollo e infraestructura
Docker utiliza una sintaxis muy eficiente para parametrizar imágenes y entornos de Docker, es un lenguaje común entre áreas que antes no tenían un buen diálogo.
4 - Comunidad
Así como es posible acceder a GitHub buscando ejemplos de código, también puedes utilizar el repositorio de imágenes de Docker para obtener buenos modelos de infraestructura de aplicaciones o servicios listos para integraciones complejas.
Recordando que usar estas imágenes no significa que siempre necesitarás usar las configuraciones que vienen en la imagen elegida, siempre puedes enviar tu propia configuración a los entornos y usar las imágenes que ya están listas solo para evitar el trabajo de lo básico.
5 - Estandarización y replicación
Como vimos, las imágenes de Docker se construyen usando archivos de definición, es posible que se siga un determinado estándar, aumentando la confianza en la replicación de la imagen. Pero para utilizar las imágenes de la mejor manera posible, necesitaremos seguir las mejores prácticas de construir imágenes, de modo de escalar nuestra estructura rápidamente.
Instalación de Docker
Actualmente, Docker posee dos versiones: Docker Community Edition y Docker Enterprise Edition. En ambas tendremos acceso a toda la API disponible, aunque la diferencia entre una y otra es el perfil deseado en tu aplicación.
Primero, instala Docker a través del comando:
Al concluir la instalación de Docker, utiliza el comando:
Si todo funciona correctamente, recibirás la siguiente respuesta en la terminal:
A partir de ahora, con Docker instalado no solo tienes los servicios sino también la utilidad de línea de comandos docker.
Vamos a explorar cómo utilizar el comando docker.
Utilizar docker consiste en pasarle una cadena de comandos y opciones secuenciadas por argumentos. Tendremos la siguiente sintaxis:
Si deseas ver todos los subcomandos disponibles:
Obteniendo lo siguiente:
Si deseas hacer una pregunta sobre un comando específico, escribe en la terminal:
Trabajando con algunas imágenes de Docker
De forma predeterminada, Docker extrae estas imágenes de Docker Hub. Cualquiera puede alojar sus imágenes de Docker en Docker Hub, por lo que la mayoría de las aplicaciones y distribuciones de Linux necesitarán alojarlas en Docker Hub.
Para verificar si puedes ingresar y descargar las imágens de Docker Hub, necesitas insertar:
Si Docker funciona correctamente, obtendrás esto:
En caso de que no haya una imagen hello-world local, irá a Docker Hub, el repositorio predeterminado, y descargará la imagen. Cuando se descarga la imagen, Docker crea un container y ejecuta la aplicación en él, mostrando el mensaje de arriba.
También puedes buscar usando el comando docker, seguido del subcomando search, con esto:
Así tendremos lo:
En las colunas del lado derecho, podemos observar la columna OFFICIAL. Ese OK indica una imagen construida y respaldada por el proyecto. Al ubicar la imagen deseada que usarás en tu proyecto, puedes descargarla en tu computadora usando el subcomando pull.
Resultará lo siguiente:
Después de usar el comando anterior, verás esto:
Después de descargar la imagen seleccionada, podrás ejecutar un container utilizando la imagen descargada con el subcomando run. Como se vio en el ejemplo de hello-world, en caso de que la imagen todavía no haya sido descargada cuando se ejecutó docker con el subcomando run, Docker primero la descargará y luego ejecutará un container utilizándola.
Para enumerar las imágenes que se descargaron en tu computadora, escribe:
Verás esto como respuesta:
Vamos a ejecutar un container Docker para entender algunos de los comportamientos. El container hello-world utilizado anteriormente es un ejemplo de container ejecutado que finaliza al completar la ejecución, pero también puedes ejecutar un container utilizando la imagen de Ubuntu.
Queda así:
Estos comandos -i y -t combinados te dan acceso a un shell interactivo del container:
Observa la id del container. Más tarde lo necesitaráse para identificarlo cuando vayas a removerlo.
De ahí en adelante podrás utilizar cualquier comando dentro del container. Primero, actualizaremos la base de datos del paquete dentro del container:
Nota ese sudo ya no es necesario ya que operará dentro del container como usuario root.
Aquí un ejemplo de lo que puede hacerse:
Eso permitirá instalar Node.js en el container del repositorio oficial de Ubuntu.
Conclusión
En este tutorial entendiste qué es Docker, cómo usarlo y trabajar con algunas imágenes y containers. Ahora que comprendes los conceptos básicos, pronto ofreceré nuevas formas de utilizar Docker para tus proyectos.
¡Éxito!
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.