# Instalar Docker Engine en Fedora


Para comenzar con Docker Engine en Fedora, asegúrate de que [cumples con los prerrequisitos](#prerrequisitos) y luego sigue los [pasos de instalación](#metodos-de-instalacion).

## Prerrequisitos

### Requisitos del sistema operativo

Para instalar Docker Engine, necesitas una versión mantenida de una de las siguientes versiones de Fedora:

- Fedora 44
- Fedora 43
- Fedora 42

### Desinstalar versiones anteriores

Antes de que puedas instalar Docker Engine, debes desinstalar cualquier paquete conflictivo.

Es posible que tu distribución de Linux proporcione paquetes no oficiales de Docker, los cuales pueden entrar en conflicto con los paquetes oficiales proporcionados por Docker. Debes desinstalar estos paquetes antes de instalar la versión oficial de Docker Engine.

```console
$ sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
```

Es posible que `dnf` indique que no tienes ninguno de estos paquetes instalado.

Las imágenes, contenedores, volúmenes y redes almacenados en `/var/lib/docker/` no se eliminan automáticamente al desinstalar Docker.

## Métodos de instalación

Puedes instalar Docker Engine de diferentes maneras, según tus necesidades:

- Puedes [configurar los repositorios de Docker](#instalar-utilizando-el-repositorio-rpm) e instalar desde ellos, para facilitar las tareas de instalación y actualización. Este es el enfoque recomendado.

- Puedes descargar el paquete RPM, [instalarlo manualmente](#instalar-desde-un-paquete) y gestionar las actualizaciones de forma completamente manual. Esto resulta útil en situaciones como la instalación de Docker en sistemas aislados de la red (air-gapped) sin acceso a Internet.

- En entornos de prueba y desarrollo, puedes utilizar [scripts de conveniencia](#instalar-utilizando-el-script-de-conveniencia) automatizados para instalar Docker.



Apache License, Versión 2.0. Consulta [LICENSE](https://github.com/moby/moby/blob/master/LICENSE) para ver la licencia completa.

### Instalar utilizando el repositorio rpm {#install-using-the-repository}

Antes de instalar Docker Engine por primera vez en una nueva máquina host, debes configurar el repositorio de Docker. Después, podrás instalar y actualizar Docker desde el repositorio.

#### Configurar el repositorio

```console
$ sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo
```

#### Instalar Docker Engine

1. Instala los paquetes de Docker.

   **Última versión**



   Para instalar la última versión, ejecuta:

   ```console
   $ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
   ```

   Si se te solicita aceptar la clave GPG, verifica que la huella digital coincida con `060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35` y, de ser así, acéptala.

   Este comando instala Docker, pero no lo inicia. También crea un grupo `docker`, sin embargo, no añade ningún usuario al grupo de forma predeterminada.

   **Versión específica**



   Para instalar una versión específica, comienza por listar las versiones disponibles en el repositorio:

   ```console
   $ dnf list docker-ce --showduplicates | sort -r

   docker-ce.x86_64    3:29.5.1-1.fc41    docker-ce-stable
   docker-ce.x86_64    3:29.5.0-1.fc41    docker-ce-stable
   <...>
   ```

   La lista devuelta depende de qué repositorios estén habilitados y es específica para tu versión de Fedora (indicada por el sufijo `.fc41` en este ejemplo).

   Instala una versión específica mediante su nombre de paquete completo, que es el nombre del paquete (`docker-ce`) más la cadena de versión (segunda columna), separados por un guion (`-`). Por ejemplo, `docker-ce-3:29.5.1-1.fc41`.

   Reemplaza `<VERSION_STRING>` con la versión deseada y luego ejecuta el siguiente comando para instalar:

   ```console
   $ sudo dnf install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
   ```

   Este comando instala Docker, pero no lo inicia. También crea un grupo `docker`, sin embargo, no añade ningún usuario al grupo de forma predeterminada.

   

2. Inicia Docker Engine.

   ```console
   $ sudo systemctl enable --now docker
   ```

   Esto configura el servicio de systemd de Docker para que se inicie automáticamente al arrancar el sistema. Si no deseas que Docker se inicie automáticamente, utiliza `sudo systemctl start docker` en su lugar.

   > [!NOTE]
   >
   > Si el servicio de Docker no se inicia y `journalctl -u docker` muestra `failed to find iptables`, apunta el comando `iptables` a `iptables-nft` utilizando `alternatives` y reinicia el servicio:
   >
   > ```console
   > $ sudo alternatives --set iptables /usr/bin/iptables-nft
   > $ sudo systemctl restart docker
   > ```

3. Verifica que la instalación se haya realizado correctamente ejecutando la imagen `hello-world`:

   ```console
   $ sudo docker run hello-world
   ```

   Este comando descarga una imagen de prueba y la ejecuta en un contenedor. Cuando el contenedor se ejecuta, imprime un mensaje de confirmación y finaliza.

Ahora has instalado e iniciado correctamente Docker Engine.



> [!TIP]
> 
> ¿Recibes errores al intentar ejecutar sin root?
>
> El grupo de usuarios `docker` existe pero no contiene usuarios, por lo que debes 
> usar `sudo` para ejecutar los comandos de Docker. Continúa a [Pasos posteriores a la instalación en Linux](/engine/install/linux-postinstall) 
> para que los usuarios sin privilegios puedan ejecutar comandos de Docker y para ver otros pasos de configuración opcionales.


#### Actualizar Docker Engine

Para actualizar Docker Engine, sigue las [instrucciones de instalación](#install-using-the-repository) eligiendo la nueva versión que deseas instalar.

### Instalar desde un paquete

Si no puedes utilizar el repositorio `rpm` de Docker para instalar Docker Engine, puedes descargar el archivo `.rpm` para tu versión e instalarlo manualmente. Deberás descargar un archivo nuevo cada vez que quieras actualizar Docker Engine.

1. Dirígete a [https://download.docker.com/linux/fedora/](https://download.docker.com/linux/fedora/) y elige tu versión de Fedora. Luego navega hasta `x86_64/stable/Packages/` y descarga el archivo `.rpm` correspondiente a la versión de Docker que deseas instalar.

2. Instala Docker Engine, cambiando la siguiente ruta por la ruta donde descargaste el paquete de Docker.

   ```console
   $ sudo dnf install /ruta/al/paquete.rpm
   ```

   Docker se instala pero no se inicia. Se crea el grupo `docker`, pero no se añaden usuarios al grupo.

3. Inicia Docker Engine.

   ```console
   $ sudo systemctl enable --now docker
   ```

   Esto configura el servicio de systemd de Docker para que se inicie automáticamente al arrancar el sistema. Si no deseas que Docker se inicie automáticamente, utiliza `sudo systemctl start docker` en su lugar.

   > [!NOTE]
   >
   > Si el servicio de Docker no se inicia y `journalctl -u docker` muestra `failed to find iptables`, apunta el comando `iptables` a `iptables-nft` utilizando `alternatives` y reinicia el servicio:
   >
   > ```console
   > $ sudo alternatives --set iptables /usr/bin/iptables-nft
   > $ sudo systemctl restart docker
   > ```

4. Verifica que la instalación se haya realizado correctamente ejecutando la imagen `hello-world`:

   ```console
   $ sudo docker run hello-world
   ```

   Este comando descarga una imagen de prueba y la ejecuta en un contenedor. Cuando el contenedor se ejecuta, imprime un mensaje de confirmación y finaliza.

Ahora has instalado e iniciado correctamente Docker Engine.



> [!TIP]
> 
> ¿Recibes errores al intentar ejecutar sin root?
>
> El grupo de usuarios `docker` existe pero no contiene usuarios, por lo que debes 
> usar `sudo` para ejecutar los comandos de Docker. Continúa a [Pasos posteriores a la instalación en Linux](/engine/install/linux-postinstall) 
> para que los usuarios sin privilegios puedan ejecutar comandos de Docker y para ver otros pasos de configuración opcionales.


#### Actualizar Docker Engine

Para actualizar Docker Engine, descarga los archivos de paquete más recientes y repite el [procedimiento de instalación](#instalar-desde-un-paquete), utilizando `dnf upgrade` en lugar de `dnf install`, y apunta a los nuevos archivos.



### Instalar usando el script de conveniencia

Docker proporciona un script de conveniencia en
[https://get.docker.com/](https://get.docker.com/) para instalar Docker en
entornos de desarrollo de forma no interactiva. El script de conveniencia no se
recomienda para entornos de producción, pero resulta útil para crear un
script de aprovisionamiento adaptado a tus necesidades. Consulta también los
pasos de [instalar usando el repositorio](#install-using-the-repository) para
conocer los pasos de instalación utilizando el repositorio de paquetes. El código
fuente del script es de código abierto y puedes encontrarlo en el
[repositorio `docker-install` en GitHub](https://github.com/docker/docker-install).

<!-- prettier-ignore -->
Examina siempre los scripts descargados de internet antes de ejecutarlos localmente.
Antes de la instalación, familiarízate con los posibles riesgos y limitaciones
del script de conveniencia:

- El script requiere privilegios de `root` o `sudo` para ejecutarse.
- El script intenta detectar tu distribución y versión de Linux y
  configurar tu sistema de gestión de paquetes por ti.
- El script no te deja personalizar la mayoría de los parámetros de instalación.
- El script instala dependencias y recomendaciones sin solicitar
  confirmación. Esto puede instalar una gran cantidad de paquetes, dependiendo de la
  configuración de tu máquina host.
- De forma predeterminada, el script instala la versión estable más reciente de Docker,
  containerd y runc. Al usar este script para aprovisionar una máquina, esto puede
  dar lugar a actualizaciones inesperadas de versiones principales de Docker. Prueba siempre
  las actualizaciones en un entorno de pruebas antes de desplegarlas en tus
  sistemas de producción.
- El script no está diseñado para actualizar una instalación existente de Docker. Al
  usar el script para actualizar una instalación existente, es posible que las dependencias
  no se actualicen a la versión esperada, lo que daría como resultado versiones desactualizadas.

> [!TIP]
>
> Visualiza previamente los pasos del script antes de ejecutarlo. Puedes ejecutar el script con la opción `--dry-run` para conocer qué pasos
> ejecutará el script cuando sea invocado:
>
> ```console
> $ curl -fsSL https://get.docker.com -o get-docker.sh
> $ sudo sh ./get-docker.sh --dry-run
> ```

Este ejemplo descarga el script desde
[https://get.docker.com/](https://get.docker.com/) y lo ejecuta para instalar la
versión estable más reciente de Docker en Linux:

```console
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>
```

Has instalado e iniciado Docker Engine de forma correcta. El servicio `docker`
se inicia automáticamente en distribuciones basadas en Debian. En distribuciones basadas en
`RPM`, como CentOS, Fedora o RHEL, debes iniciarlo
manualmente usando el comando `systemctl` o `service` adecuado. Como indica el mensaje,
los usuarios que no sean root no pueden ejecutar comandos de Docker de forma predeterminada.

> **¿Usar Docker como usuario sin privilegios o instalarlo en modo rootless?**
>
> El script de instalación requiere privilegios de `root` o `sudo` para instalar y
> usar Docker. Si quieres conceder acceso a Docker a usuarios que no sean root, consulta los
> [pasos posteriores a la instalación para Linux](/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).
> También puedes instalar Docker sin privilegios de `root` o configurarlo para ejecutarse en
> modo rootless. Para obtener instrucciones sobre cómo ejecutar Docker en modo rootless, consulta
> [ejecutar el demonio de Docker como usuario que no es root (modo rootless)](/engine/security/rootless/).

#### Instalar versiones preliminares

Docker también proporciona un script de conveniencia en
[https://test.docker.com/](https://test.docker.com/) para instalar versiones preliminares de
Docker en Linux. Este script es idéntico al de `get.docker.com`, pero
configura tu gestor de paquetes para usar el canal de prueba (test) del repositorio de paquetes
de Docker. El canal de prueba incluye tanto versiones estables como preliminares (versiones beta,
candidatas a lanzamiento) de Docker. Usa este script para obtener acceso anticipado a los
próximos lanzamientos y evaluarlos en un entorno de pruebas antes de que se
publiquen como estables.

Para instalar la versión más reciente de Docker en Linux desde el canal de prueba, ejecuta:

```console
$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh
```

#### Actualizar Docker después de usar el script de conveniencia

Si instalaste Docker usando el script de conveniencia, debes actualizar Docker
directamente usando tu gestor de paquetes. No tiene ninguna ventaja volver a ejecutar el
script de conveniencia. Volver a ejecutarlo puede causar problemas si intenta volver a instalar
repositorios que ya existen en la máquina host.



## Desinstalar Docker Engine

1. Desinstala los paquetes de Docker Engine, CLI, containerd y Docker Compose:

   ```console
   $ sudo dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
   ```

2. Las imágenes, contenedores, volúmenes o archivos de configuración personalizados en tu host no se eliminan automáticamente. Para eliminar todas las imágenes, contenedores y volúmenes:

   ```console
   $ sudo rm -rf /var/lib/docker
   $ sudo rm -rf /var/lib/containerd
   ```

Debes eliminar manualmente cualquier archivo de configuración que hayas editado.

## Próximos pasos

- Continúa con los [Pasos posteriores a la instalación en Linux](/engine/install/fedora/linux-postinstall/).

