Un Viaje Épico en Código: Instalando Docker y Docker-compose en WSL2 Ubuntu sin Naufragar en el Intento

Pablo Contreras
3 min readJun 4, 2023

Hola, hola, queridos programadores de alta mar! Bienvenidos a un nuevo post, donde te llevaré en un viaje de descubrimiento tecnológico. Nuestro destino de hoy: Docker en WSL2 y Ubuntu. Sí, amigos, vamos a instalar Docker, así que abróchate el cinturón de seguridad, que la travesía en el mar del código puede ponerse movida.

Pero antes, una pregunta crucial: ¿Por qué Docker? ¡Porque Docker es como ese superhéroe que todos necesitamos! Cuando tu código se comporta como un niño mimado, diciendo “No voy a funcionar en tu ambiente, pero en el mío sí”, Docker viene al rescate. Empaqueta tus aplicaciones en sus lindos contenedores y voilà, ¡funcionarán en cualquier lugar!

Dicho esto, vamos a pasar a la acción, ¡capitán!

1. Actualizando los paquetes: Ejecuta:

sudo apt-get update

Esto es como estirarse antes del ejercicio, prepara tu sistema para lo que viene.

2. Instalando los paquetes necesarios: Vamos a necesitar algunos ayudantes para nuestra aventura, así que instalémoslos con:

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common libssl-dev libffi-dev git wget nano

Estos son nuestros trabajadores de confianza, y garantizan que todos nuestros paquetes lleguen a buen puerto.

3. Agregando el usuario Docker: Aquí es donde le damos la bienvenida a nuestro héroe. Primero, creamos su equipo con:

sudo groupadd docker

Luego lo añadimos con:

sudo usermod -aG docker ${USER}

¡Enhorabuena, Docker! Has sido promovido a superusuario.

4. Agregando la llave de Docker y el repositorio: Es como entregar las llaves de la ciudad a nuestro héroe. Usaremos el comando curl para descargar y agregar la llave del repositorio de Docker. Después, agregamos el repositorio a la lista de apt con estos comandos:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update

5. Instalando Docker y Docker-compose: Finalmente, es hora de desatar al Kraken… ¡Digo, a Docker! Para ello, ejecutamos:

sudo apt-get install -y docker-ce containerd.io docker-compose

Pero a veces, el mar es traicionero y puede que Docker-compose no se instale correctamente. No temas, no estamos perdidos. Intentaremos otra táctica con este comando:

VERSION=$(curl -s https://github.com/docker/compose/tags | grep "compose/releases/tag" | sed -r 's|.*([0-9]+\.[0-9]+\.[0-9]+).*|\1|p' | head -n 1)
DOWNLOAD_URL="https://github.com/docker/compose/releases/download/v${VERSION}/docker-compose-$(uname -s)-$(uname -m)"
sudo curl -sSL $DOWNLOAD_URL -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

¡Eso es! Has sobrevivido a la primera parte de nuestra aventura. Permíteme felicitarte.

Pero espera, hay algunas cositas más que podríamos hacer para que este viaje sea aún más tranquilo.

Arranca Docker en el inicio: Para evitar tener que invocar a nuestro héroe cada vez que arranques, podemos hacer que Docker se ejecute automáticamente al inicio:

echo "sudo service docker start" >> ~/.profile
echo "cd /mnt/" >> ~/.profile
source ~/.profile

Y para garantizar que Docker esté siempre listo para la acción, ejecuta:

wsl.exe -u root service docker status || wsl.exe -u root service docker start

Limitar recursos: Finalmente, a veces necesitamos poner un poco de orden y limitar los recursos que Docker puede usar. Para eso:

  1. Navega a tu carpeta de usuario: C:\Users\[USER]
  2. Crea un archivo llamado .wslconfig
  3. Añade el siguiente contenido:
[wsl2]
memory = 4GB # Limita la memoria que usará
processors = 2 # Limita la cantidad de procesadores que usará

4. Guarda el archivo y reinicia el servicio LxssManager.

¡Felicitaciones, marinero! Has instalado Docker y Docker-compose en WSL2 Ubuntu. Ahora puedes navegar en las aguas de la programación con la confianza de un veterano del código. ¡Buenos vientos y buen mar!

--

--

Pablo Contreras

Desarrollador con conocimientos en JS, TS y Python. Construí soluciones para restaurantes y fintech. Aprendiendo y compartiendo en mi newsletter.