Avenue Code Snippets

Running Docker Engine on WSL 2

Written by Isaac Nunes Borges | 7/13/22 5:00 PM

Did you know that even if you work for a company, you can still legally use containers with Docker using WSL 2? Today I'll show you how.

Since Docker announced updates on its license agreement, Docker Desktop is exclusively for personal use, educational institutions, non-commercial open-source projects, and small businesses. Other companies need to acquire a license for Docker Desktop; this license update is only related to Docker Desktop and not to Docker or the Docker Engine.

However, there is an alternative on Windows to continue to legally use containers with Docker using WSL 2. 

What is Docker?

Docker is an open-source containerization platform. It enables developers to package applications into containers, which are standardized, executable components combining application source code with the operating system (OS) libraries and dependencies required to run that code in any environment.

What is WSL 2?

The Windows Subsystem for Linux lets developers run a GNU/Linux environment -- including most command-line tools, utilities, and applications -- directly on Windows, unmodified, without the overhead of a traditional virtual machine or dual boot setup.

Docker + WSL 2

In this article, I will show you how to install and configure Docker Engine directly on Linux using WSL 2 on Windows.

The first thing you have to do is make sure Docker Desktop and Docker CLI are not installed on your Windows, since later you will have to install the Docker Engine alone.

There are a couple important advantages to running Docker Engine on WSL 2, but there is also one disadvantage.

Advantages
  1. It consumes the minimum memory needed to run Docker Daemon (Docker server).
  2. It's faster than Docker Desktop because it's running directly inside the WSL 2 instance instead of on a separate Linux instance.
Disadvantage
  1. To run Docker on another WSL 2 instance, you will need to re-install Docker on this instance or configure the socket access to share Docker between instances.
Requirements
  1. Windows 10;
  2. At least 4GB of RAM memory;
  3. WSL 2; and
  4. Linux Distro: You can choose your favorite Linux distribution like Ubuntu or Debian in the Windows Store.

Note: All commands below must be executed on Linux distro shell. They will not work with “Ubuntu 22.04 LTS” distribution at this time. They do work with the following distributions:

  • Ubuntu
  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
Docker Engine Installation 
  • Uninstall old versions:
  • sudo apt remove docker docker-engine docker.io containerd runc
  • Before you install Docker, you need to run some prerequisites:
    sudo apt update && sudo apt upgrade -y
    sudo apt remove docker docker-engine docker.io containerd runc
        sudo apt-get install \
            apt-transport-https \
            ca-certificates \
           curl \
           gnupg \
           lsb-release -y
  • Add the Docker repository on the Linux source list:

    sudo mkdir -p /etc/apt/keyrings

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

    Use the following command to set up the repository:

    echo \

      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    Now let's install Docker Engine:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
  • Next, set the permission for the user to run Docker:
sudo usermod -aG docker $USER
  • And install Docker Compose:
sudo curl -L 
"https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Running Docker Engine
  • Start the service:
sudo service docker start
  • Hello World example:
docker run hello-world
  • Now start the SQL Server Docker Container:
sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=StrongPassword@123' -p 1433:1433 -d --name=sqlserver mcr.microsoft.com/mssql/server:2022-latest
Using Azure Data Studio to Connect to the SQL Server Instance

Now that our SQL Server Docker Container is up and running on port 1433, open up Azure Data Studio and use the same credentials to connect to it.

To log in, use the configuration below:

    server: 127.0.0.1,1433
    user: sa
    pass: StrongPassword@123

The SQL Server connection will look like this:

 

And the SQL Server databases will look like this:



Using NoSQLBooster to Connect to the MongoDB Instance
  • Now let's start the MongoDB Docker Container:
sudo docker run -d --name mongodb -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=user -e MONGO_INITDB_ROOT_PASSWORD=StrongPassword mongo

MongoDB Docker Container is up and running on port 27017. Open NoSQLBooster and use the connection below:

mongodb://user:StrongPassword@localhost:27017

The MongoDB connection will appear as follows:

The MongoDB databases will look like this:


Docker UI - Portainer

One of the advantages of using Docker Desktop is its visual facility for manipulating images and containers, but we can also achieve this using Portainer, an excellent tool with an open-source version, to administer and manage these resources.

  • Let's start by installing Portainer:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 -p 9443:9443 --name portainer \
        --restart=always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v portainer_data:/data \
        portainer/portainer-ce:latest   

Now that the installation is complete, you can log into your Portainer Server instance by opening a web browser and going to:

http://localhost:9000

After logging in, you can view all resources, such as images, containers, networks, and volumes in a very simple format. It will look something like this:

Conclusion

I hope you have enjoyed this tutorial on how to install the Docker Engine directly onto your preferred Linux distro using WSL 2 on Windows, as well as how to manipulate and manage all Docker resources using Portainer. Comment if you have any questions or suggestions!

 

References