Cómo instalar Docker CLI en Windows sin Docker Desktop y no morir en el intento
Tags: spanish, containers, docker, tutorial
Published: 2024-03-19 15:50:50

En este post, exploraremos cómo instalar y configurar Docker CLI en Windows sin la necesidad de Docker Desktop. Aunque Docker Desktop es una herramienta conveniente y popular para manejar contenedores Docker en entornos de desarrollo, hay situaciones en las que se prefiere o se requiere una alternativa más ligera o específica. Ya sea por restricciones de licencia, necesidades de recursos mínimos o preferencias personales, instalar solo Docker CLI puede ser la solución ideal. Te guiaré a través de los pasos necesarios para configurar tu entorno Windows para usar Docker CLI, aprovechando las capacidades de WSL 2 (Subsistema de Windows para Linux versión 2) y sin la sobrecarga de Docker Desktop. Esto no solo te proporcionará un control más granular sobre tus contenedores Docker, sino que también optimizará el uso de recursos en tu máquina.

## Pasos Previos a la instalación

Los siguientes pasos los he probado en Windows 10, pero supongo funcionarán igual para windows 11.

Lo primero que hay que hacer es instalar el wsl y para ello abre una consola de PowerShell y escribe el siguiente comando

```bash
wsl --install
```

Después del paso anterior, hay que reiniciar el sistema operativo.

> Nota: Según leo, el siguiente comando hace lo mismo pero adicional reinicia el computador cuando termina de hacer la instalación necesaria.

> ```bash
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
> ```

Cuando el computador se haya reiniciado, se abrirá una ventana como la siguiente

![Consola terminando de instalar linux](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2z6qvlbb51gkedjebkz.png)

Después de esperar un tiempo, saldrá un mensaje en inglés, que te dirá que introduzcas el nombre de usuario para tu usuario en linux y también pedirá la contraseña. Anota muy bien tu usuario y contraseña porque lo necesitaremos más adelante.

![Consola solicitando nombre de usuario para la distribución linux](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0cz8vlxnnxgjizpoqi1.png)

![Consola solicitando contraseña y confirmación de la misma para nuestro usuario en linux](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4v8yq217z1hhimxpicfb.png)

Una vez se haya terminado con éxito, entonces llega el momento de empezar a instalar Docker CLI y estaremos ubicados en la consola de nuestra distribución linux.

![Consola linux lista para empezar a trabajar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3b48np7aawtrk95clc6b.png)

> Nota: es importante tener presente que la distribución que se instala por defecto es Ubuntu 22 al momento de escribir este tutorial.

Una vez en este punto, lo primero que hay que hacer, es actualizar los repositorios y los programas de la distribución con el siguiente comando

```bash
sudo apt update && sudo apt upgrade
```

Esta acción solicitará la contraseña que asignamos a nuestro usuario.

![Solicitud de contraseña para actualizar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fj09j3k22ma6aspay5h3.png)

> Nota: no olvide decir que si (tecla Y) para confirmar que se desea realizar la instalación de las actualizaciones.

## Agregando el repositorio oficial de Docker CLI

Cuando ya se termine de hacer las actualizaciones, entonces ejecutaremos el siguiente comando para realizar unas instalaciones necesarias previas a Docker CLI.

```bash
sudo apt -y install apt-transport-https ca-certificates curl gnupg lsb-release
```

Después ejecutaremos el siguiente comando para agregar la firma necesaria para el repositorio de Docker CLI.

```bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```

Llegó el momento de agregar el repositorio en Ubuntu de Docker CLI para su posterior instalación con el siguiente comando.

```bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

## Instalando Docker CLI

Como ahora tenemos el repositorio de Docker CLI listo, es momento de hacer la instalación requerida con el siguiente comando

```bash
sudo apt update && sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker docker-compose
```

En este punto ya tenemos Docker CLI instalado en nuestro WSL, vamos a probarlo con los siguientes comandos.

```
docker --version
docker-compose --version
```

Deberíamos tener una respuesta similar a la de la siguiente imagen.

![Comprobación de los comandos docker y docker-compose](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t3oety4mky1eimg1jwr6.png)

## Cómo hacer que Docker ejecute con el usuario normal

Ahora vamos a crear el grupo `docker` y agregamos nuestro usuario a dicho grupo para que nuestro usuario pueda ejecutar los contenedores sin necesidad de ejecutar los comandos como un `root`.

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

> Nota: cuando se intente crear el grupo docker, probablemente salga un mensaje que diga que el grupo ya existe, sí es así, no te preocupes, sigue adelante.

Ahora lo que necesitamos hacer es iniciar Docker y comprobar su correcto funcionamiento y para ello usaremos los siguientes comandos.

```bash
sudo service docker start
sudo service docker status
docker run hello-world
```

Cuando se corre el comando `sudo service docker status` se obtiene algo como la siguiente imagen.

![sudo service docker status](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8yli1dddkhjnpq6jcp3n.png)

> Para salir de esa parte, presionas la tecla Q

Cuando se usa el comando `docker run hello-world` probablemente puedes recibir un mensaje como el de la siguiente imagen.

![Error al correr el hola mundo de Docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cyi5vrk5ycg4o0l5flg.png)

No olvides correr el siguiente comando y vuelves a correr el hola mundo de Docker.

```bash
newgrp docker
```

Ahora si todo ha salido bien, deberías obtener una imagen como la siguiente al correr el hola mundo de Docker.

![Hola Mundo de Docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxx13j3efpvnj5nardkh.png)

Con todo lo que hemos realizado anteriormente, es momento de hacer que esto funciones de forma "nativa" en Windows a través de la PowerShell.

## Docker bajo la consola de PowerShell

Ahora que Docker está instalado, es momento de hacerlo funcionar en la consola de la PowerShell. En estos momentos Docker funciona muy bien pero en la consola de nuestro WSL.

Al abrir una consola de PowerShell podemos usar los siguientes comandos.

```bash
wsl docker --version
wsl docker-compose --version
```

![Ejecución de comandos docker en la PowerShell](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pivkn7fic2oqluzwwkny.png)

La idea es que podamos usar los comandos pero sin el prefijo wsl. Para hacer esto, el archivo `Microsoft.PowerShell_profile.ps1` pero para saber dónde lo creamos, deberíamos ejecutar el siguiente comando en una consola de PowerShell

```bash
echo $PROFILE
```

![Ejecucuón del comando echo $PROFILE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dmqytugybeu3abne2civ.png)

Como podrás observar en la imagen anterior, esta muestra una ruta y si verificas dicha ruta, probablemente no existirá, pues bien, debemos crear dichas carpetas y el archivo como tal. Una vez lo hayas realizado, deberías poner el siguiente texto en el archivo.

```text
Function Start-WslDocker {
    wsl docker $args
}

Function Start-WslDockerCompose {
    wsl docker-compose $args
}

Set-Alias -Name docker -Value Start-WslDocker

Set-Alias -Name docker-compose -Value Start-WslDockerCompose
```

Con lo anterior, no olvide cerrar las consolas de PowerShell y volverlas a abrir para que tomen los cambios. Y con lo anterior deberíamos poder ejecutar los siguientes comandos de Docker con total normalidad en la consola PowerShell.

```bash
docker --version
docker ps
docker-compose --version
```

![Comando de Docker en la PowerShell](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfzrupdizf8u8ug32hbk.png)

## Gestores visuales

Sí de alguna forma no le gusta gestionar Docker desde consola, sino que añora un gestor visual al mejor estilo Docker Desktop, entonces le tengo dos soluciones muy poderosas y gratuitas tanto a nivel personal como a nivel empresarial.

![Portainer CE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fbb8omwh5ddm163k1e59.png)

[Portainer CE (Comunity Edition)](https://github.com/portainer/portainer) es una plataforma web ligera de entrega de servicios para aplicaciones contenerizadas que facilita la gestión de Docker, Swarm, Kubernetes y entornos ACI. Este es un proyecto de código abierto y cuenta con el apoyo de la comunidad, ofreciendo una opción gratuita tanto para empresas como para uso personal.

![Lazydocker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gwjapn2yuv7t6agodbf9.png)

[Lazydocker](https://github.com/jesseduffield/lazydocker) es una interfaz de usuario en terminal simple tanto para docker como para docker-compose, escrita en Go con la biblioteca gocui. Su objetivo es simplificar la gestión de Docker, haciendo que sea más accesible y menos tedioso para aquellos que prefieren trabajar desde la terminal. Proporciona una visión general clara de los contenedores, imágenes y volúmenes de Docker, permitiendo a los usuarios realizar acciones comunes con solo presionar una tecla o hacer clic, lo que lo convierte en una herramienta eficiente tanto para uso personal como empresarial. Al ser un proyecto de código abierto, Lazydocker es una opción gratuita que facilita la gestión de Docker sin complicaciones, haciéndolo ideal para uso personal y empresarial.

## Conclusiones finales

Como pueden ver, Docker CLI si puede ser gestionado en Windows sin la necesidad de depender de Docker Desktop y de forma fácil y sencilla a través de la consola.

## Referencias

- [How To Install Docker Without Docker Desktop On Windows](https://www.paulsblog.dev/how-to-install-docker-without-docker-desktop-on-windows/)
- [Using Docker and Kubernetes without Docker Desktop on Windows 11](https://cuteprogramming.blog/2023/05/21/using-docker-and-kubernetes-without-docker-desktop-on-windows-11/)
- [How to run docker on Windows without Docker Desktop](https://dev.to/_nicolas_louis_/how-to-run-docker-on-windows-without-docker-desktop-hik)
- [How to install Linux on Windows with WSL](https://learn.microsoft.com/en-us/windows/wsl/install)
- [Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)
- [Install Lazydocker on Ubuntu 22.04](https://lindevs.com/install-lazydocker-on-ubuntu)
- [How to Install Portainer 2.0 on your Docker](https://www.letscloud.io/community/how-to-install-portainer)