Docker

Determining and Clearing Container Disk Usage in Overlay2

Show disk usage using docker df:

docker system df

Should output similar to below:

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              23                  22                  11.15GB             799.2MB (7%)

Containers          28                  27                  2.751GB             0B (0%)

Local Volumes       19                  19                  477.2MB             0B (0%)

Build Cache         0                   0                   0B                  0B

Show disk usage using du:

du -shc /var/lib/docker/overlay2/*/diff | grep total

should output similar to below:

15G     total

Show disk usage using du:

du -h /var/lib/docker | sort -h

Script to clear overlay2 storage and volumes :

#!/bin/bash

# remove exited containers:
docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v
    
# remove unused images:
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi

# remove unused volumes:
find '/var/lib/docker/volumes/' -mindepth 1 -maxdepth 1 -type d | grep -vFf <(
  docker ps -aq | xargs docker inspect | jq -r '.[] | .Mounts | .[] | .Name | select(.)'
) | xargs -r rm -fr

Docker Logs can also take up a significant amount of space. Logs are located under /var/lib/docker/containers/<container-id>/<container-id-json.log.

Logs can be set to maximum size and number by setting the following in docker-compose.yml:

services:
  my-app:
    image: my-app:latest
    container_name: mycontainer
    logging:
      options:
        max-size: 10m
....

Additionally, you can setup logging driver default options at the daemon level as described in the URL below:

https://docs.docker.com/config/containers/logging/configure/#configure-the-default-logging-driver

Display live container resource usage

Run the following command to view CPU and memory usage of all your containers in real-time:

docker stats --all --format "table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

 

Install Docker and Docker Compose

Install Docker Engine and Compose

Run these in a shell on your Ubuntu 24.04 box:

# 1) Prereqs and keyring directory
sudo apt update
sudo apt install -y ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

# 2) Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3) Add Docker’s apt repo (stable channel)
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4) Update package index
sudo apt update

# 5) Install Docker Engine + CLI + containerd + Buildx + Compose plugin
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Enable and test Docker

# Start and enable Docker service
sudo systemctl enable --now docker

# Optional: run Docker without sudo by adding your user to docker group
sudo usermod -aG docker $USER
# Then log out and back in, or:
newgrp docker

# Verify Docker
docker version

# Verify the Compose plugin (note: space, not hyphen)
docker compose version

Optional: legacy docker-compose binary

If you explicitly need the old standalone docker-compose binary (for older scripts/CI), you can add it alongside the plugin:

sudo curl -L \
  "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose version