David

Que es Docker?
Docker es una plataforma que facilita enormemente la vida de los desarrolladores al permitir crear, probar y desplegar aplicaciones de forma rápida y sencilla. La esencia de Docker radica en empaquetar el software y todas sus dependencias en un contenedor autocontenido. Esto significa que cada aplicación se integra con todo lo que necesita para funcionar, desde bibliotecas y herramientas hasta el propio código, garantizando que se ejecute de la misma forma sin importar dónde se implemente.
En el proceso de desarrollo de software, los equipos suelen enfrentarse a diversos desafíos. Uno de ellos es el momento de escribir el código en la máquina del desarrollador. Aquí, el reto consiste en manejar las diferencias de configuración, instalar los paquetes adecuados y ajustar el entorno para que el código funcione correctamente. Los problemas pueden surgir al tratar de mantener consistencia en las versiones de bibliotecas y herramientas, o al compartir el código con otros miembros del equipo que trabajan en configuraciones distintas.
Otro obstáculo importante se presenta cuando llega el momento de trasladar la aplicación a otro entorno. Convertir el código en un producto listo para ser desplegado puede ser complicado, sobre todo cuando se tienen que gestionar múltiples compilaciones o configuraciones especiales para adaptarse a diferentes servidores. La dificultad aumenta cuando no se tiene acceso directo al entorno de producción o cuando se trabaja en plataformas virtualizadas o incluso en entornos serverless, donde las condiciones de ejecución pueden variar significativamente.
Finalmente, la implementación de la aplicación en el ambiente de producción representa un desafío crucial. Aun cuando el software funcione bien en el entorno de desarrollo, puede presentar problemas al ejecutarse en producción debido a diferencias en el sistema operativo, limitaciones en los recursos de hardware o problemas de compatibilidad con servicios externos, como bases de datos u otras aplicaciones. Docker ayuda a solucionar estos inconvenientes al crear un ambiente uniforme, donde todas las dependencias y configuraciones se mantienen constantes, permitiendo que la aplicación se comporte de forma predecible y fiable, sin importar las diferencias entre los diversos entornos de ejecución.
Arquitectura de Docker

En el centro de la arquitectura se encuentra el servidor Docker, también conocido como Docker Daemon (dockerd). Este proceso se ejecuta en segundo plano y es el encargado de crear, gestionar y ejecutar los contenedores de Docker. El daemon se comunica mediante una API REST, lo cual permite que otras herramientas, como la interfaz de línea de comandos de Docker (Docker CLI), interactúen con él.
Encima del daemon se encuentra el cliente de Docker (Docker CLI). Este es el programa que los usuarios utilizan para emitir comandos, como docker run
o docker build
. Cuando el usuario ejecuta un comando, el cliente lo envía al daemon mediante la API REST, y el daemon se encarga de realizar la acción solicitada.
El daemon de Docker gestiona varios objetos fundamentales en el ecosistema Docker:
- Contenedores: Son instancias ejecutables de imágenes que contienen todo lo necesario para ejecutar una aplicación. Docker los gestiona, crea, inicia, detiene y elimina a través del daemon.
- Imágenes (images): Son plantillas de solo lectura que contienen el sistema de archivos y las instrucciones necesarias para crear un contenedor.
- Volúmenes de datos (data volumes): Son unidades de almacenamiento persistente que Docker usa para mantener datos fuera del ciclo de vida de los contenedores.
- Redes (network): Docker también gestiona las redes virtuales que permiten a los contenedores comunicarse entre sí o con el exterior.
Comandos básicos
corro el contenedor hello-world
$ docker run hello-world
muestra todos los contenedores
$ docker ps -a
muestra el detalle completo de un contenedor
$ docker inspect <containe ID>
entra al contenedor, y podemos escribir los comandos
docker exec -it mi_contenedor /bin/bash
Exponiendo contenedores
docker run -d –name proxy nginx (corro un nginx, y lo nombro proxy)
docker stop proxy (apaga el contenedor)
docker rm proxy (borro el contenedor)
docker rm -f <contenedor> (lo para y lo borra)
docker run -d –name proxy -p 8080:80 nginx (corro un nginx y expongo el puerto 80 del contenedor en el puerto 8080 de mi máquina)
