Start typing to search across invoices, services, domains, tickets, and more...
Esta guía explica cómo instalar Docker y Docker Compose en un servidor Linux usando el repositorio oficial de Docker, con comandos separados para Debian/Ubuntu y Rocky Linux/AlmaLinux. También cubre la configuración posterior a la instalación, la ejecución de su primer contenedor, los mirrors del registro y el error clásico de que Docker publique puertos saltándose su firewall. Se aplica a los VPS y servidores dedicados de IMIDC con un sistema operativo de 64 bits y acceso root.
Los paquetes de la distribución, como docker.io o podman-docker, entran en conflicto con Docker CE. En un sistema recién instalado, los comandos simplemente indicarán que no hay nada instalado. Al eliminar estos paquetes no se borran las imágenes ni los volúmenes existentes en /var/lib/docker.
# Debian / Ubuntu: eliminar paquetes de la distribución que entran en conflicto con Docker CE
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do apt-get remove -y $pkg; done
# Rocky Linux / AlmaLinux
dnf remove -y docker docker-client docker-client-latest docker-common docker-latest \
docker-latest-logrotate docker-logrotate docker-engine podman runc
El repositorio oficial ofrece versiones más recientes que los repositorios de la distribución e incluye el plugin docker compose (Compose V2). Los comandos leen /etc/os-release para detectar Debian o Ubuntu y el nombre en clave de la versión, así que puede pegarlos tal cual.
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
. /etc/os-release # sets $ID (debian/ubuntu) and $VERSION_CODENAME
curl -fsSL https://download.docker.com/linux/$ID/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$ID $VERSION_CODENAME stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
En sistemas compatibles con RHEL, use el repositorio rhel de Docker, que funciona en Rocky Linux y AlmaLinux 8 y 9. Durante la primera instalación, dnf le pedirá aceptar la clave GPG de Docker; verifique la huella digital y responda y.
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Habilite el servicio al arranque y verifíquelo con hello-world. Para que un usuario normal pueda ejecutar docker sin sudo, añádalo al grupo docker, pero recuerde que pertenecer a este grupo otorga privilegios equivalentes a root, así que hágalo solo con cuentas de confianza.
systemctl enable --now docker
docker version
docker compose version
docker run --rm hello-world
# Opcional: permitir que un usuario normal ejecute docker (equivale a acceso root)
usermod -aG docker deploy
# cierre la sesión, vuelva a iniciarla como "deploy" y pruebe:
docker ps
Compose V2 se invoca como docker compose (con un espacio) y el nombre de archivo recomendado es compose.yaml. El siguiente ejemplo inicia un contenedor de Nginx vinculado solo a 127.0.0.1; más adelante puede publicarlo mediante un proxy inverso Nginx en el host con HTTPS (consulte nuestro tutorial de proxy inverso con Nginx).
mkdir -p /opt/web && cd /opt/web
cat > compose.yaml <<'EOF'
services:
web:
image: nginx:stable
ports:
- "127.0.0.1:8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
EOF
mkdir -p html && echo "Hello from Docker" > html/index.html
docker compose up -d
docker compose ps
curl http://127.0.0.1:8080
docker compose logs -f web # Ctrl+C to stop following
Los servidores de IMIDC en Hong Kong, Japón, Corea del Sur y otras regiones normalmente acceden a Docker Hub directamente, por lo que rara vez se necesita un mirror. Si las descargas son lentas, añada un mirror de confianza en daemon.json (registry-mirrors solo se aplica a Docker Hub). También es recomendable limitar el tamaño de los logs de los contenedores para que no llenen el disco. Las descargas anónimas tienen límite de frecuencia, así que ejecute docker login si descarga imágenes a menudo.
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://mirror.example.com"],
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
EOF
systemctl restart docker
docker info | grep -A2 "Registry Mirrors"
# Evitar los límites de descarga anónima de Docker Hub
docker login
journalctl -u docker -n 50 si el reinicio falla.Docker escribe sus propias reglas de iptables/nftables para publicar puertos, y esas reglas se evalúan antes que las de ufw. Como resultado, un puerto publicado con -p 8080:80 es accesible desde Internet aunque ufw nunca haya permitido el 8080. La práctica más segura es vincular a 127.0.0.1 y poner la aplicación detrás de Nginx; si un puerto debe ser público, filtre los orígenes en la cadena DOCKER-USER.
# 1) Recomendado: publicar solo en localhost y exponer la app a través de Nginx
# compose.yaml -> ports: - "127.0.0.1:8080:80"
# 2) Restringir un puerto publicado en la cadena DOCKER-USER
# (solo 198.51.100.20 puede acceder al puerto 8080 del contenedor por eth0)
iptables -I DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 8080 --ctdir ORIGINAL \
! -s 198.51.100.20 -j DROP
iptables -L DOCKER-USER -n --line-numbers
# 3) firewalld (Rocky/AlmaLinux): Docker añade su propia zona "docker"
firewall-cmd --get-active-zones
firewall-cmd --zone=docker --list-all
# Tras recargar o reiniciar el firewall, reinicie Docker para que regenere sus reglas
systemctl restart docker
-p 3306:3306. Es una de las causas más comunes de intrusiones y ataques de rescate (ransomware).Su usuario no está en el grupo docker o no ha vuelto a iniciar sesión desde que lo añadió. Ejecute id para comprobarlo, vuelva a conectarse por SSH o simplemente use root o sudo.
docker-compose (con guion) es la herramienta independiente V1, ya retirada. docker compose es el plugin V2 que se instala con docker-compose-plugin. La sintaxis es en gran medida compatible, así que use V2 en todos los proyectos nuevos.
Recargar firewalld o vaciar iptables elimina las reglas NAT que creó Docker. Ejecute systemctl restart docker y Docker las volverá a crear.
¿Sigue con problemas después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión del sistema operativo, los comandos que ejecutó y la salida completa del error para que podamos localizar el problema más rápido.