Instalar Docker en Ubuntu: APT, Snap, Rootless — Guía completa 2026

Seleccione la ruta de instalación de Docker adecuada en Ubuntu.

Índice

La instalación de Docker en Ubuntu debería ser sencilla, pero en la práctica, varias opciones con forma de Docker compiten por el mismo nombre de comando, cada una con diferente empaquetado, comportamiento de actualización e implicaciones de seguridad.

Esta guía compara cada ruta de instalación principal para que puedas elegir la que mejor se adapte a tu máquina.

Las opciones que encontrarás incluyen:

  • docker.io de los repositorios de Ubuntu
  • docker-ce del repositorio APT oficial de Docker
  • Docker desde Snap
  • Docker Desktop
  • paquetes .deb descargados manualmente
  • el script de conveniencia de Docker
  • Docker sin privilegios de root (rootless)

docker workplace

Aunque todas proporcionan herramientas de contenedores, no son paquetes intercambiables. La mejor elección depende de si la máquina es una estación de trabajo de desarrollo, un ejecutor de CI, un servidor pequeño, un equipo de autoalojamiento o un host de producción. Mi recomendación predeterminada es tranquila pero firme: para la mayoría de los usuarios técnicos en máquinas Ubuntu normales, instala el Motor de Docker desde el repositorio APT oficial de Docker. Utiliza docker.io de Ubuntu solo cuando la integración con la distribución sea más importante que el empaquetado directo de Docker. Evita el paquete Snap a menos que desees específicamente el comportamiento de Snap y comprendas sus limitaciones. Vale la pena conocer Docker sin privilegios de root, pero no es automáticamente la mejor opción predeterminada para cada máquina.

Esta guía explica los compromisos, cubre la seguridad posterior a la instalación y te proporciona rutas de instalación limpias para cada método. Una vez que el Motor de Docker esté en ejecución, la Hoja de trucos de Docker es tu referencia de comandos diaria, y la Hoja de trucos de Docker Compose cubre configuraciones de múltiples contenedores. Ambas se encuentran junto a las guías de Git, VS Code y CI/CD en Herramientas para Desarrolladores: La Guía Completa para Flujos de Trabajo Modernos de Desarrollo.

Recomendación Rápida

La tabla a continuación resume qué ruta de instalación se adapta a los escenarios comunes.

Caso de uso Instalación recomendada
Estación de trabajo de desarrollo Repositorio APT oficial de Docker
Ejecutor de CI Repositorio APT oficial de Docker, versión fijada si es necesario
Servidor autoalojado pequeño Repositorio APT oficial de Docker
Servidor de producción Repositorio APT oficial de Docker, actualizaciones controladas
Sistema conservador solo Ubuntu Paquete docker.io de Ubuntu
Experimento rápido de escritorio Docker Desktop o repositorio APT oficial
Configuración de Ubuntu gestionada por Snap Snap de Docker, con precaución
Requerimiento fuerte de daemon sin root Docker sin privilegios de root (Rootless Docker)
Host aislado (air-gapped) Paquetes .deb manuales o espejo interno

Si no tienes una razón especial para elegir de otra manera, el repositorio APT oficial de Docker es la opción predeterminada.

Qué Se Instala

Una configuración normal del Motor de Docker incluye varias partes móviles:

  • Daemon de Docker: dockerd
  • CLI de Docker: docker
  • Runtime de contenedores: containerd
  • Runtime de bajo nivel: runc
  • Plugin Buildx: docker buildx
  • Plugin Compose: docker compose

Docker Compose moderno generalmente se instala como un plugin del CLI de Docker. Eso significa que el comando es:

docker compose version

No:

docker-compose version

El antiguo comando docker-compose aún existe en guías y sistemas más antiguos, pero las nuevas configuraciones de Ubuntu generalmente deberían usar el plugin Compose.

Opción 1: Instalar Docker desde el Repositorio APT Oficial de Docker

Esta es la mejor opción predeterminada para la mayoría de los desarrolladores y usuarios de DevOps. Obtienes el empaquetado directo de Docker, las versiones actuales del Motor de Docker, Buildx, el plugin Compose y una ruta de actualización APT normal.

Eliminar Paquetes Conflictivos Primero

Antes de instalar Docker CE, elimina los paquetes que puedan entrar en conflicto con los paquetes oficiales de Docker.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Está bien si APT dice que algunos de estos paquetes no están instalados.

Este comando no elimina imágenes, contenedores, volúmenes o redes de Docker almacenados bajo /var/lib/docker. Si deseas un reinicio limpio, ese es un paso separado y debe hacerse deliberadamente.

Agregar el Repositorio APT Oficial de Docker

Instalar los prerrequisitos:

sudo apt update
sudo apt install ca-certificates curl

Crear el directorio del anillo de claves (keyring):

sudo install -m 0755 -d /etc/apt/keyrings

Descargar la clave del repositorio de Docker:

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

Permitir que APT lea la clave:

sudo chmod a+r /etc/apt/keyrings/docker.asc

Agregar el repositorio de Docker usando el formato .sources deb822:

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt keyrings/docker.asc
EOF

Actualizar los metadatos de APT:

sudo apt update

Instalar el Motor de Docker, Buildx y Compose

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Verificar el servicio:

sudo systemctl status docker

Si no está en ejecución:

sudo systemctl start docker

Verificar la instalación:

sudo docker run hello-world

Verificar las versiones:

docker --version
docker buildx version
docker compose version

En este punto, Docker funciona, aunque todavía necesitas sudo para la mayoría de los comandos a menos que configures el acceso sin privilegios de root en la sección posterior a la instalación a continuación.

Opción 2: Instalar Docker desde los Repositorios de Ubuntu

Ubuntu proporciona el paquete docker.io, que puedes instalar con:

sudo apt update
sudo apt install docker.io docker-compose-v2

Iniciar y habilitar Docker:

sudo systemctl enable --now docker

Verificar:

sudo docker run hello-world

Cuándo Tiene Sentido docker.io de Ubuntu

El paquete de Ubuntu puede ser una buena elección cuando:

  • Prefieres paquetes mantenidos por Ubuntu.
  • Quieres una versión alineada con el proceso de lanzamiento de Ubuntu.
  • Estás gestionando muchos hosts Ubuntu con repositorios estándar.
  • No necesitas la versión más reciente de Docker upstream.
  • Quieres menos fuentes APT de terceros.

Esta es una elección razonable. No está “mal”.

Cuándo docker.io de Ubuntu No Es Ideal

Usa el repositorio oficial de Docker en su lugar cuando:

  • Quieres el Motor de Docker upstream actual.
  • Sigues la documentación propia de Docker.
  • Dependes del comportamiento actual de Buildx y Compose.
  • Quieres nombres de paquetes de Docker CE.
  • Estás depurando problemas contra la documentación upstream de Docker.
  • Necesitas paridad predecible de versiones de Docker entre distribuciones.

Mi sesgo: para máquinas de desarrollo y hosts intensivos en contenedores, usa el repositorio APT oficial de Docker. Para máquinas gestionadas por Ubuntu de manera conservadora, docker.io es aceptable.

Opción 3: Instalar Docker con Snap

El snap de Docker se instala con un solo comando, pero la simplicidad no siempre significa un comportamiento predecible en un servidor o máquina de desarrollo.

sudo snap install docker

Los paquetes Snap tienen su propio modelo de empaquetado, comportamiento de actualización, suposiciones de aislamiento y estructura de sistema de archivos. Eso está bien para muchas aplicaciones de escritorio, pero el Motor de Docker ya es un runtime de contenedores a nivel de sistema, por lo que la capa adicional de Snap puede sorprender a la gente. Si gestionas otro software con Snap, la Hoja de Trucos del Gestor de Paquetes Snap explica los canales, aislamiento y comportamiento de actualización en más detalle.

Cuándo Tiene Sentido el Snap de Docker

El Snap de Docker puede ser razonable cuando:

  • Gestionas intencionalmente el software con Snap.
  • Estás usando Ubuntu Core o un entorno intensivo en Snap.
  • Quieres actualizaciones automáticas estilo snap.
  • Estás experimentando y no te importa coincidir con las instrucciones APT upstream de Docker.

Por Qué Generalmente Evito el Snap de Docker

Generalmente evito el snap de Docker para desarrollo y uso en servidor porque:

  • La mayoría de la documentación de Docker asume la estructura estándar del Motor de Docker.
  • Las rutas de solución de problemas pueden diferir de las instalaciones APT.
  • La gestión de servicios puede sentirse menos transparente.
  • Las actualizaciones automáticas de Snap pueden ser inconvenientes para el software de infraestructura.
  • Algunos detalles de montajes vinculados, sockets e integración con el host pueden sorprenderte.

Si Docker es central en tu flujo de trabajo, instálalo como infraestructura en lugar de una aplicación de escritorio casual, incluso cuando una instalación Snap parezca tentadora a primera vista.

Opción 4: Instalar Docker desde Paquetes .deb Manuales

La instalación manual de .deb es útil cuando:

  • La máquina no puede usar repositorios APT externos.
  • Estás construyendo un proceso de instalación sin conexión.
  • Espejas paquetes internamente.
  • Necesitas un control de cambios estricto.

El compromiso es el mantenimiento, porque debes descargar e instalar nuevos paquetes manualmente cada vez que actualices.

Una instalación manual generalmente requiere estos paquetes:

  • containerd.io
  • docker-ce
  • docker-ce-cli
  • docker-buildx-plugin
  • docker-compose-plugin

Instálalos con:

sudo dpkg -i ./containerd.io_*.deb \
  ./docker-ce_*.deb \
  ./docker-ce-cli_*.deb \
  ./docker-buildx-plugin_*.deb \
  ./docker-compose-plugin_*.deb

Luego corrige las dependencias faltantes si es necesario:

sudo apt --fix-broken install

Verificar:

sudo systemctl status docker
sudo docker run hello-world

Las instalaciones manuales de .deb no son mi primera elección, pero siguen siendo válidas para entornos controlados o aislados donde la aprobación explícita de paquetes es más importante que la conveniencia.

Opción 5: Usar el Script de Conveniencia de Docker

Docker proporciona un script de conveniencia:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Puedes previsualizar qué haría:

sudo sh get-docker.sh --dry-run

El script de conveniencia es útil para máquinas de prueba desechables, demostraciones, laboratorios y entornos temporales, pero no lo usaría como método de instalación principal para sistemas de producción. Un script que configura repositorios e instala paquetes de manera no interactiva es conveniente, pero la infraestructura de larga vida merece pasos explícitos y revisables; por lo tanto, para hosts de producción, usa el método del repositorio APT directamente.

Docker Desktop vs Motor de Docker en Ubuntu

Docker Desktop para Linux es un producto diferente al Motor de Docker. El Motor de Docker es el runtime del lado del servidor y el flujo de trabajo CLI que la mayoría de los usuarios de servidores Linux esperan, mientras que Docker Desktop agrega una GUI, integraciones de escritorio y una experiencia de producto más cercana al uso de Docker en macOS y Windows.

Usa Docker Desktop cuando:

  • Quieres una experiencia de Docker gráfica.
  • Quieres funciones de escritorio.
  • Estás alineando con un equipo que estandariza en Docker Desktop.
  • No te importa la capa adicional.

Usa el Motor de Docker cuando:

  • Estás ejecutando un servidor.
  • Quieres un runtime nativo de Linux simple.
  • Prefieres servicios gestionados por systemd.
  • Estás construyendo infraestructura CI, DevOps o autoalojada.
  • No necesitas la GUI.

Para una audiencia de blog técnico avanzada, el Motor de Docker suele ser la opción predeterminada más interesante en servidores Linux y hosts de CI.

Post-Instalación: Ejecutar Docker Sin Sudo

Después de la instalación, esto funciona:

sudo docker ps

Pero esto puede fallar:

docker ps

Eso es porque el daemon de Docker escucha en un socket Unix propiedad de root. La corrección común es agregar tu usuario al grupo docker.

Crear el grupo si es necesario:

sudo groupadd docker

Agregar tu usuario:

sudo usermod -aG docker $USER

Aplicar la nueva membresía de grupo:

newgrp docker

O cerrar sesión e iniciar sesión de nuevo.

Probar:

docker run hello-world

Nota de Seguridad Importante Sobre el Grupo Docker

El grupo docker no es un grupo de conveniencia inofensivo. Un usuario que pueda controlar el daemon de Docker generalmente puede obtener control equivalente a root del host, por lo que para una máquina de desarrollo personal esto suele ser aceptable, pero en un servidor compartido es una decisión seria de control de acceso. Trata la membresía en el grupo docker como acceso de administrador, y si eso se siente demasiado amplio, considera Docker sin privilegios de root en su lugar.

Docker Sin Privilegios de Root (Rootless) en Ubuntu

Docker sin privilegios de root ejecuta el daemon de Docker y los contenedores como un usuario sin privilegios de root. Esto no es lo mismo que agregar tu usuario al grupo docker; con el grupo docker, el daemon aún se ejecuta como root, mientras que en el modo sin privilegios de root, el daemon en sí se ejecuta como tu usuario.

Cuándo Tiene Sentido Docker Sin Privilegios de Root

Docker sin privilegios de root es útil cuando:

  • Quieres reducir el riesgo de root a nivel de daemon.
  • Estás en una máquina de desarrollo compartida.
  • Ejecutas contenedores propiedad del usuario.
  • No necesitas cada característica avanzada de redes y almacenamiento.
  • Quieres un valor predeterminado más seguro para cargas de trabajo experimentales.

Cuándo Docker Sin Privilegios de Root Puede Ser Molestoso

Docker sin privilegios de root puede ser menos conveniente cuando:

  • Necesitas contenedores privilegiados.
  • Dependes de la vinculación de puertos bajos sin configuración adicional.
  • Necesitas algunos patrones de redes del host.
  • Esperas un comportamiento idéntico a Docker con privilegios de root.
  • Estás siguiendo guías escritas para instalaciones normales del Motor de Docker.

El modo sin privilegios de root mejora la postura de seguridad, pero no es cero fricción en comparación con una instalación estándar con privilegios de root.

Instalar Docker Sin Privilegios de Root

Instalar prerrequisitos:

sudo apt update
sudo apt install uidmap

Si instalaste Docker desde paquetes DEB o APT, la herramienta de configuración sin privilegios de root debería estar disponible:

dockerd-rootless-setuptool.sh install

Si Docker con privilegios de root ya está en ejecución y solo quieres Docker sin privilegios de root, deshabilita el daemon del sistema:

sudo systemctl disable --now docker.service docker.socket

También puede ser necesario eliminar el socket con privilegios de root:

sudo rm -f /var/run/docker.sock

Después de instalar Docker sin privilegios de root, la herramienta de configuración generalmente imprime variables de entorno para agregar a tu perfil de shell. Comúnmente se ven así:

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

Tu UID puede diferir. Verifica la salida exacta de la herramienta de configuración.

Habilitar el lingering (permanencia) si deseas que el servicio de usuario se ejecute después de cerrar sesión:

sudo loginctl enable-linger $USER

Verificar el servicio de usuario:

systemctl --user status docker

Ejecutar un contenedor de prueba:

docker run hello-world

Docker Con Privilegios de Root vs Docker Sin Privilegios de Root

Tema Docker Con Privilegios de Root Docker Sin Privilegios de Root
Usuario del daemon root usuario normal
Conveniencia de comando alta media
Compatibilidad más alta buena, pero no perfecta
Postura de seguridad más débil por defecto mejor por defecto
Contenedores privilegiados soportados limitados
Puertos bajos simple necesita configuración adicional
Uso en servidor común posible, pero planifica cuidadosamente
Estación de trabajo de desarrollo común bueno para usuarios conscientes de la seguridad

Mi recomendación práctica:

  • Usa Docker con privilegios de root normal para una máquina de desarrollo personal o un servidor simple.
  • Agrega solo usuarios de confianza al grupo docker.
  • Usa Docker sin privilegios de root cuando el aislamiento de usuario sea importante.
  • No pretendas que el grupo docker es un límite de seguridad.

Habilitar Docker en el Inicio

En Ubuntu, Docker instalado desde paquetes normales generalmente comienza automáticamente, pero vale la pena confirmar después de una instalación fresca o migración.

Verificar:

systemctl is-enabled docker
systemctl is-enabled containerd

Habilitar manualmente si es necesario:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Iniciar ahora:

sudo systemctl start docker

Deshabilitar el inicio automático:

sudo systemctl disable docker.service
sudo systemctl disable containerd.service

Para Docker sin privilegios de root, usa el servicio de usuario:

systemctl --user enable docker
systemctl --user start docker

Y habilitar el lingering si es necesario:

sudo loginctl enable-linger $USER

Instalar o Verificar Docker Compose

Con el repositorio APT oficial de Docker, instala Compose como un plugin:

sudo apt update
sudo apt install docker-compose-plugin

Verificar:

docker compose version

Si instalaste el paquete de Ubuntu, puedes usar:

sudo apt install docker-compose-v2

Preferir:

docker compose up -d

Sobre el estilo antiguo:

docker-compose up -d

El comando con guion docker-compose pertenece a la era anterior de Compose independiente. Muchos sistemas aún lo tienen, pero la nueva documentación debería usar docker compose.

Verificar Qué Docker Tienes Instalado

Cuando heredas una máquina o depuras una configuración rota, estos comandos ayudan a identificar qué empaquetado de Docker está realmente en uso.

Verificar el binario de Docker:

which docker

Verificar la propiedad del paquete:

dpkg -S "$(which docker)"

Listar paquetes relacionados con Docker:

dpkg -l | grep -E 'docker|containerd|runc'

Verificar la política de APT:

apt-cache policy docker-ce docker.io containerd.io docker-compose-plugin docker-compose-v2

Verificar Snap:

snap list | grep docker

Verificar el estado del servicio:

systemctl status docker
systemctl status containerd

Verificar detalles del servidor de Docker:

docker info

Si docker info falla sin sudo, verifica tu membresía de grupo:

groups

Migrar desde docker.io de Ubuntu a Docker CE

Detener Docker:

sudo systemctl stop docker

Eliminar paquetes de Ubuntu:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc containerd runc

Agregar el repositorio APT oficial de Docker usando los pasos anteriores.

Instalar Docker CE:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Iniciar Docker:

sudo systemctl start docker

Verificar contenedores existentes:

docker ps -a
docker images
docker volume ls

Normalmente, eliminar paquetes no elimina /var/lib/docker, por lo que tus imágenes, contenedores y volúmenes pueden seguir existiendo. Sin embargo, haz una copia de seguridad de los datos importantes primero.

Migrar desde Docker Snap a Docker CE

Primero inspecciona qué existe:

snap list | grep docker
docker info

Detener cargas de trabajo y hacer copia de seguridad de volúmenes importantes o datos montados por vinculación.

Eliminar el snap:

sudo snap remove docker

Luego instalar Docker CE desde el repositorio APT oficial.

Ten cuidado con las ubicaciones de datos. Los paquetes Snap a menudo usan rutas diferentes y reglas de aislamiento. No asumas que los datos de Docker Snap aparecerán automáticamente bajo la ruta estándar /var/lib/docker después de la migración.

Para servicios importantes, exporta o haz copia de seguridad de los datos explícitamente antes de cambiar las fuentes de paquetes.

Fijar una Versión de Docker con APT

Para sistemas similares a producción, es posible que desees actualizaciones controladas.

Listar versiones disponibles:

apt list --all-versions docker-ce

Instalar una versión específica:

VERSION_STRING="5:29.0.0-1~ubuntu.24.04~noble"

sudo apt install docker-ce=$VERSION_STRING \
  docker-ce-cli=$VERSION_STRING \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

Retener paquetes de Docker:

sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Eliminar la retención más tarde:

sudo apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Haz esto cuando necesites ventanas de cambio predecibles. Para una laptop personal, puede ser innecesario.

Notas Sobre Firewall y Redes

Docker modifica las reglas de filtrado de paquetes para que la red de contenedores funcione, lo cual es importante si usas UFW, firewalld, nftables o reglas de firewall personalizadas.

Puntos importantes:

  • Los puertos de Docker publicados pueden omitir las expectativas ingenuas de UFW.
  • Docker usa integración con iptables.
  • Las reglas personalizadas deben tener en cuenta las cadenas creadas por Docker.
  • El endurecimiento del servidor debe ser probado con mapeos reales de puertos de contenedores.
  • No asumas que ufw deny protege un puerto publicado por Docker.

Prueba los puertos expuestos desde otra máquina, no solo desde localhost.

Ejemplo:

docker run --rm -p 8080:80 nginx

Luego desde otro host:

curl http://server-ip:8080

En servidores, la red de Docker es parte de tu modelo de seguridad, no un detalle de implementación que puedas ignorar después de la instalación.

Errores Comunes y Correcciones

Permiso Denegado en el Socket de Docker

Error:

permission denied while trying to connect to the Docker daemon socket

Opciones de corrección:

Usar sudo:

sudo docker ps

O agregar tu usuario al grupo docker:

sudo usermod -aG docker $USER
newgrp docker

Recuerda que el grupo docker es equivalente a root en la práctica, por lo que trata la membresía del grupo como una decisión de acceso privilegiado.

El Daemon de Docker No Está Ejecutándose

Verificar estado:

sudo systemctl status docker

Iniciarlo:

sudo systemctl start docker

Verificar registros:

journalctl -u docker --no-pager -n 100

Paquetes de Docker Conflictivos

Si la instalación de Docker CE falla debido a conflictos, elimina los paquetes antiguos. Si APT mismo está en un mal estado después de agregar el repositorio de Docker, trabaja a través de Solución de problemas de APT en Ubuntu para paquetes rotos y errores GPG antes de reintentar.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Luego reintenta:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Comando Compose No Encontrado

Verificar Compose moderno:

docker compose version

Instalar plugin:

sudo apt install docker-compose-plugin

Si esperabas el comando antiguo:

docker-compose version

Puede que estés siguiendo documentación antigua. Prefiere actualizar el comando a docker compose.

Configuración Antigua de Docker con Privilegios de Root

Si ejecutaste Docker con sudo antes de configurar el acceso de grupo, tu configuración de usuario puede ser propiedad de root.

Corregir propiedad:

sudo chown "$USER":"$USER" "$HOME/.docker" -R
sudo chmod g+rwx "$HOME/.docker" -R

O eliminar la configuración si no la necesitas:

sudo rm -rf "$HOME/.docker"

Se recreará.

No Se Puede Conectar a Docker Sin Privilegios de Root

Verificar entorno:

echo "$DOCKER_HOST"

Verificar servicio de usuario:

systemctl --user status docker

Establecer la ruta del socket si es necesario:

export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

Agrégalo a tu perfil de shell solo después de confirmar que es correcto.

Desinstalar el Motor de Docker

Eliminar paquetes de Docker CE:

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Eliminar datos de Docker solo si realmente deseas eliminar imágenes, contenedores y volúmenes:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Eliminar archivos de repositorio de Docker:

sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc

Actualizar APT:

sudo apt update

Para Docker Snap:

sudo snap remove docker

Para docker.io de Ubuntu:

sudo apt purge docker.io docker-compose-v2

Ruta de Instalación Recomendada para la Mayoría de los Usuarios de Ubuntu

Para la mayoría de los usuarios técnicos de Ubuntu, esta es la ruta limpia:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

sudo apt update
sudo apt install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt keyrings/docker.asc
EOF

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

Luego decide si deseas acceso de grupo por conveniencia o Docker sin privilegios de root para un aislamiento más estricto:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

Orientación Opinada Final

La instalación de Docker en Ubuntu es una elección operativa, no solo una elección de paquete. El método que elijas afecta las actualizaciones, los límites de seguridad y qué tan cerca coincide tu host con la documentación upstream de Docker.

Mis reglas prácticas son:

  • Usa el repositorio APT oficial de Docker para la mayoría de las máquinas de desarrollo y DevOps.
  • Usa docker.io de Ubuntu cuando la consistencia del repositorio de Ubuntu sea más importante que la frescura upstream.
  • Evita Docker Snap para flujos de trabajo de contenedores serios a menos que desees intencionalmente el comportamiento de Snap.
  • Evita el script de conveniencia para hosts de producción.
  • Usa docker compose moderno, no docker-compose antiguo.
  • Trata el grupo docker como acceso privilegiado.
  • Considera Docker sin privilegios de root cuando el aislamiento de usuario sea importante.
  • Fija versiones en sistemas similares a producción.
  • Prueba el comportamiento del firewall al publicar puertos en servidores.

La instalación de Docker más aburrida suele ser la mejor: repositorio APT oficial, anillo de claves explícito, plugin Compose, servicio systemd, permisos entendidos y ninguna capa de empaquetado misteriosa en el medio. Una vez que el motor está en su lugar, las cargas de trabajo de múltiples servicios, incluidas las pilas de LLM autoalojadas, son el siguiente paso natural; por ejemplo, ver Ollama en Docker Compose para ejecutar modelos locales en contenedores. Para mantener una pila Compose en ejecución entre reinicios en un servidor, Ejecutar Docker Compose como Servicio de Linux con systemd recorre archivos de unidad y hábitos operativos.

Leer Más

Suscribirse

Recibe nuevas publicaciones sobre sistemas, infraestructura e ingeniería de IA.