Instalación de Docker y Docker Compose en Linux: guía completa
Docker & Containers · Por Kevin Marcondes · Publicado el · Actualizado el · 9 min de lectura
Esta guía explica, paso a paso, cómo instalar Docker y Docker Compose en Linux, cubriendo Ubuntu/Debian, Fedora/CentOS, Arch y openSUSE. Configurarás repositorios, instalarás el Engine y el Compose, habilitarás el servicio y probarás con un contenedor de ejemplo. Al final hay comprobaciones y soluciones para problemas comunes. Empecemos.
Requisitos previos y qué vas a instalar
Necesitas un Linux actualizado, acceso de administrador (sudo o root) y conexión a internet. Docker utiliza características del kernel (namespaces y cgroups) y funciona correctamente en distribuciones modernas. Instalar Compose permite orquestar servicios con un archivo YAML. Trataremos los repositorios oficiales cuando proceda y, en otros casos, usaremos los paquetes de la propia distribución.
Si estás evaluando su adopción, consulta un comparativo entre Docker y máquinas virtuales para entender ventajas y desventajas en disponibilidad.
- Cuenta con privilegios de sudo o root.
- Puertos y DNS funcionando para descargar paquetes e imágenes.
- Espacio en disco para imágenes y volúmenes (carpeta por defecto en /var/lib/docker).
- Systemd activo para gestionar el servicio de Docker.
| Distribución | Gestor de paquetes | Servicio systemd |
|---|---|---|
| Ubuntu/Debian | apt | docker |
| Fedora/CentOS/RHEL | dnf o yum | docker |
| Arch Linux | pacman | docker |
| openSUSE | zypper | docker |
Paso 1 — Eliminar versiones antiguas (si las hubiere)
Antes de instalar, elimina paquetes antiguos para evitar conflictos. Esto no borra imágenes ni volúmenes por defecto. Si borras manualmente /var/lib/docker perderás imágenes, volúmenes y capas. Haz copia de seguridad si necesitas conservar datos. Este paso es seguro en equipos o servidores donde la instalación es nueva.
# Ubuntu/Debian
sudo apt-get remove -y docker docker-engine docker.io containerd runc
# Fedora/CentOS/RHEL
sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine \
|| sudo yum remove -y docker docker-client docker-common docker-engine
# Arch Linux
sudo pacman -Rns --noconfirm docker docker-compose containerd runc
# openSUSE
sudo zypper remove -y docker docker-compose containerd runc
Paso 2 — Añadir repositorio (cuando aplique) y preparar dependencias
En Debian/Ubuntu, usa el repositorio oficial de Docker para versiones recientes. En Fedora/CentOS/RHEL, añade el repo correspondiente. En Arch y openSUSE, normalmente los paquetes de la propia distro son suficientes; una actualización del índice suele bastar. Este paso también instala utilidades necesarias para descargar y validar claves.
# Ubuntu (repositório Docker)
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Debian (repositório Docker)
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Fedora (repositório Docker)
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
# CentOS/RHEL (repositório Docker)
sudo yum -y install yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Arch Linux (índices da distribuição)
sudo pacman -Sy --noconfirm
# openSUSE (índices da distribuição)
sudo zypper refresh
Paso 3 — Instalar Docker Engine y la CLI
Ahora instala el daemon de Docker, la CLI y, cuando corresponda, containerd. Los nombres de los paquetes varían ligeramente entre familias de distribuciones. Tras la instalación, el binario docker quedará disponible en el PATH y el servicio podrá gestionarse con systemd.
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Fedora/CentOS/RHEL
sudo dnf install -y docker-ce docker-ce-cli containerd.io \
|| sudo yum install -y docker-ce docker-ce-cli containerd.io
# Arch Linux
sudo pacman -S --noconfirm docker containerd
# openSUSE
sudo zypper install -y docker
Paso 4 — Iniciar, habilitar y probar el servicio de Docker
Activa el servicio para que arranque automáticamente con el sistema y ejecuta una prueba simple con la imagen de ejemplo. Esta prueba descarga una imagen pequeña, la ejecuta e imprime un mensaje de éxito. Si el servicio arranca sin errores, estarás listo para crear imágenes y ejecutar contenedores en pipelines de CI/CD, por ejemplo con GitHub Actions.
sudo systemctl enable --now docker
sudo docker run --rm hello-world
sudo docker info
Paso 5 — Ejecutar Docker sin sudo (grupo docker)
Para el uso diario, añade tu usuario al grupo docker. Así evitarás usar sudo en cada comando. Atención: los miembros del grupo docker pueden obtener privilegios equivalentes a root, ya que el daemon tiene amplio acceso al sistema. Haz esto solo para usuarios de confianza. Tras aplicarlo, abre una nueva sesión para actualizar los grupos activos.
sudo groupadd -f docker
sudo usermod -aG docker "$USER"
# Aplique o grupo na sessão atual ou faça logoff/login
newgrp docker
# Teste sem sudo
docker run --rm hello-world
Paso 6 — Instalar Docker Compose (v2 como plugin; v1 cuando aplique)
Compose v2 se integra con Docker como un plugin. En distribuciones que usan el repositorio oficial de Docker, instala el paquete docker-compose-plugin. En otras, el paquete docker-compose puede proporcionar la versión clásica (v1), todavía funcional. Ambos permiten definir servicios con un archivo YAML y levantarlos con un único comando.
# Ubuntu/Debian (repositório Docker)
sudo apt-get update
sudo apt-get install -y docker-compose-plugin
# Verifique o plugin v2
docker compose version
# Fedora/CentOS/RHEL (repositório Docker)
sudo dnf install -y docker-compose-plugin || sudo yum install -y docker-compose-plugin
# Verifique o plugin v2
docker compose version
# Arch Linux (pacote da distribuição)
sudo pacman -S --noconfirm docker-compose
# Verifique a versão instalada (v1)
docker-compose --version
# openSUSE (pacote da distribuição)
sudo zypper install -y docker-compose
# Verifique a versão instalada (geralmente v1)
docker-compose --version
Verificación final y solución de problemas comunes
Confirma que todo funciona: el servicio debe estar activo, el usuario en el grupo correcto y la red de los contenedores accesible. A continuación, algunos diagnósticos útiles. Consulta también cómo estandarizar logs en producción con el guía de logs estructurados y correlación.
Errores frecuentes y correcciones:
• Permiso denegado en el socket: verifica que el usuario esté en el grupo docker y reinicia la sesión.
• Fallo al iniciar: revisa los logs del servicio y si el kernel soporta cgroups/overlay2.
• Sin red en el contenedor: valida DNS/salida a internet y las reglas de firewall/NAT.
• Proxy corporativo: configura las variables de entorno y, si es necesario, el proxy de systemd para Docker.
- Permiso denegado en el socket: confirma grupo docker activo en la sesión.
- Fallo del daemon: revisa logs del servicio y módulos del kernel.
- Sin red: revisa DNS, NAT y firewall.
- Entorno con proxy: exporta las variables HTTP(S)_PROXY y NO_PROXY según la política.
# Verificar status e logs
systemctl status docker --no-pager
journalctl -u docker -b --no-pager | tail -n 100
# Testar rede do container (DNS e IP)
docker run --rm alpine sh -c "ip addr; nslookup google.com || true"
# Conferir versões
docker version
docker compose version || docker-compose --version
Preguntas frecuentes
¿Cuál es la diferencia entre Docker Compose v1 y v2?
Compose v2 se instala e integra como plugin de Docker y se utiliza mediante el subcomando 'docker compose'. La versión v1 es un binario separado, normalmente llamado 'docker-compose'. Para la mayoría de escenarios ambos permiten definir y levantar servicios con un archivo YAML; sin embargo, las novedades y mejoras suelen publicarse primero en v2. La instalación depende de la distribución y del repositorio elegido.
¿Necesito virtualización de hardware para usar Docker?
No. Los contenedores se basan en aislamiento del kernel (namespaces y cgroups) y no requieren un hipervisor ni virtualización de hardware para ejecutar instancias habituales. La virtualización se usa para máquinas virtuales; algunas herramientas de compilación multiplataforma o emulación pueden recurrir a virtualización, pero ejecutar y probar contenedores comunes en una distribución moderna no necesita hardware de virtualización.
¿Dónde almacena Docker las imágenes y volúmenes por defecto?
Por defecto Docker guarda sus datos en /var/lib/docker; allí residen imágenes, capas y metadatos del daemon. Puedes cambiar esta ubicación mediante la configuración del daemon para apuntar a otro directorio o disco, pero mover los datos sin la precaución adecuada puede corromperlos. Haz copia de seguridad antes de modificar la ruta y sigue los pasos de configuración propios de tu distribución.
¿Cómo desinstalo completamente Docker y limpio los datos?
Para desinstalar Docker elimina los paquetes con el gestor de tu distribución y, si necesitas limpiar todos los datos, borra manualmente /var/lib/docker y /var/lib/containerd. Ten en cuenta que esta acción elimina imágenes, volúmenes y capas irrecuperables. Antes de borrar, exporta o guarda los datos necesarios y verifica que no haya contenedores en ejecución; sigue las indicaciones del sistema para deshabilitar o detener el servicio correctamente.
¿Es seguro añadir mi usuario al grupo docker?
Añadir un usuario al grupo docker le otorga privilegios equivalentes a root porque el daemon controla recursos del sistema; por eso representa un riesgo en entornos multiusuario. En estaciones personales de confianza suele aceptarse para evitar sudo continuo, pero en servidores compartidos es preferible usar sudo controlado, políticas de acceso y aplicar el principio del menor privilegio. Evalúa riesgos según el caso.
¿Quieres profundizar con contenedores?
Si quieres discutir escenarios avanzados (despliegue, CI/CD, seguridad y logs) o revisar tus configuraciones, envía un mensaje y lo hablamos.
Hablar sobre contenedoresVer también
- Tutorial: implementar Canary releases con Traefik en Docker Compose usando headers y weighted routing para despliegues graduales de aplicaciones PHP
- Tutorial: configurar HAProxy con Let's Encrypt y healthchecks para balanceo de tráfico entre contenedores Docker en VPS (paso a paso)
- Tutorial práctico: implementar mTLS entre Nginx y microservicios usando smallstep CA en Docker Compose
- Tutorial: configurar cgroup v2 y systemd ResourceControl para limitar CPU, memoria e I/O de contenedores Docker en Debian