Instalación de Docker en Linux: Guía Completa para las Principales Distribuciones

Docker ha revolucionado el despliegue de aplicaciones al proporcionar una plataforma de contenedorización ligera y portátil que permite a desarrolladores y administradores de sistemas empaquetar aplicaciones con todas sus dependencias. Esta guía completa te acompaña en la instalación de Docker Engine en las principales distribuciones de Linux, incluyendo Ubuntu, Debian, CentOS, Rocky Linux y Fedora.

Tabla de Contenidos

Introducción a Docker

Docker es una plataforma de contenedorización de código abierto que empaqueta aplicaciones y sus dependencias en unidades estandarizadas llamadas contenedores. A diferencia de las máquinas virtuales, los contenedores comparten el kernel del sistema host, lo que los hace increíblemente ligeros y rápidos para iniciar. Docker se ha convertido en el estándar de facto para la contenedorización en entornos de producción, soportando arquitecturas de microservicios, pipelines CI/CD y aplicaciones nativas de la nube.

¿Por Qué Usar Docker?

  • Portabilidad: Ejecuta el mismo contenedor en cualquier sistema que soporte Docker
  • Aislamiento: Las aplicaciones se ejecutan en entornos aislados sin conflictos
  • Eficiencia: Los contenedores usan menos recursos que las VMs tradicionales
  • Control de Versiones: Rastrea cambios en las imágenes de contenedores como código
  • Despliegue Rápido: Inicia contenedores en segundos, no en minutos
  • Escalabilidad: Escala aplicaciones horizontalmente con facilidad

Requisitos Previos

Antes de instalar Docker en tu sistema Linux, asegúrate de cumplir con estos requisitos:

Requisitos del Sistema

  • Sistema Operativo: Distribución Linux de 64 bits (Docker no soporta sistemas de 32 bits)
  • Versión del Kernel: Linux kernel 3.10 o superior (se recomienda 4.x o 5.x)
  • Memoria: Mínimo 2GB RAM (se recomienda 4GB+ para producción)
  • Espacio en Disco: Al menos 10GB de espacio libre en disco
  • CPU: Cualquier procesador moderno de 64 bits con soporte de virtualización

Permisos de Usuario

Necesitas:

  • Acceso root (privilegios sudo)
  • O ser parte del grupo docker (configurado durante la instalación)

Verifica Tu Sistema

Verifica que tu sistema cumple con los requisitos:

# Check kernel version
uname -r

# Check system architecture (should show x86_64)
uname -m

# Check available disk space
df -h

# Check memory
free -h

Eliminar Versiones Antiguas de Docker

Si tienes versiones antiguas de Docker instaladas, elimínalas primero:

# Ubuntu/Debian
sudo apt-get remove docker docker-engine docker.io containerd runc

# CentOS/Rocky Linux/Fedora
sudo dnf remove docker docker-client docker-client-latest docker-common \
  docker-latest docker-latest-logrotate docker-logrotate docker-engine

Resumen de Métodos de Instalación

Docker se puede instalar usando varios métodos:

  1. Método de Repositorio (Recomendado): Instalar desde el repositorio oficial de Docker
  2. Script de Conveniencia: Instalación rápida usando el script automatizado de Docker
  3. Instalación Manual: Descargar e instalar paquetes manualmente
  4. Instalación Binaria: Instalar desde binarios estáticos

Esta guía se centra en el método de repositorio ya que proporciona la instalación más confiable y mantenible.

Instalación de Docker en Ubuntu/Debian

Paso 1: Actualizar el Índice de Paquetes

sudo apt-get update
sudo apt-get upgrade -y

Paso 2: Instalar Dependencias Requeridas

sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Paso 3: Agregar la Clave GPG Oficial de Docker

# Create directory for keyrings
sudo install -m 0755 -d /etc/apt/keyrings

# Download and add Docker's GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Set proper permissions
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Para Debian, reemplaza ubuntu con debian en la URL anterior.

Paso 4: Configurar el Repositorio de Docker

# For Ubuntu
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# For Debian
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Paso 5: Instalar Docker Engine

# Update package index with Docker repository
sudo apt-get update

# Install Docker Engine, containerd, and Docker Compose plugin
sudo apt-get install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

Paso 6: Verificar la Instalación

# Check Docker version
docker --version

# Check Docker service status
sudo systemctl status docker

Instalación de Docker en CentOS/Rocky Linux/Fedora

Paso 1: Actualizar Paquetes del Sistema

# CentOS/Rocky Linux
sudo dnf update -y

# Or for older CentOS versions
sudo yum update -y

Paso 2: Instalar Dependencias Requeridas

sudo dnf install -y \
    dnf-plugins-core \
    yum-utils \
    device-mapper-persistent-data \
    lvm2

Paso 3: Agregar el Repositorio de Docker

# For CentOS/Rocky Linux
sudo dnf config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# For Fedora
sudo dnf config-manager --add-repo \
    https://download.docker.com/linux/fedora/docker-ce.repo

Paso 4: Instalar Docker Engine

# Install Docker packages
sudo dnf install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

Si encuentras conflictos con containerd.io, es posible que necesites eliminar podman primero:

sudo dnf remove podman buildah

Paso 5: Iniciar y Habilitar el Servicio de Docker

# Start Docker daemon
sudo systemctl start docker

# Enable Docker to start on boot
sudo systemctl enable docker

# Verify service is running
sudo systemctl status docker

Configuración Post-Instalación

Habilitar el Servicio de Docker

Asegúrate de que Docker se inicie automáticamente al arrancar el sistema:

sudo systemctl enable docker
sudo systemctl enable containerd

Agregar Usuario al Grupo Docker

Ejecutar comandos de Docker sin sudo requiere agregar tu usuario al grupo docker:

# Add current user to docker group
sudo usermod -aG docker $USER

# For adding a specific user
sudo usermod -aG docker username

# Apply group changes (log out and back in, or use)
newgrp docker

Después de agregarte al grupo docker, cierra sesión y vuelve a iniciar sesión para que los cambios tengan efecto.

Configurar el Daemon de Docker

Crea o edita el archivo de configuración del daemon de Docker:

sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json

Agrega la siguiente configuración:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "default-address-pools": [
    {
      "base": "172.17.0.0/16",
      "size": 24
    }
  ]
}

Reinicia Docker para aplicar los cambios:

sudo systemctl restart docker

Configurar Docker para Usar el Controlador Cgroup Systemd

Para compatibilidad con Kubernetes, configura el controlador cgroup:

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

Instalación de Docker Compose

Docker Compose ahora está incluido como plugin con Docker Engine. Verifica que esté instalado:

docker compose version

Si necesitas la versión independiente:

# Download latest version
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose

# Make executable
sudo chmod +x /usr/local/bin/docker-compose

# Verify installation
docker-compose --version

Verificación y Pruebas

Probar la Instalación de Docker

Ejecuta el contenedor hello-world:

docker run hello-world

Salida esperada:

Hello from Docker!
This message shows that your installation appears to be working correctly.

Ejecutar Contenedor Ubuntu

Prueba con un contenedor Ubuntu interactivo:

docker run -it ubuntu bash

Dentro del contenedor:

# Check Ubuntu version
cat /etc/os-release

# Exit container
exit

Verificar Información del Sistema Docker

# Display system-wide information
docker info

# Show Docker version details
docker version

# List running containers
docker ps

# List all containers (including stopped)
docker ps -a

# List downloaded images
docker images

Probar la Red de Docker

# Run nginx container
docker run -d -p 8080:80 --name test-nginx nginx

# Test connection
curl http://localhost:8080

# Stop and remove container
docker stop test-nginx
docker rm test-nginx

Mejores Prácticas de Seguridad

Habilitar Docker Content Trust

Habilita content trust para verificar la autenticidad de las imágenes:

export DOCKER_CONTENT_TRUST=1

Agrega a .bashrc o .zshrc para persistencia:

echo 'export DOCKER_CONTENT_TRUST=1' >> ~/.bashrc
source ~/.bashrc

Limitar la Exposición del Daemon de Docker

Nunca expongas el socket del daemon de Docker sobre TCP sin TLS:

{
  "hosts": ["unix:///var/run/docker.sock"]
}

Configurar Remapeo de Namespace de Usuario

Habilita el remapeo de namespace de usuario para aislamiento adicional:

{
  "userns-remap": "default"
}

Establecer Límites de Recursos

Configura límites de recursos predeterminados en daemon.json:

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 64000,
      "Soft": 64000
    }
  }
}

Habilitar AppArmor/SELinux

Mantén los módulos de seguridad habilitados:

# Check AppArmor status (Ubuntu/Debian)
sudo aa-status | grep docker

# Check SELinux status (CentOS/Rocky)
getenforce

Actualizaciones Regulares

Mantén Docker actualizado:

# Ubuntu/Debian
sudo apt-get update && sudo apt-get upgrade docker-ce

# CentOS/Rocky Linux
sudo dnf update docker-ce

Solución de Problemas Comunes

El Daemon de Docker No Inicia

Verifica el estado del servicio systemd:

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

Soluciones comunes:

# Remove broken state files
sudo rm /var/lib/docker/network/files/local-kv.db

# Reset Docker daemon
sudo systemctl reset-failed docker
sudo systemctl start docker

Error de Permiso Denegado

Si ves "permission denied" al ejecutar comandos docker:

# Verify you're in docker group
groups

# If not, add yourself
sudo usermod -aG docker $USER

# Reload group membership
newgrp docker

# Or log out and back in

Puerto Ya En Uso

Encuentra el proceso que usa el puerto:

sudo netstat -tulpn | grep :port_number
# Or
sudo lsof -i :port_number

Problemas con el Controlador de Almacenamiento

Verifica el controlador de almacenamiento actual:

docker info | grep "Storage Driver"

Si es necesario, cambia a overlay2:

sudo nano /etc/docker/daemon.json

Agrega:

{
  "storage-driver": "overlay2"
}

Problemas de Resolución DNS

Si los contenedores no pueden resolver nombres de dominio:

{
  "dns": ["8.8.8.8", "8.8.4.4"]
}

Limpiar Recursos de Docker

Libera espacio en disco:

# Remove unused containers, networks, images
docker system prune -a

# Remove specific resources
docker container prune
docker image prune
docker volume prune
docker network prune

Verificar Logs de Docker

# System logs
sudo journalctl -fu docker.service

# Container logs
docker logs container_name
docker logs --tail 100 -f container_name

Conclusión

Has instalado exitosamente Docker en tu sistema Linux. Docker proporciona una plataforma poderosa para contenedorizar aplicaciones, habilitando entornos consistentes desde desarrollo hasta producción.

Conclusiones Clave

  • La instalación de Docker varía ligeramente entre distribuciones pero sigue patrones similares
  • La configuración post-instalación es crucial para la seguridad y el rendimiento óptimo
  • Agregar usuarios al grupo docker habilita el uso de Docker sin root
  • Las actualizaciones regulares y las mejores prácticas de seguridad protegen tu infraestructura contenedorizada
  • Docker Compose extiende las capacidades de Docker para aplicaciones multi-contenedor

Próximos Pasos

  1. Aprende los Fundamentos de Docker: Explora comandos de gestión de contenedores
  2. Crea Dockerfiles: Construye imágenes de contenedores personalizadas
  3. Usa Docker Compose: Orquesta aplicaciones multi-contenedor
  4. Implementa Seguridad: Aplica técnicas de endurecimiento de seguridad
  5. Explora Redes: Comprende los modos de red de Docker
  6. Gestiona Volúmenes: Implementa almacenamiento de datos persistente
  7. Monitorea Recursos: Configura registro y monitoreo

Lecturas Recomendadas

  • Documentación oficial de Docker: https://docs.docker.com/
  • Docker Hub para imágenes de contenedores: https://hub.docker.com/
  • Mejores prácticas para escribir Dockerfiles
  • Escaneo de seguridad de Docker y gestión de vulnerabilidades
  • Orquestación de contenedores con Kubernetes

La tecnología de contenedorización de Docker ha transformado el despliegue de aplicaciones modernas. Con tu instalación de Docker completa, estás listo para construir, enviar y ejecutar aplicaciones contenedorizadas de manera eficiente y segura en cualquier entorno Linux.