Referencia Técnica y Guía de Comandos CLI para Docker

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] --help para 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 --format y --filter para 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.

Etiquetas: Docker docker-cli docker-compose contenedores DevOps

Publicado el 6-17 04:07