Docker se ha convertido en el estándar de la industria para la contenedorización, permitiendo a desarrolladores y administradores de sistemas empaquetar aplicaciones con todas sus dependencias en contenedores portátiles y ligeros. Ya sea que estés configurando un entorno de desarrollo o preparando un servidor de producción, instalar Docker en Ubuntu es una habilidad fundamental que todo profesional de Linux debe dominar.

Esta guía te lleva a través del proceso completo de instalación de Docker Engine, Docker CLI, containerd y el plugin Docker Compose en Ubuntu 22.04 (Jammy Jellyfish) y Ubuntu 24.04 (Noble Numbat). También cubriremos los pasos de post-instalación, verificación, comandos esenciales y solución de problemas comunes.

Requisitos Previos

Antes de comenzar, asegúrate de tener:

  • Un sistema ejecutando Ubuntu 22.04 o 24.04 (edición escritorio o servidor)
  • Acceso a la terminal con privilegios sudo
  • Una conexión a internet estable
  • Familiaridad básica con la línea de comandos de Linux

Nota: Estas instrucciones aplican para la arquitectura x86_64 / amd64. Si estás ejecutando ARM64, los pasos son los mismos pero Docker descargará automáticamente las imágenes específicas para la arquitectura correcta.

Paso 1: Desinstalar Versiones Antiguas o Conflictivas

Ubuntu puede venir con paquetes Docker antiguos o no oficiales como docker.io, docker-doc, docker-compose o podman-docker. Estos deben eliminarse antes de instalar el Docker Engine oficial para evitar conflictos.

Ejecuta el siguiente comando para eliminar cualquier paquete preexistente relacionado con Docker:

sudo apt-get remove docker docker-engine docker.io containerd runc docker-compose docker-doc podman-docker

Si ninguno de estos paquetes está instalado, apt-get reportará que no hay nada que eliminar. Eso es perfectamente normal.

A continuación, limpia cualquier configuración residual:

sudo apt-get autoremove -y

Importante: El contenido de /var/lib/docker/, incluyendo imágenes, contenedores, volúmenes y redes, no se elimina automáticamente cuando desinstalas Docker. Si deseas una instalación completamente limpia, puedes eliminar ese directorio manualmente con sudo rm -rf /var/lib/docker /var/lib/containerd, pero ten en cuenta que esto destruye todos los datos existentes de Docker.

Paso 2: Configurar el Repositorio APT de Docker

Docker proporciona un repositorio APT oficial que siempre contiene la última versión estable. Configurarlo asegura que recibas actualizaciones a través del flujo de trabajo estándar de apt upgrade.

Primero, actualiza el índice de paquetes e instala los paquetes requisito:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

Crea el directorio para el keyring del repositorio:

sudo install -m 0755 -d /etc/apt/keyrings

Descarga la clave GPG oficial de Docker:

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Añade el repositorio de Docker a tus fuentes APT:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualiza el índice de paquetes nuevamente para que APT reconozca el nuevo repositorio:

sudo apt-get update

Deberías ver el repositorio de Docker listado en la salida. Si ves un error GPG, verifica que el archivo keyring se haya descargado correctamente.

Paso 3: Instalar Docker Engine, CLI y Plugins

Ahora instala el stack completo de Docker, que incluye el demonio Docker Engine, el cliente CLI, containerd (el runtime de contenedores) y los plugins Compose y Buildx:

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Esto es lo que proporciona cada paquete:

PaquetePropósito
docker-ceEl demonio Docker Engine (Community Edition)
docker-ce-cliLa interfaz de línea de comandos docker
containerd.ioEl runtime de contenedores que gestiona el ciclo de vida de los contenedores
docker-buildx-pluginCapacidades extendidas de construcción con BuildKit
docker-compose-pluginEl subcomando docker compose (Compose v2)

Paso 4: Verificar la Instalación

Confirma que Docker se instaló y que el demonio está ejecutándose:

sudo systemctl status docker

Deberías ver active (running) en la salida. Si el servicio no está ejecutándose, inícialo:

sudo systemctl start docker
sudo systemctl enable docker

Ahora ejecuta el clásico contenedor hello-world para verificar que todo funciona de principio a fin:

sudo docker run hello-world

Este comando descarga una pequeña imagen de prueba desde Docker Hub y la ejecuta en un contenedor. Si ves el mensaje “Hello from Docker!” seguido de una explicación de lo que acaba de suceder, tu instalación de Docker está funcionando correctamente.

Verifica las versiones instaladas:

docker --version
docker compose version

Paso 5: Configuración Post-Instalación

Ejecutar Docker Sin sudo

Por defecto, el demonio Docker se conecta a un socket Unix propiedad de root, lo que significa que necesitas sudo para cada comando docker. Para evitar esto, añade tu usuario al grupo docker:

sudo usermod -aG docker $USER

Advertencia de Seguridad: El grupo docker otorga privilegios equivalentes a root. Solo añade usuarios de confianza a este grupo. Para entornos de producción, considera usar el modo rootless en su lugar.

Para que el cambio de grupo surta efecto, cierra sesión y vuelve a iniciarla, o ejecuta:

newgrp docker

Verifica que puedes ejecutar Docker sin sudo:

docker run hello-world

Configurar Docker para Iniciar al Arranque

En Ubuntu 22.04 y 24.04 con systemd, Docker generalmente está habilitado por defecto. Verifica y asegúrate de que está configurado para iniciar al arranque:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Configurar el Logging Predeterminado

El driver de logging predeterminado de Docker (json-file) puede consumir espacio significativo en disco en servidores ocupados. Es una buena práctica configurar la rotación de logs creando o editando el archivo de configuración del demonio Docker:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF
sudo systemctl restart docker

Esto limita el archivo de log de cada contenedor a 10 MB y mantiene un máximo de 3 archivos de log rotados.

Hoja de Referencia de Comandos Docker

Aquí tienes una referencia rápida de los comandos Docker más frecuentemente usados para comenzar:

Ciclo de Vida de Contenedores

# Ejecutar un contenedor en primer plano
docker run <image>

# Ejecutar un contenedor en segundo plano (modo detached)
docker run -d --name my-container <image>

# Ejecutar un shell interactivo dentro de un contenedor
docker run -it ubuntu:24.04 /bin/bash

# Listar contenedores en ejecución
docker ps

# Listar todos los contenedores (incluyendo detenidos)
docker ps -a

# Detener un contenedor en ejecución
docker stop <nombre_o_id_del_contenedor>

# Iniciar un contenedor detenido
docker start <nombre_o_id_del_contenedor>

# Eliminar un contenedor detenido
docker rm <nombre_o_id_del_contenedor>

# Eliminar un contenedor en ejecución forzosamente
docker rm -f <nombre_o_id_del_contenedor>

Gestión de Imágenes

# Descargar una imagen desde Docker Hub
docker pull nginx:latest

# Listar imágenes descargadas
docker images

# Eliminar una imagen
docker rmi <nombre_o_id_de_imagen>

# Eliminar todas las imágenes no utilizadas
docker image prune -a

Inspección y Depuración

# Ver logs del contenedor
docker logs <nombre_o_id_del_contenedor>

# Seguir logs del contenedor en tiempo real
docker logs -f <nombre_o_id_del_contenedor>

# Ejecutar un comando dentro de un contenedor en ejecución
docker exec -it <nombre_o_id_del_contenedor> /bin/bash

# Inspeccionar detalles del contenedor (red, montajes, configuración)
docker inspect <nombre_o_id_del_contenedor>

# Ver estadísticas de uso de recursos en tiempo real
docker stats

Limpieza

# Eliminar todos los contenedores detenidos
docker container prune

# Eliminar todas las imágenes, contenedores, redes y volúmenes no utilizados
docker system prune -a --volumes

# Verificar uso de disco
docker system df

Solución de Problemas Comunes

Permiso Denegado al Ejecutar Comandos docker

Si ves permission denied while trying to connect to the Docker daemon socket, significa que tu usuario no está en el grupo docker o no has cerrado sesión y vuelto a iniciarla después de añadirte al grupo.

# Verificar si tu usuario está en el grupo docker
groups $USER

# Si docker no está listado, añádelo
sudo usermod -aG docker $USER

# Cierra sesión y vuelve a iniciarla, luego intenta de nuevo

No Se Puede Conectar al Demonio Docker

Si obtienes Cannot connect to the Docker daemon at unix:///var/run/docker.sock, el servicio Docker puede no estar ejecutándose:

sudo systemctl start docker
sudo systemctl status docker

Revisa los logs del demonio Docker en busca de errores:

sudo journalctl -u docker.service --no-pager -n 50

Problemas de Resolución DNS Dentro de Contenedores

Si los contenedores no pueden resolver nombres de dominio, la configuración DNS predeterminada de Docker puede estar en conflicto con tu sistema. Soluciona especificando servidores DNS en la configuración del demonio:

sudo tee /etc/docker/daemon.json <<'EOF'
{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF
sudo systemctl restart docker

Espacio en Disco Agotándose

Las imágenes, contenedores y volúmenes de Docker pueden consumir espacio considerable en disco con el tiempo. Limpia regularmente los recursos no utilizados:

# Verificar qué está consumiendo espacio
docker system df

# Limpiar todo lo que no está actualmente en uso
docker system prune -a --volumes

Conflictos de Paquetes Después de Actualizar Ubuntu

Si actualizas de Ubuntu 22.04 a 24.04, el repositorio de Docker debería seguir funcionando. Sin embargo, si encuentras problemas, vuelve a ejecutar los pasos de configuración del repositorio del Paso 2 para asegurar que se use el codename correcto en la lista de fuentes.

Próximos Pasos

Ahora que Docker está instalado y funcionando, estás listo para comenzar a contenedorizar aplicaciones. Aquí tienes algunos próximos pasos recomendados:

Conclusión

Has instalado exitosamente Docker Engine, Docker CLI, containerd y Docker Compose en Ubuntu. Siguiendo los pasos de post-instalación, configuraste tu entorno tanto para conveniencia como para seguridad. La hoja de referencia de comandos debería servir como una referencia práctica mientras comienzas a trabajar con contenedores.

Docker es una herramienta poderosa que, combinada con Docker Compose y una orquestación adecuada, puede optimizar todo tu flujo de trabajo de despliegue. Mantén tu instalación de Docker actualizada ejecutando sudo apt-get update && sudo apt-get upgrade regularmente, y siempre consulta la documentación oficial de Docker para las mejores prácticas más recientes.