Hero Image

Install Docker on Debian 12

Install Docker on Debian 12

Step 1 – Install Docker Engine

# Add Docker's GPG key and repository
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | \
    gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(. /etc/os-release && echo "$ID") $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
    tee /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

Step 2 – Add your user to the docker group

usermod -aG docker $USER
# Log out and back in for the change to take effect
newgrp docker

Step 3 – Verify

docker --version
docker run --rm hello-world

Step 4 – docker compose (V2 plugin)

docker compose version

Step 5 – Example: run Nginx in a container

docker run -d --name nginx \
    -p 80:80 \
    -v /var/www/html:/usr/share/nginx/html:ro \
    nginx:alpine

Step 6 – Example compose.yml

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: appdb
      MYSQL_USER: appuser
      MYSQL_PASSWORD: apppass
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:
docker compose up -d