· 9 min de lectura · actualizado el 15 de agosto de 2026

La ballena de Docker cargada de contenedores junto al pingüino de Linux, con varios contenedores enlazados entre sí y un editor de código al fondo

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?

La palabra Why? escrita a mano en negro sobre fondo blanco, abriendo la sección sobre por qué usar Nginx Proxy Manager

Antes de entrar en los pasos técnicos, vale la pena entender por qué estas herramientas son tan populares:

¿Listo para instalar estas herramientas? ¡Vamos allá!

Requisitos Previos

Ilustración de unas manos marcando casillas en una lista de comprobación con un lápiz

Antes de comenzar, asegúrate de contar con lo siguiente:

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

Ilustración de una persona ante un portátil mientras una pantalla muestra el texto Installing

Paso 1: Actualizar el Sistema

Primero, asegúrate de que tu sistema esté actualizado:

sudo apt update && sudo apt upgrade -y

Esto 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 -y

Verifica que se haya instalado correctamente con:

curl --version

Deberías ver algo como:

Salida de curl --version con el número de versión recuadrado en rojo

Paso 3: Instalar Docker y Docker Compose

Ahora, instalemos Docker y Docker Compose utilizando el script oficial:

curl -sSL https://get.docker.com/ | sh

Un 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?

  1. Verifica el sistema:
    • Comprueba la distribución y versión del sistema operativo para asegurarse de que sea compatible con Docker.
  2. Configura repositorios oficiales:
    • Añade los repositorios de Docker necesarios a tu sistema (APT para Debian/Ubuntu o YUM para CentOS/RHEL).
  3. Instala Docker:
    • Instala el motor de contenedores Docker (Docker Engine).
    • Instala la interfaz de línea de comandos de Docker (Docker CLI).
  4. Incluye Docker Compose V2:
    • Docker Compose V2 está integrado en el binario de Docker CLI, por lo que se incluye automáticamente.
  5. 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.
  6. 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 --version

Deberías obtener un resultado como este:

Docker version 27.3.1, build ce12230

Luego, verifica la instalación de Docker Compose:

docker compose version

Deberías ver algo como:

Docker Compose version v2.29.7

Paso 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-world

Si todo está configurado correctamente, verás un mensaje de confirmación indicando que Docker está funcionando.

Salida de docker run hello-world con el mensaje Hello from Docker recuadrado, que confirma la instalación

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:

ClaveQué 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: alwaysVuelve 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:

Recursos Adicionales

Para profundizar en Docker y Docker Compose, echa un vistazo a estas fuentes:

Reflexión Final

Ilustración de cierre con la palabra Conclusions, una bombilla encendida, marcas de verificación y gráficos

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:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *