Post

Docker

Docker installation various depends upon the distribution you use check docker manual

Docker Engine is an open-source containerization technology for building and containerizing your applications. Docker Engine acts as a client-server application with:

  • A server with a long-running daemon process dockerd
  • APIs that specify interfaces that programs can use to talk to and instruct the Docker daemon
  • A command line interface (CLI) client docker

This guide covers installing Docker Engine on Debian 11, 12, and 13 from the official repository, enabling the TCP port for external connections, and managing Docker as a non-root user.

Before installing, uninstall any conflicting packages distributed by Debian itself:

1
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

Debian 11 (Bullseye)

Add Docker Repository

1
2
3
4
5
6
7
8
9
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/debian bullseye stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Install Docker Engine

1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Start and Verify

1
2
3
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world

Debian 12 (Bookworm)

Add Docker Repository

1
2
3
4
5
6
7
8
9
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/debian bookworm stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Install Docker Engine

1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Start and Verify

1
2
3
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world

Debian 13 (Trixie)

Add Docker Repository

1
2
3
4
5
6
7
8
9
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/debian trixie stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Install Docker Engine

1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Start and Verify

1
2
3
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world

NOTE If you want to keep all libraries in your home directory, create a symlink before installing:

1
mkdir /home/.docker/ && ln -s /home/.docker/ /var/lib/docker

Enable TCP Port 2375

Expose the Docker daemon over TCP for remote API access.

Locate the docker service file

1
systemctl status docker

Look for Loaded: — for example /lib/systemd/system/docker.service.

Edit the ExecStart line

1
sudo nano /lib/systemd/system/docker.service

Change ExecStart to:

1
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock

Apply changes

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

Verify TCP listener

1
ss -lntp | grep 2375

Expected output:

1
LISTEN 0      4096               *:2375             *:*    users:(("dockerd",pid=1451697,fd=3))

WARNING Exposing Docker on 0.0.0.0:2375 without TLS is insecure. Use only on trusted networks.

Manage Docker as a Non-Root User

WARNING The docker group grants root-level privileges to the user. For details, refer to Docker Daemon Attack Surface.

1
2
3
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Log out and back in for group membership to take effect. A reboot may be necessary.

Verify:

1
docker run hello-world

Best Practices

  • Use official repositories instead of convenience scripts
  • Limit TCP access to trusted networks or use TLS
  • Keep Docker Engine updated regularly
  • Store Docker-related configs in Git
  • Use docker compose for multi-container apps

References

This post is licensed under CC BY 4.0 by the author.