How to install Docker on a Raspberry Pi?

Install Docker On A Raspberry Pi

Docker is an essential tool for building and running servers because of its extensive customizability and reproducibility. All it takes to create a backup is to copy just one YAML file which holds all the information related to the applications or containers, and you are done. The running services do not interfere with each other and automatically gets recreated if somehow stopped accidentally.

Raspberry Pi, on the other hand, is a really cool and small computer which can run alone as well as in clusters in a server environment. You can also use it to host your own applications and services such as Navidrome, qBittorrent and other applications. These applications can also run in Docker, however installing Docker on a Raspberry Pi is not as simple as running sudo apt install docker like on any other Debian based OS because the Raspberry Pi OS usually ships with the older ‘stable’ version of the application. There are also some hardware based limitations (for example, whether you have installed 32-bit or 64-bit OS on it).

In this tutorial, we will take a look at how to install Docker on a Raspberry Pi.

Installing Docker on a Raspberry Pi

Firstly, SSH to your Raspberry Pi so that we can begin the process. If you are directly using the Pi with a keyboard and monitor, then you can skip this process.

ssh <hostname>@<IP Address>
SSH Into Your Raspberry Pi
SSH Into Your Raspberry Pi

Now, refresh your package lists and update your system by running the following command:

sudo apt update && sudo apt full-upgrade
Update Your Raspberry Pi
Update Your Raspberry Pi

Finally, let’s begin installing Docker. You can do that by downloading and executing the following script by running both commands one by one:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo ./get-docker.sh
Download And Execute The Script
Download and executing the script will install Docker on the Pi

Post-installation setup

Now, we have to add non-root users to the Docker group so that they can successfully run Docker as a user. To do that, you have to run the following command in the Terminal:

sudo usermod -aG docker <username>

For example, in my case the username is aadesh, so the command looks like this:

sudo usermod -aG docker aadesh

Now, it is necessary that you log out of your system and log in again so that the docker daemon starts correctly. After logging in again, run the following command to verify that everything is working correctly:

docker version
Verifying That Docker Is Running Correctly
Verifying That Docker Is Running Correctly

Try running a simple ‘hello world’ container to verify that indeed everything is correctly installed. You can do so by running:

docker run hello-world
The Hello World Container Is Running Successfully On Your Raspberry Pi
The Hello World Container Is Running Successfully On Your Raspberry Pi

Creating a YAML configuration file

As mentioned above, docker containers can be reproduced easily with just one configuration file. And I’m going to show you how to create and configure it using a sample application (qBittorrent) and Docker Hub with the help of a YAML file. Create a docker directory and then inside it, we will store all the config files and related data:

mkdir docker
cd docker
touch docker-compose.yml

Now, open the newly created file with a text editor such as Vim or nano:

nano docker-compose.yml

Now, just paste the following lines in the file:

version: "3.9"

services:
  qbittorrent-nox:
    # for debugging
    #cap_add:
      #- SYS_PTRACE
    container_name: qbittorrent-nox
    environment:
      #- PAGID=10000
      #- PGID=1000
      #- PUID=1000
      - QBT_EULA=accept
      - QBT_VERSION=latest
      - QBT_WEBUI_PORT=8080
      #- TZ=UTC
      #- UMASK=022
    image: qbittorrentofficial/qbittorrent-nox:latest
    ports:
      # for bittorrent traffic
      - 6881:6881/tcp
      - 6881:6881/udp
      # for WebUI
      - 8080:8080/tcp
    read_only: false
    stop_grace_period: 30m
    tmpfs:
      - /tmp
    tty: true
    volumes:
      - /home/aadesh/docker/qbit/config:/config
      - /home/aadesh/samba/Downloads:/downloads

Make sure that you change the directories listed in the last two lines according to your preference. You have to write the full path of the directory in which all the configuration files and Downloads are stored on your system. Apart from that, you can alter the WEB UI port and PGID/PUID if you wish.

Once you are done, just run the following command:

docker compose up
Running This Command Will Show You ID And Password
Running This Command Will Show You ID And Password

As you can see, the Terminal is displaying a default ID and Password which we can use to log in to the Web UI. Just open a Web Browser and enter the IP address of the Raspberry Pi along with the port number like this:

<ip address>:<port>

In my case, it looks something like this:

192.168.1.2:8080
Log Into Your Account Using The Default ID And Password
Log Into Your Account Using The Default ID And Password

Once logged in, make sure to change the ID and password of this service to something which suits your convenience.

Change The User ID And Password From Settings
Change The User ID And Password From Settings

Congratulations! You now have your own locally running qBittorrent Web server. Unless you have exposed the Raspberry Pi to the open web (through IP address forwarding on your router), you don’t have to worry about any kind of attacks (unless you deliberately install a virus on your PC).

Summary

That’s about it! You can now run any application on the Raspberry Pi using docker and get started on creating your own Web Server! Just make sure to read the full documentation of the application when you are trying to add it via the YAML file to fully understand their potential.

Raspberry Pi is an excellent piece of hardware and with the Power of Linux, it can do a lot of things which any normal PC can do… and a bit more.