Instalar Docker en modo rootless (Sin privilegios root)
Published: 2024-05-28 22:01:26

El modo sin raíz permite ejecutar el demonio Docker y los contenedores como usuario no raíz para mitigar posibles vulnerabilidades en el demonio y el tiempo de ejecución del contenedor.

**Pre-requisitos:**
- Tener actualizado docker

**Consideraciones**
**Proceso de instalación**

1.- Crear un nuevo usuario para Docker
Ejecuta los siguientes comandos para crear un usuario llamado test y asignarle una contraseña:

```
sudo useradd test
sudo passwd test
```
2.- Asignar permisos sudo al nuevo usuario
Abre el archivo de configuración de sudo:

```
sudo visudo
```
En la sección de usuarios, agrega la siguiente línea para otorgar permisos sudo al usuario test:

```
test   ALL=(ALL:ALL) ALL
```

Guarda y cierra el archivo.

3.- Agregar el usuario a los grupos necesarios y ajustar IDs:
Ejecuta los siguientes comandos para agregar el usuario test a los grupos hiper y docker, y luego cambia su UID y GID a 1000:

```
usermod -aG test test
usermod -aG docker test
usermod -u 1000 test
groupmod -g 1000 test 
```

4.- Deshabilitar Docker y habilitar linger para el usuario:

Desactiva el servicio Docker, habilita linger para el usuario test y reinicia el sistema:

```
sudo systemctl disable --now docker.service docker.socket
sudo loginctl enable-linger test
sudo reboot
```

5.- Instalar Docker en modo rootless:
Inicia sesión con el usuario test e instala Docker en modo rootless: 

```
su - test
dockerd-rootless-setuptool.sh install  --force --skip-iptables
```
Al finalizar la instalación, debería aparecer algo semejante a esto:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ohjg06vihs02tw48a31o.png)
Si no aparece, algo en el proceso de instalación no se realizó de manera correcta.


6.- Actualizar el archivo .bashrc:
Abre el archivo .bashrc para editarlo:
```
vi ~/.bashrc
```
Agrega al final del archivo las siguientes líneas (estas se mencionan en la imagen anterior):

```
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/2002/docker.sock
```
Guarda y cierra el archivo. Luego, ejecuta el siguiente comando para aplicar los cambios:

```
source ~/.bashrc
```
 7.- Verificar la creación del archivo docker.service:
Una vez realizada la instalación, debería haberse creado un archivo docker.service en la siguiente ruta. Revisa si el archivo existe:

```
vi ~/.config/systemd/user/docker.service
```
8.- Finalmente iniciamos docker en modo rootlees con el siguiente comando: 

```
systemctl --user start docker
```

**Notas Adicionales:**

- Nota 1: Los archivos de configuración ahora se encuentran en la ruta mencionada.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r7vuxpu5aszvgvhovzaf.png)

- Nota 2: Luego de estos pasos, ya puedes instalar cualquier contenedor en Docker. Es importante tener en cuenta que estos contenedores no tendrán acceso a todos los archivos del sistema, sino únicamente a aquellos a los que el usuario test tenga acceso.

Este procedimiento asegura que Docker se ejecute en modo rootless con un usuario específico, manteniendo configuraciones seguras y adecuadas para tus necesidades


**Referencias**:
https://www.portainer.io/blog/portainer-and-rootless-docker
https://docs.docker.com/engine/security/rootless/
https://docs.docker.com/config/daemon/