🇨🇳 中文

Docker Commands Cheat Sheet: Images, Containers, Networks, and Volumes

A practical Docker command reference covering image management, container lifecycle, port mapping, volume mounting, and ready-to-use run commands for MySQL, Nginx, Redis, MongoDB, Prometheus, and Grafana.

Bruce

Docker命令行容器运维速查手册

Docker

785  Words

2019-11-14


A quick-reference guide to the Docker commands you will use most often in daily development and operations work.

1. Docker Service Management

# Start Docker
service docker start

# Stop Docker
service docker stop

# Restart Docker
service docker restart

2. Image Management

Pulling Images

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

# Example
docker pull ubuntu:22.04

Listing Images

# List all images
docker images
docker image ls

# Show image digests
docker images --digests

# List specific images
docker image ls redis

# Check disk usage (images, containers, volumes)
docker system df

# List dangling images (untagged)
docker image ls -f dangling=true

# Remove dangling images
docker image prune

Removing Images

# Remove by full ID
docker image rm 578c3e61a98c

# Remove by short ID
docker image rm 578c3

# Remove by name
docker image rm redis

# Remove all images
docker image rm $(docker image ls -q)

# Remove all redis images
docker image rm $(docker image ls -q redis)

# Remove all dangling images
docker rmi $(docker images -q -f dangling=true)

Cleanup Shortcuts

# Stop all exited containers
docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker stop

# Remove all exited containers
docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker rm

# Remove all <none> images
docker images | grep none | awk '{print $3}' | xargs docker rmi

3. Container Management

Creating Containers

Run in background (detached mode):

docker run --name mynginx -d nginx:latest
  • --name assigns a container name
  • -d runs in the background

With random port mapping:

docker run -P -d nginx:latest
  • -P maps all exposed ports to random host ports

With specific port and volume mapping:

docker run -p 80:80 -v /data:/data -d nginx:latest
  • -p host:container maps a specific port
  • -v host_path:container_path mounts a host directory (must be absolute path)

Bind to a specific IP:

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

Interactive mode:

docker run -it nginx:latest /bin/bash
  • -i keeps stdin open
  • -t allocates a pseudo-TTY

Common Container Commands

# List all containers (including stopped)
docker ps -a

# List running containers
docker ps

# Start a stopped container
docker start <container>

# Stop a running container
docker stop <container>

# Kill all running containers
docker kill $(docker ps -a -q)

# Restart a container
docker restart <container>

# Remove a stopped container
docker rm <container>

# Remove all stopped containers
docker rm $(docker ps -a -q)

Copying Files

# Copy from host to container
docker cp /www/myfiles test-container:/www/

# Copy from container to host
docker cp test-container:/www/myfiles /local/path/

Finding Container IP

# Method 1: Enter the container and check /etc/hosts
docker exec -it <container> cat /etc/hosts

# Method 2: Use docker inspect
docker inspect <container>

Common Docker Run Examples

1. Grafana

# Download the default config template first
wget https://raw.githubusercontent.com/grafana/grafana/master/conf/defaults.ini
# Rename to grafana.ini and customize

docker run -d --name=grafana \
  -p 3000:3000 \
  -v /usr/local/programs/grafana/data:/var/lib/grafana \
  -v /usr/local/programs/grafana/log:/var/log/grafana \
  -v /usr/local/programs/grafana/conf/grafana.ini:/etc/grafana/grafana.ini \
  -e "GF_SERVER_ROOT_URL=http://your-server:3000" \
  -e "GF_SECURITY_ADMIN_PASSWORD=your-password" \
  grafana/grafana

2. Portainer

docker run -d -p 9000:9000 \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --name portainer \
  portainer/portainer-ce

3. Prometheus

# Download default config
wget https://raw.githubusercontent.com/prometheus/prometheus/master/documentation/examples/prometheus.yml

# Basic setup
docker run -d --name=prometheus \
  -p 9090:9090 \
  -v /usr/local/programs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v /usr/local/programs/prometheus/data:/prometheus \
  prom/prometheus

# With alerting rules
docker run -d --name=prometheus \
  -p 9090:9090 \
  -v /usr/local/programs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v /usr/local/programs/prometheus/alert.rules:/etc/prometheus/alert.rules \
  -v /usr/local/programs/prometheus/data:/prometheus \
  prom/prometheus

# Alertmanager
docker run -d --name=alertmanager \
  -p 9093:9093 \
  -v /usr/local/programs/prometheus/alertmanager/config.yml:/etc/alertmanager/config.yml \
  prom/alertmanager

4. MySQL

# MySQL 5.7
docker run -d \
  -p 3306:3306 \
  --name mysql \
  -v /usr/local/programs/mysql/conf:/etc/mysql/conf.d \
  -v /usr/local/programs/mysql/logs:/logs \
  -v /usr/local/programs/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=your-password \
  mysql:5.7

Key flags explained:

  • -p 3306:3306 — Maps MySQL port to the host
  • -v .../data:/var/lib/mysql — Persists database files on the host
  • -e MYSQL_ROOT_PASSWORD — Sets the root password on first run

5. Nginx

docker run -d -p 80:80 --name nginx \
  -v /var/www/html:/usr/share/nginx/html \
  -v /usr/local/programs/nginx/conf.d:/etc/nginx/conf.d \
  -v /usr/local/programs/nginx/log:/var/log/nginx \
  nginx:latest

6. MongoDB

# Linux
docker run -d \
  --name mongodb \
  -p 27017:27017 \
  -v /usr/local/programs/mongodb:/data/db \
  mongo:latest

# Windows (use named volume to avoid permission issues)
docker volume create --name=mongodata
docker run -d --name mongodb -p 27017:27017 -v mongodata:/data/db mongo:latest

Volume management commands:

# List all volumes
docker volume ls

# Inspect a volume
docker volume inspect <volume_name>

7. Redis

docker run --name redis -d \
  -p 6379:6379 \
  -v redis-data:/data \
  redis:latest

8. PHP-FPM

docker run -d -p 9000:9000 --name php-fpm \
  -v /var/www/html:/var/www/html \
  -v /usr/local/programs/php/conf:/usr/local/etc/php \
  php:8.2-fpm

Comments

Join the discussion — requires a GitHub account