Fundamentos Arquitectónicos
La arquitectura de Docker se sustenta en dos componentes primordiales que definen el flujo de trabajo de contanedorización:
- Imágenes (Images): Artefactos inmutables y de solo lectura que encapsulan el sistema de archivos, las dependencias y el código de la aplicación. Actúan como el plano de construcción para los entornos de ejecución.
- Contenedores (Containers): Instancias aisladas y ejecutables derivadas de una imagen. Poseen su propio espacio de nombres de red, procesos y sistema de archivos efímero, garantizando la portabilidad y consistencia del entorno.
Administración del Servicio y Diagnóstico
Antes de interactuar con las cargas de trabajo, es necesario verificar el estado del daemon y la configuración del host.
# Habilitar e iniciar el daemon de Docker en el arranque
sudo systemctl enable --now docker
# Verificar la versión del cliente y del servidor con formato personalizado
docker version --format '{{.Server.Version}}'
# Inspeccionar la configuración del motor y el sistema operativo subyacente
docker info --format 'OS: {{.OSType}} | CPUs: {{.NCPU}} | Memory: {{.MemTotal}}'
Gestión del Ciclo de Vida de Imágenes
La manipulación de imágenes abarca desde la búsqueda en registros remotos hasta la exportación local para entornos sin conexión.
Búsqueda y Descarga
# Buscar imágenes oficiales con un mínimo de estrellas
docker search postgres --filter "is-official=true"
# Descargar una variante específica y optimizada (Alpine)
docker pull postgres:15-alpine
Construcción y Etiquetado
# Compilar una imagen omitiendo la caché para asegurar dependencias actualizadas
docker build --no-cache -t api-backend:v2.1 -f Dockerfile.prod .
# Asignar una nueva etiqueta para un registro privado
docker tag api-backend:v2.1 registry.internal.io/api-backend:latest
Exportación e Importación
# Empaquetar una imagen en un archivo comprimido para transferencia offline
docker save postgres:15-alpine | gzip > postgres_offline.tar.gz
# Cargar la imagen desde el archivo comprimido en otro host
docker load < postgres_offline.tar.gz
Limpieza de Imágenes
# Eliminar forzosamente imágenes huérfanas (dangling)
docker image rm --force $(docker image ls -q --filter dangling=true)
Orquestación y Control de Contenedores
El ciclo de vida de un contenedor implica su creación, ejecución en segundo plano, interacción directa y eventual destrucción.
Despliegue y Ejecución
# Desplegar un contenedor en modo detached con mapeo de puertos y variables de entorno
docker run --name web_server -d -p 8080:80 -e ENV=production httpd:alpine
# Pre-configurar un contenedor sin iniciarlo
docker create --name db_instance -e POSTGRES_PASSWORD=supersecret -v db_data:/var/lib/postgresql/data postgres:15
# Iniciar un contenedor previamente creado o detenido
docker start db_instance
Interacción y Diagnóstico
# Acceder a la shell del contenedor con privilegios de root
docker exec -u root -it web_server /bin/sh
# Listar contenedores activos con un formato de tabla personalizado
docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# Obtener la dirección IP interna de un contenedor específico
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web_server
# Monitorear el consumo de recursos sin transmitir en tiempo real (snapshot)
docker stats --no-stream
Control de Estado y Eliminación
# Detener el contenedor enviando SIGTERM y esperando 15 segundos antes de SIGKILL
docker stop -t 15 web_server
# Forzar la terminación inmediata del proceso principal
docker kill db_instance
# Eliminar el contenedor y sus volúmenes anónimos asociados
docker container rm -v web_server
# Purga profunda de recursos no utilizados (contenedores, redes, imágenes y caché)
docker system prune --all --volumes --force
Telemetría, Registros y Almacenamiento
La observabilidad y la persistencia de datos son críticas para aplicaciones en producción.
Análisis de Logs
# Transmitir logs en tiempo real mostrando solo las últimas 50 líneas iniciales
docker logs --tail 50 --follow web_server
# Filtrar registros por marca de tiempo específica
docker logs --since "2023-10-01T08:00:00" --until "2023-10-01T10:00:00" db_instance
Manipulación de Archivos y Volúmenes
# Extraer un archivo de configuración desde el contenedor al host local
docker cp web_server:/usr/local/apache2/conf/httpd.conf ./httpd_backup.conf
# Identificar modificaciones en el sistema de archivos del contenedor
docker container diff web_server
# Provisionar un volumen con nombre para persistencia de datos
docker volume create app_persistent_storage
# Listar volúmenes que no están siendo utilizados por ningún contenedor
docker volume ls --filter dangling=true
Configuración de Redes Aisladas
Las redes definidas por software permiten la comunicación segura entre microservicios.
# Crear una red personalizada con driver bridge
docker network create --driver bridge --subnet 172.20.0.0/16 backend_network
# Inspeccionar los puertos expuestos y mapeados de un contenedor
docker port web_server
# Listar únicamente las redes creadas por el usuario
docker network ls --filter type=custom
Orquestación con Docker Compose V2
La versión moderna de Compose se integra directamente como un plugin del CLI de Docker, eliminando el guion en el comando.
# Levantar el stack completo, reconstruyendo imágenes y ejecutando en segundo plano
docker compose up --build --detach
# Destruir el stack, eliminando volúmenes huérfanos y redes asociadas
docker compose down --volumes --remove-orphans
# Agregar marcas de tiempo a la salida de logs de todos los servicios del stack
docker compose logs --timestamps --tail="all"
Prácticas Operativas Recomendadas
- Consultar la documentación integrada del CLI utilizando
docker [command] --helppara descubrir flags avanzados y opciones de formato. - Comprender a fondo las transiciones de estado del contenedor (created, runing, paused, exited) para evitar fugas de recursos.
- Encadenar comandos utilizando las opciones
--formaty--filterpara crear scripts de automatización robustos y limpios. - Implementar siempre volúmenes con nombre (named volumes) o bind mounts para cualquier carga de trabajo que requiera persistencia de estado, evitando depender del sistema de arcihvos efímero del contenedor.