Docker Basic Commands

This guide covers 80% of daily Docker workflows. For advanced use cases (e.g., Docker Compose, Swarm), refer to the official Docker documentation

Jul 30, 2025

Image Management

List Images

docker images
docker images --digests
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"

Inspect an Image

docker image inspect <image>
docker history <image>

Remove Images

docker image rm <image_name_or_id>
docker image rm -f <image_name_or_id>   # Force remove

Remove Dangling (untagged) Images

docker image prune -f

Remove Unused Images (Use With Caution)

docker image prune -a

Remove All Images (Extremely Dangerous)

docker rmi -f $(docker images -q)

Building Images

Basic Build

docker build -t myapp:v1.3.17 .

Tag Multiple Versions in One Build

docker build -t myapp:latest -t myapp:${BUILD_NUMBER} .

Disable Cache (Only for Debugging)

docker build --no-cache -t myapp:latest .

Enable BuildKit (Recommended)

DOCKER_BUILDKIT=1 docker build -t myapp:latest .

Multi-Stage Build (Best Practice for Smaller Images)

  • Use a builder stage

  • Copy only compiled artifacts into a slim runtime image

  • Avoid shipping development dependencies


Container Management

List Containers

docker ps
docker ps -a
docker ps --no-trunc

Run a Container

docker run -d --name myapp -p 8080:80 myapp:latest

Common Run Flags

  • -d Run detached

  • -p host:container Port mapping

  • -e KEY=VALUE Set environment variables

  • --name Assign name

  • --restart unless-stopped Restart policy (recommended for production)

  • --mount type=volume,src=...,dst=... Recommended volume syntax

Lifecycle Commands

docker start <container>
docker stop <container>
docker restart <container>
docker rm <container>

Remove All Stopped Containers

docker container prune -f

Logging (Critical for Production Stability)

Docker’s default json-file logging driver can grow indefinitely if not configured.

Uncontrolled logs can consume disk space and crash servers.

Recommended Global Log Rotation

Edit or create:

sudo nano /etc/docker/daemon.json

Add:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}

Restart Docker:

sudo systemctl restart docker

Result:

  • Each log file max size: 50MB

  • Max files per container: 3

  • Total max log size per container: ~150MB

Note: Applies only to newly created containers.

Per-Container Log Configuration (Jenkins / docker run)

docker run -d \
  --log-driver json-file \
  --log-opt max-size=50m \
  --log-opt max-file=3 \
  myapp:latest

View Logs

docker logs <container>
docker logs -f <container>
docker logs --tail 200 <container>
docker logs --since 1h <container>

Emergency Log Cleanup (Safe)

This clears log history without affecting data:

truncate -s 0 /var/lib/docker/containers/<container-id>/*-json.log

Find Large Log Files

du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -hr | head

Volume Management (Persistent Data)

List Volumes

docker volume ls

Inspect Volume

docker volume inspect <volume>

Create Volume

docker volume create mydata

Remove Unused Volumes (Dangerous)

docker volume prune -f

Only run if you are certain volumes are not needed.


Network Management

List Networks

docker network ls

Inspect Network

docker network inspect <network>

Connect Container to Network

docker network connect <network> <container>

Monitoring and Debugging

Real-Time Resource Usage

docker stats

Inspect Container

docker inspect <container>

Access Running Container

docker exec -it <container> /bin/bash

Disk Usage & overlay2 Management

Check Docker Disk Usage

docker system df
docker system df -v

Check overlay2 Size

du -sh /var/lib/docker/overlay2
du -h --max-depth=1 /var/lib/docker/overlay2 | sort -hr | head

Check Container Log Usage

du -sh /var/lib/docker/containers/*

Safe Cleanup Strategy (Production-Friendly)

Remove Build Cache

Remove Dangling Images

docker image prune -f

Remove Unused Containers

docker container prune -f

Remove Everything Unused (High Risk)

docker system prune -a

Production Hardening Recommendations

  1. Always enable log rotation.

  2. Avoid using --no-cache in CI unless debugging.

  3. Use multi-stage builds.

  4. Use unique version tags for rollback capability.

  5. Monitor disk usage regularly.

  6. Avoid docker system prune -a in production without verification.

  7. Use restart policies for critical services.

  8. Separate persistent data using volumes.

  9. Monitor container logs for abnormal growth.

  10. Audit overlay2 usage periodically.

Back to shorts
© 2026 Nima Janbaz - All Rights Reserved
<_NimaJanbaz />