
Introducción
La virtualización ha cambiado el juego en el desarrollo de software. Docker y Docker Compose son herramientas imprescindibles que te permiten crear, gestionar y orquestar aplicaciones en contenedores de manera eficiente. Este artículo te llevará paso a paso a través del proceso de instalación de Docker y Docker Compose en un sistema Linux, ya sea en una PC, máquina virtual (VM), Raspberry Pi o un Contenedor LXC (CT) en Proxmox VE.
Si quieres llevar tus proyectos al siguiente nivel con contenedores ligeros y eficientes, ¡quédate hasta el final!
¿Por Qué Instalar Docker y Docker Compose?

Antes de entrar en los pasos técnicos, vale la pena entender por qué estas herramientas son tan populares:
- Despliegue rápido de aplicaciones: Con Docker, puedes ejecutar aplicaciones completas con un solo comando.
- Gestión centralizada de servicios: Docker Compose simplifica la orquestación de múltiples contenedores.
- Aislamiento y seguridad: Cada contenedor opera de manera independiente, lo que minimiza conflictos entre aplicaciones.
- Portabilidad: Los contenedores Docker funcionan en cualquier entorno que soporte Docker.
- Optimización de recursos: A diferencia de las máquinas virtuales, los contenedores comparten el núcleo del sistema operativo, lo que los hace más ligeros y rápidos.
¿Listo para instalar estas herramientas? ¡Vamos allá!
Requisitos Previos

Antes de comenzar, asegúrate de contar con lo siguiente:
- Sistema Operativo: Una distribución de Linux como Ubuntu (20.04/22.04) o Debian (10/11).
- Permisos de superusuario: Tendrás que usar
sudopara algunos comandos. - Conexión a Internet: Necesitarás descargar paquetes.
Para este tutorial, la instalación se realizará en un Contenedor LXC (CT) de Proxmox VE, pero los pasos son aplicables a cualquier entorno Linux.
Pasos para Instalar Docker y Docker Compose

Paso 1: Actualizar el Sistema
Primero, asegúrate de que tu sistema esté actualizado:
sudo apt update && sudo apt upgrade -yEsto garantiza que todos los paquetes estén en su última versión y evita posibles errores de compatibilidad.
Paso 2: Instalar curl
curl es una herramienta esencial para descargar el script de instalación de Docker. Instálalo ejecutando:
sudo apt install curl -yVerifica que se haya instalado correctamente con:
curl --versionDeberías ver algo como:

Paso 3: Instalar Docker y Docker Compose
Ahora, instalemos Docker y Docker Compose utilizando el script oficial:
curl -sSL https://get.docker.com/ | shUn apunte antes de ejecutarlo. Ese comando descarga un script y se lo entrega directamente a la shell, así que estás confiando en que el servidor devuelva exactamente lo que esperas. Es el método que el propio Docker ofrece para empezar rápido y funciona bien, pero su repositorio avisa sin rodeos: «no se recomienda depender de este script para desplegar en sistemas de producción».
Si prefieres ver qué va a pasar antes de que pase, descárgalo aparte y léelo:
curl -fsSL https://get.docker.com -o get-docker.sh
less get-docker.sh
sh get-docker.sh
Para un servidor que vaya a dar servicio de verdad, la vía oficial es el repositorio de paquetes de Docker, documentada en docs.docker.com/engine/install. Es más larga, pero te deja el sistema actualizándose con apt como cualquier otro paquete.
¿Qué hace este comando?
- Verifica el sistema:
- Comprueba la distribución y versión del sistema operativo para asegurarse de que sea compatible con Docker.
- Configura repositorios oficiales:
- Añade los repositorios de Docker necesarios a tu sistema (APT para Debian/Ubuntu o YUM para CentOS/RHEL).
- Instala Docker:
- Instala el motor de contenedores Docker (Docker Engine).
- Instala la interfaz de línea de comandos de Docker (Docker CLI).
- Incluye Docker Compose V2:
- Docker Compose V2 está integrado en el binario de Docker CLI, por lo que se incluye automáticamente.
- Habilita y arranca Docker:
- Configura Docker para que se inicie automáticamente al arrancar el sistema.
- Inicia el servicio de Docker inmediatamente después de la instalación.
- Limpieza y configuración final:
- Asegura que la instalación esté completa y lista para usarse.
Después de la instalación, verifica la versión instalada:
docker --versionDeberías obtener un resultado como este:
Docker version 27.3.1, build ce12230Luego, verifica la instalación de Docker Compose:
docker compose versionDeberías ver algo como:
Docker Compose version v2.29.7Paso 4: Deja que tu usuario use Docker
Docker se comunica a través de un socket que pertenece a root. Recién instalado, cualquier comando lanzado desde tu usuario normal responde con esto:
permission denied while trying to connect to the Docker daemon socket
at unix:///var/run/docker.sock
Si estás trabajando como root (dentro de un contenedor LXC de Proxmox, por ejemplo) no verás este error nunca y puedes saltarte el paso. En cualquier otro caso, añade tu usuario al grupo docker:
sudo usermod -aG docker $USER
Y aquí está la parte que hace perder media hora a mucha gente: el cambio no surte efecto en la sesión actual. Añades el grupo, repites el comando, y sigue fallando exactamente igual. Cierra sesión y vuelve a entrar, o fuerza el refresco sin salir:
newgrp docker
groups
docker debe aparecer en la lista que devuelve groups.
Conviene entender qué acabas de conceder: pertenecer al grupo docker equivale a tener root en esa máquina. Desde ahí puedes arrancar un contenedor que monte el disco entero del servidor y leerlo o escribirlo sin restricción. No es un atajo de comodidad inocuo. En tu servidor personal es perfectamente razonable; en una máquina compartida con otras personas, mejor deja el grupo en paz y escribe sudo docker.
Paso 5: Probar la Instalación
Para asegurarte de que Docker funciona correctamente, ejecuta un contenedor de prueba:
docker run hello-worldSi todo está configurado correctamente, verás un mensaje de confirmación indicando que Docker está funcionando.

Tu primer docker-compose.yml
Has instalado las dos piezas, pero hasta ahora solo has usado una. Docker Compose es lo que convierte un comando largo e irrepetible en un fichero que puedes guardar, versionar, leer dentro de seis meses y volver a levantar en otra máquina sin recordar nada.
La diferencia se ve mejor comparando. Esto es arrancar Uptime Kuma (un monitor de servicios) a mano:
docker run -d --restart=always -p 3001:3001 \
-v uptime-kuma:/app/data --name uptime-kuma \
louislam/uptime-kuma:1
Funciona. Pero dentro de tres meses, cuando quieras cambiar el puerto o mover el servicio a otro servidor, ese comando ya no estará en tu historial. Esto es exactamente lo mismo, en un fichero llamado docker-compose.yml:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- uptime-kuma:/app/data
volumes:
uptime-kuma:
Línea por línea, porque cada una tiene su motivo:
| Clave | Qué hace |
|---|---|
services: | La lista de contenedores. Aquí hay uno, pero podrían ser diez y arrancarían juntos. |
image: | Qué imagen usar. El :1 del final no es decoración: fija la rama mayor. Sin él acabas en :latest, y el día que el proyecto salte a la versión 2 te la llevas sin enterarte. |
restart: always | Vuelve a arrancar solo tras un reinicio del servidor o una caída. |
ports: | "3001:3001" es puerto_del_host : puerto_del_contenedor. Se leen en ese orden y confundirlos es el error más habitual. |
volumes: | Dónde viven los datos. Esta es la línea que evita el desastre: sin ella, borrar el contenedor borra toda tu configuración e historial. |
Guárdalo en una carpeta propia y levántalo:
mkdir -p ~/servicios/uptime-kuma
cd ~/servicios/uptime-kuma
nano docker-compose.yml # pega aquí el contenido de arriba
docker compose up -d
Todos los comandos de Compose se ejecutan desde la carpeta donde está el fichero. Estos son los cuatro que vas a usar el 95 % del tiempo:
docker compose ps # qué está corriendo
docker compose logs -f # ver los registros en vivo
docker compose down # parar y eliminar (los volúmenes se quedan)
docker compose pull && docker compose up -d # actualizar
Esa última línea es la que convence: actualizar cualquier servicio son dos comandos, siempre los mismos, sin tener que recordar con qué opciones lo arrancaste. Y si algo sale mal, cambias una línea del fichero y vuelves a levantarlo.
Un aviso sobre tutoriales antiguos. Vas a encontrar muchísimos ejemplos que empiezan con version: "3.8" en la primera línea. Eso ya no hace falta: la especificación de Compose marca ese campo como obsoleto y las versiones actuales lo ignoran, avisando por consola. Si un tutorial insiste en ponerlo, está escrito para Compose v1 y probablemente tenga más cosas desactualizadas.
Ya tienes lo que promete el título de esta guía. A partir de aquí, casi todos los servicios que verás en este blog se despliegan con un fichero como ese: solo cambia el nombre de la imagen y los puertos.
Próximos Pasos
¡Listo! Docker y Docker Compose están configurados en tu sistema. A continuación, puedes empezar a:
- Aprender comandos básicos: Explora comandos como
docker ps,docker stopydocker rm. - Crear aplicaciones multicontenedor: Aprende a usar archivos
docker-compose.yml. - Implementar proyectos reales: Despliega aplicaciones como Nginx, Redis o bases de datos como MySQL y PostgreSQL.
Recursos Adicionales
Para profundizar en Docker y Docker Compose, echa un vistazo a estas fuentes:
Reflexión Final

Docker y Docker Compose no solo son herramientas prácticas, sino también potentes aliados para desarrolladores y equipos DevOps. Con esta instalación básica, ya estás en camino de optimizar tus flujos de trabajo y mejorar la forma en que despliegas aplicaciones.
Si este artículo te resultó útil, ¡compártelo con tus colegas y amigos!
¿Te quedó alguna duda? Déjala en los comentarios, y estaré encantado de ayudarte.
Próximos pasos: qué desplegar con Docker
Con Docker y Docker Compose instalados, tienes la base para desplegar prácticamente cualquier servicio self-hosted. Aquí van algunos proyectos que puedes seguir en este blog:
- Instalar Nginx Proxy Manager: gestiona tus reverse proxies y certificados SSL desde una interfaz web
- Instalar Uptime Kuma: monitorea la disponibilidad de tus servicios con alertas en tiempo real
- Autohospedar DeepSeek AI: corre tu propio modelo de IA localmente
- Automatizar con ActivePieces: crea workflows de automatización sin depender de servicios de pago
- Instalar OpenClaw: tu asistente personal de IA en WhatsApp, Telegram y más
Para exponer estos servicios de forma segura sin abrir puertos en tu router, revisa cómo crear un túnel de Cloudflare gratis.
Comandos Docker esenciales
Algunos comandos que usarás constantemente:
# Ver contenedores activos
docker ps
# Ver todos los contenedores (incluyendo detenidos)
docker ps -a
# Ver logs de un contenedor
docker logs nombre-del-contenedor
# Detener un contenedor
docker stop nombre-del-contenedor
# Eliminar un contenedor detenido
docker rm nombre-del-contenedor
# Actualizar un servicio con docker-compose
cd /ruta/del/proyecto
docker compose pull
docker compose up -d