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
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:
# 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 runcQué 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:
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.ascQué 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
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 updateQué 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:
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
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginQué 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
~/.docker/cli-plugins/docker-compose con permisos de ejecución.#Paso 4: Configuración post-instalación (usar Docker sin sudo)
# 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!
#Validación: Cómo saber que no hemos roto nada
# 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-worldSalida 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:
~/proyectos-docker/
└── mi-proyecto/
├── docker-compose.yml
├── .env
├── app/
│ └── Dockerfile
├── volumes/
│ └── data/
└── nginx/
└── conf.d/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/DockerfileContexto 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
- Sigue los pasos 1 a 4 completos en tu máquina
- Ejecuta
docker run hello-worldy confirma el mensaje de éxito - Crea la estructura de carpetas propuesta con
mkdir -p ~/proyectos-docker/mi-primer-proyecto/{app,volumes/data,nginx/conf.d} - Inicializa Git dentro de esa carpeta con
git inity crea un.gitignorebásico ignorandovolumes/y.env
#Troubleshooting Frecuente
PROBLEMA COMÚN
newgrp docker.PROBLEMA COMÚN
sudo systemctl start docker y déjalo persistente con sudo systemctl enable docker.#Plan de Rollback / Limpieza
# 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.ascCon 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 |

