¿Qué es Docker?
Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones. Docker te permite separar tus aplicaciones de tu infraestructura para que puedas entregar software rápidamente. Con Docker, puedes administrar tu infraestructura de la misma manera que administras tus aplicaciones. Al aprovechar las metodologías de Docker para enviar, probar y desplegar código, puedes reducir significativamente el tiempo que transcurre entre escribir el código y ejecutarlo en producción.
La plataforma Docker
Docker ofrece la capacidad de empaquetar y ejecutar una aplicación en un entorno aislado de forma flexible llamado contenedor. El aislamiento y la seguridad te permiten ejecutar muchos contenedores simultáneamente en un host determinado. Los contenedores son ligeros y contienen todo lo necesario para ejecutar la aplicación, por lo que no necesitas depender de lo que esté instalado en el host. Puedes compartir contenedores mientras trabajas y estar seguro de que todos los destinatarios con los que los compartes obtendrán el mismo contenedor que funciona exactamente de la misma manera.
Docker proporciona herramientas y una plataforma para administrar el ciclo de vida de tus contenedores:
- Desarrolla tu aplicación y sus componentes de soporte utilizando contenedores.
- El contenedor se convierte en la unidad para distribuir y probar tu aplicación.
- Cuando estés listo, despliega tu aplicación en tu entorno de producción, como un contenedor o un servicio orquestado. Esto funciona de la misma manera tanto si tu entorno de producción es un centro de datos local, un proveedor de la nube o una combinación híbrida de ambos.
¿Para qué puedo usar Docker?
Entrega rápida y consistente de tus aplicaciones
Docker optimiza el ciclo de vida del desarrollo al permitir a los desarrolladores trabajar en entornos estandarizados utilizando contenedores locales que proporcionan tus aplicaciones y servicios. Los contenedores son excelentes para flujos de trabajo de integración continua y entrega continua (CI/CD).
Considera el siguiente escenario de ejemplo:
- Tus desarrolladores escriben código localmente y comparten su trabajo con sus colegas utilizando contenedores Docker.
- Usan Docker para enviar sus aplicaciones a un entorno de prueba y ejecutar pruebas automáticas y manuales.
- Cuando los desarrolladores encuentran errores, pueden corregirlos en el entorno de desarrollo y volver a desplegarlos en el entorno de prueba para su evaluación y validación.
- Cuando se completan las pruebas, hacer llegar la corrección al cliente consiste en enviar la imagen actualizada al entorno de producción.
Despliegue y escalado receptivos
La plataforma basada en contenedores de Docker permite cargas de trabajo altamente portátiles. Los contenedores Docker pueden ejecutarse en la computadora portátil local de un desarrollador, en máquinas físicas o virtuales en un centro de datos, en proveedores de la nube o en una combinación de entornos.
La portabilidad y la naturaleza ligera de Docker también facilitan la administración dinámica de cargas de trabajo, escalando verticalmente o eliminando aplicaciones y servicios según lo exijan las necesidades del negocio, casi en tiempo real.
Ejecución de más cargas de trabajo en el mismo hardware
Docker es ligero y rápido. Ofrece una alternativa viable y rentable a las máquinas virtuales basadas en hipervisores, lo que te permite utilizar una mayor parte de la capacidad de tu servidor para lograr tus objetivos comerciales. Docker es perfecto para entornos de alta densidad y para despliegues pequeños y medianos donde necesitas hacer más con menos recursos.
Arquitectura de Docker
Docker utiliza una arquitectura cliente-servidor. El cliente de Docker se comunica con el daemon de Docker, que realiza el trabajo pesado de construir, ejecutar y distribuir tus contenedores Docker. El cliente y el daemon de Docker pueden ejecutarse en el mismo sistema, o puedes conectar un cliente de Docker a un daemon de Docker remoto. El cliente y el daemon de Docker se comunican mediante una API REST, a través de sockets UNIX o una interfaz de red. Otro cliente de Docker es Docker Compose, que te permite trabajar con aplicaciones que constan de un conjunto de contenedores.

El daemon de Docker
El daemon de Docker (dockerd) escucha las solicitudes de la API de Docker y administra objetos de Docker como imágenes, contenedores, redes y volúmenes. Un daemon también puede comunicarse con otros daemons para administrar servicios de Docker.
El cliente de Docker
El cliente de Docker (docker) es la forma principal en que muchos usuarios de Docker interactúan con Docker. Cuando usas comandos como docker run, el cliente envía estos comandos a dockerd, que los ejecuta. El comando docker utiliza la API de Docker. El cliente de Docker puede comunicarse con más de un daemon.
Docker Desktop
Docker Desktop es una aplicación fácil de instalar para tu entorno Mac, Windows o Linux que te permite compilar y compartir aplicaciones contenerizadas y microservicios. Docker Desktop incluye el daemon de Docker (dockerd), el cliente de Docker (docker), Docker Compose, Docker Content Trust, Kubernetes y Credential Helper. Para obtener más información, consulta
Docker Desktop.
Registros de Docker
Un registro de Docker almacena imágenes de Docker. Docker Hub es un registro público que cualquiera puede usar, y Docker busca imágenes en Docker Hub de forma predeterminada. Incluso puedes ejecutar tu propio registro privado.
Cuando usas los comandos docker pull o docker run, Docker descarga las imágenes requeridas de tu registro configurado. Cuando usas el comando docker push, Docker sube tu imagen a tu registro configurado.
Objetos de Docker
Cuando usas Docker, estás creando y utilizando imágenes, contenedores, redes, volúmenes, complementos (plugins) y otros objetos. Esta sección es una breve descripción general de algunos de esos objetos.
Imágenes
Una imagen es una plantilla de solo lectura con instrucciones para crear un contenedor Docker. A menudo, una imagen se basa en otra imagen, con alguna personalización adicional. Por ejemplo, puedes compilar una imagen basada en la imagen de Ubuntu que incluya el servidor web Apache y tu aplicación, así como los detalles de configuración necesarios para que tu aplicación se ejecute.
Puedes crear tus propias imágenes o usar solo aquellas creadas por otros y publicadas en un registro. Para compilar tu propia imagen, creas un Dockerfile con una sintaxis simple para definir los pasos necesarios para crear la imagen y ejecutarla. Cada instrucción en un Dockerfile crea una capa en la imagen. Cuando cambias el Dockerfile y vuelves a compilar la imagen, solo se reconstruyen las capas que han cambiado. Esto es parte de lo que hace que las imágenes sean tan ligeras, pequeñas y rápidas, en comparación con otras tecnologías de virtualización.
Contenedores
Un contenedor es una instancia ejecutable de una imagen. Puedes crear, iniciar, detener, mover o eliminar un contenedor mediante la API o la CLI de Docker. Puedes conectar un contenedor a una o más redes, asociarle almacenamiento o incluso crear una nueva imagen basada en su estado actual.
Por defecto, un contenedor está relativamente bien aislado de otros contenedores y de su máquina host. Puedes controlar qué tan aislado está el almacenamiento, la red u otros subsistemas subyacentes de un contenedor con respecto a otros contenedores o a la máquina host.
Un contenedor se define tanto por su imagen como por las opciones de configuración que proporciones al crearlo o iniciarlo. Cuando se elimina un contenedor, cualquier cambio en su estado que no se haya almacenado en un almacenamiento persistente desaparece.
Ejemplo de comando docker run
El siguiente comando ejecuta un contenedor ubuntu, se conecta de forma interactiva a tu sesión de línea de comandos local y ejecuta /bin/bash.
$ docker run -i -t ubuntu /bin/bash
Cuando ejecutas este comando, sucede lo siguiente (asumiendo que estás utilizando la configuración de registro predeterminada):
Si no tienes la imagen
ubuntulocalmente, Docker la descarga de tu registro configurado, como si hubieras ejecutadodocker pull ubuntumanualmente.Docker crea un nuevo contenedor, como si hubieras ejecutado un comando
docker container createmanualmente.Docker asigna un sistema de archivos de lectura y escritura al contenedor como su capa final. Esto permite que un contenedor en ejecución cree o modifique archivos y directorios en su sistema de archivos local.
Docker crea una interfaz de red para conectar el contenedor a la red predeterminada, ya que no especificaste ninguna opción de red. Esto incluye asignar una dirección IP al contenedor. De forma predeterminada, los contenedores pueden conectarse a redes externas utilizando la conexión de red de la máquina host.
Docker inicia el contenedor y ejecuta
/bin/bash. Dado que el contenedor se está ejecutando de forma interactiva y está conectado a tu terminal (debido a las banderas-iy-t), puedes proporcionar entradas con el teclado mientras Docker registra la salida en tu terminal.Cuando ejecutas
exitpara terminar el comando/bin/bash, el contenedor se detiene pero no se elimina. Puedes iniciarlo de nuevo o eliminarlo.
La tecnología subyacente
Docker está escrito en el lenguaje de programación Go y aprovecha varias características del kernel de Linux para ofrecer su funcionalidad. Docker utiliza una tecnología llamada namespaces para proporcionar el espacio de trabajo aislado llamado contenedor. Cuando ejecutas un contenedor, Docker crea un conjunto de namespaces para ese contenedor.
Estos namespaces proporcionan una capa de aislamiento. Cada aspecto de un contenedor se ejecuta en un namespace independiente y su acceso está limitado a ese namespace.