Módulo 0: Preparación de tu entorno Docker paso a paso

QUÉ VAMOS A CONSTRUIR

  • Un entorno Linux listo con terminal, permisos y Git básico configurados
  • Docker Engine y el plugin de Docker Compose instalados y verificados
  • Una estructura de directorios ordenada para tus futuros proyectos con contenedores
  • Tu primer contenedor (hello-world) corriendo sin usar sudo

Este módulo cero es el que casi todo el mundo se salta y luego paga caro con permisos rotos o rutas desordenadas tres proyectos después. Vamos a dejar el terreno limpio antes de meter mano a Docker de verdad.

#Objetivo del curso y cómo trabajar con los ejemplos

El curso está pensado para que repliques cada comando en tu propia máquina, no para leerlo por encima. Cada bloque de código lleva el contexto de dónde se ejecuta (local, contenedor o servidor remoto), así que cópialo tal cual, ejecútalo, y solo entonces avanza al siguiente paso.

#Requisitos Previos

  • Sistema operativo: Ubuntu 24.04 o 26.04 LTS (o derivados: Kubuntu, Lubuntu, Xubuntu)
  • Arquitectura de 64 bits
  • Acceso a terminal con permisos sudo
  • Editor de texto (nano, vim o VS Code)
  • Git instalado a nivel básico (clonar, pull, commit)
  • Conexión a internet para descargar paquetes y la clave GPG oficial de Docker

NOTA TÉCNICA

Si estás en Debian puro en lugar de Ubuntu, cambia la URL del repositorio de download.docker.com/linux/ubuntu a download.docker.com/linux/debian y usa el VERSION_CODENAME de tu Debian.

#El Entorno / Setup Inicial

Antes de nada, actualiza el sistema y quita cualquier resto de instalaciones viejas de Docker que puedan chocar con la nueva:

bash
# Actualizamos la lista de paquetes disponibles
sudo apt-get update

Purgamos versiones antiguas o de terceros que suelen dar problemas de conflicto
sudo apt-get remove docker docker-engine docker.io containerd runc

Qué hemos hecho: nos asegura una base limpia sin paquetes residuales que puedan pisar la instalación oficial.

Si te da un Warning debido a que las firmas no se pudieron verificar no te preocupes, es solo un warning y nos encargaremos justo de esto en el siguiente paso.

#Paso a Paso

#Paso 1: Instalar dependencias y añadir la clave GPG oficial

Ejecutar en tu máquina local o servidor, con permisos sudo:

bash
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings

Descargamos la clave GPG de Docker para verificar que los paquetes son legítimos
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

Qué hemos hecho: creamos el directorio de llaves de apt y descargamos la clave que garantiza que el repositorio de Docker no está falsificado.

#Paso 2: Añadir el repositorio oficial de Docker

bash
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

sudo apt-get update

Qué hemos hecho: el dpkg --print-architecture detecta tu arquitectura (amd64, arm64…) automáticamente y VERSION_CODENAME saca el nombre de tu versión de Ubuntu, así el comando funciona igual en cualquier release sin que tengas que tocar nada a mano.

Aquí te puede salir como en mi caso otro Warning inofensivo, debido a que tenia configurado el repositorio con dos formatos distintos así que con el siguiente comando elimino el antiguo:

text
sudo rm /etc/apt/sources.list.d/docker.list

Si no te sale esta advertencia no hace falta poner el comando que acabamos de ver.

#Paso 3: Instalar Docker Engine y el plugin de Compose

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

Qué hemos hecho: esto instala el motor de Docker, la CLI, el runtime containerd y, lo importante para este módulo, el plugin de Compose (ya no es docker-compose como binario suelto, sino docker compose integrado).

TIP PRO

Si por lo que sea necesitas una versión concreta del plugin de Compose fuera del repositorio de apt, puedes bajarlo directo del binario oficial y colocarlo en ~/.docker/cli-plugins/docker-compose con permisos de ejecución.

#Paso 4: Configuración post-instalación (usar Docker sin sudo)

bash
# Añadimos tu usuario al grupo docker para no tener que escribir sudo en cada comando
sudo groupadd docker
sudo usermod -aG docker $USER

Aplicamos el cambio de grupo sin cerrar sesión (o cierra y vuelve a entrar)
newgrp docker

¡CUIDADO!

Añadir tu usuario al grupo docker le da permisos equivalentes a root en la práctica, porque puede montar el filesystem completo dentro de un contenedor. En servidores compartidos, piénsalo dos veces antes de meter ahí a cualquier usuario.

#Validación: Cómo saber que no hemos roto nada

bash
# Confirmamos que el servicio está activo
systemctl status docker

Verificamos versión de Engine y de Compose
docker version
docker compose version

El clásico test de humo
docker run hello-world

Salida esperada: el texto «Hello from Docker!» confirmando que el cliente contactó al daemon, descargó la imagen y la ejecutó correctamente.

#Estructura recomendada de directorios para proyectos Docker

Antes de que el desorden te pase factura en el segundo proyecto, monta algo así desde ya:

bash
~/proyectos-docker/
└── mi-proyecto/
├── docker-compose.yml
├── .env
├── app/
│ └── Dockerfile
├── volumes/
│ └── data/
└── nginx/
└── conf.d/
bash
mkdir -p ~/proyectos-docker/mi-proyecto/{app,volumes/data,nginx/conf.d} && touch ~/proyectos-docker/mi-proyecto/docker-compose.yml ~/proyectos-docker/mi-proyecto/.env ~/proyectos-docker/mi-proyecto/app/Dockerfile

Contexto de cada carpeta: app/ guarda el código y su Dockerfile, volumes/ aísla los datos persistentes fuera del contenedor para que sobrevivan a un docker compose down, y .env centraliza variables sensibles que nunca deben ir hardcodeadas en el compose ni subidas a Git.

#Práctica: instalar Docker y ejecutar el primer contenedor

  1. Sigue los pasos 1 a 4 completos en tu máquina
  2. Ejecuta docker run hello-world y confirma el mensaje de éxito
  3. Crea la estructura de carpetas propuesta con mkdir -p ~/proyectos-docker/mi-primer-proyecto/{app,volumes/data,nginx/conf.d}
  4. Inicializa Git dentro de esa carpeta con git init y crea un .gitignore básico ignorando volumes/ y .env

#Troubleshooting Frecuente

PROBLEMA COMÚN

Error «permission denied» al ejecutar docker sin sudo: significa que el cambio de grupo no se aplicó en la sesión actual. Cierra sesión y vuelve a entrar, o ejecuta newgrp docker.

PROBLEMA COMÚN

El servicio Docker aparece inactivo (rojo) en systemctl status: arráncalo manualmente con sudo systemctl start docker y déjalo persistente con sudo systemctl enable docker.

#Plan de Rollback / Limpieza

bash
# Detenemos y desinstalamos Docker Engine junto a sus plugins
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Borramos imágenes, contenedores y volúmenes residuales del sistema
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Quitamos el repositorio y la clave añadidos
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

Con esto queda listo el terreno. El siguiente paso lógico es meterte de lleno en el Dockerfile: cómo construir tu primera imagen personalizada partiendo de la estructura de carpetas que acabas de montar.

 

#Hoja de trucos

xml

Tarea Comando Clandestino / Ruta
Ver estado del servicio systemctl status docker
Iniciar Docker manualmente sudo systemctl start docker
Probar instalación docker run hello-world
Ver versión de Compose docker compose version
Usar docker sin sudo sudo usermod -aG docker $USER