← 返回画廊

Docker 常用命令速查

1. 镜像(Image)操作

基础命令

命令作用例子
docker pull从仓库拉取镜像docker pull nginx:latest
docker images列出本地镜像docker images / docker images --no-trunc
docker search搜索镜像(官方仓库)docker search nginx
docker build从 Dockerfile 构建镜像docker build -t myapp:1.0 .
docker tag给镜像打标签docker tag myapp:1.0 myrepo/myapp:1.0
docker rmi删除镜像docker rmi myapp:1.0 / docker rmi -f $(docker images -q)
docker inspect查看镜像详细信息docker inspect nginx:latest
docker save导出镜像为 tar 文件docker save -o nginx.tar nginx:latest
docker load从 tar 文件导入镜像docker load -i nginx.tar

build 常用参数

docker build \
  -t myapp:1.0 \              # 镜像名:标签
  -f Dockerfile.prod \        # 指定 Dockerfile 路径(默认 ./Dockerfile)
  --build-arg VERSION=1.0 \   # 传递构建参数(对应 ARG 指令)
  --no-cache \                # 跳过缓存,全量重新构建
  .                           # 构建上下文(通常是当前目录)

Dockerfile 关键指令

指令作用与区别注意
FROM基础镜像(第一行)不能省略。如 FROM ubuntu:20.04FROM scratch(空镜像)
WORKDIR设置容器工作目录不存在时自动创建。RUN/CMD 等指令在此目录执行。多次写会累加路径
RUN执行 shell 命令(构建时)每条 RUN 产生新的镜像层。合并多条命令减少层数:RUN apt-get update && apt-get install -y xxx
COPY复制本地文件/目录到镜像比 ADD 更明确,优先用。路径相对于构建上下文
ADD复制文件,支持远程 URL 和自动解压 tar一般不用(除非需要自动解压)。远程 URL 应用 RUN wget 代替
ENV设置环境变量ENV KEY=valueENV KEY1=val1 KEY2=val2。容器内可用,构建时后续行也可用
ARG构建参数(仅构建时可用)ARG VERSION=1.0docker build --build-arg VERSION=2.0 覆盖。容器内不可用
CMD容器默认启动命令仅最后一条生效。可被 docker run 的命令行覆盖。推荐 JSON 数组形式:CMD ["python", "app.py"]
ENTRYPOINT容器启动入口点不易被覆盖(需 --entrypoint 强制)。与 CMD 搭配:ENTRYPOINT 是主程序,CMD 是默认参数
EXPOSE声明容器监听端口仅文档作用,不做端口映射。映射还需 docker run -p
VOLUME声明数据卷挂载点VOLUME ["/data"]。仅标记用,真正挂载需 docker run -v
USER指定运行用户默认 root。安全起见,非 root 用户应存在:RUN useradd -m appuser && USER appuser
LABEL添加元数据标签LABEL version="1.0" maintainer="xxx@example.com"docker inspect 可查

常见坑


2. 容器(Container)操作

基础命令

命令作用例子
docker run创建并启动容器docker run -d -p 8080:80 nginx
docker ps列出运行中的容器docker ps / docker ps -a(全部)
docker logs查看容器日志docker logs myapp / docker logs -f myapp(跟踪)
docker exec在运行中容器执行命令docker exec -it myapp bash
docker stop优雅停止容器docker stop myapp
docker start启动已停止的容器docker start myapp
docker restart重启容器docker restart myapp
docker rm删除容器docker rm myapp / docker rm -f myapp(强制)
docker inspect查看容器详细信息docker inspect myapp
docker stats实时查看容器资源占用docker stats myapp / docker stats --no-stream(单次)
docker top查看容器内运行的进程docker top myapp
docker cp在主机与容器间复制文件docker cp myapp:/data/file.txt ./ / docker cp ./file.txt myapp:/data/
docker diff查看容器文件系统变化docker diff myapp

docker run 常用参数详解

docker run \
  -d \                                    # detach,后台运行
  --name myapp \                          # 容器名称
  -p 8080:80 \                            # 端口映射:主机:容器(-p 8080:80/udp 指定协议)
  -v /host/data:/container/data \        # 数据卷挂载:绑定挂载(bind mount)
  -v named-volume:/data \                 # 使用命名卷
  -e ENV_VAR=value \                      # 环境变量
  -e ENV_FROM_FILE \                      # 从 --env-file 读取
  --rm \                                  # 容器停止后自动删除
  --network mynet \                       # 指定网络
  -w /app \                               # 工作目录(覆盖 WORKDIR)
  --restart=always \                      # 重启策略(no/always/unless-stopped/on-failure:3)
  -u appuser \                            # 运行用户(覆盖 USER)
  --privileged \                          # 以特权模式运行(危险!给容器完整宿主权限)
  --cap-add=NET_ADMIN \                   # 添加特定 Linux 能力
  -m 512m \                               # 内存限制
  --cpus=1 \                              # CPU 数限制
  --memory-swap=1g \                      # 内存+交换区限制
  nginx:latest                            # 镜像:标签

logs 常用参数

docker logs \
  -f \                    # follow,持续输出
  -n 100 \                # 显示最后 N 行
  --tail=50 \             # 等价于 -n 50
  --timestamps \          # 显示时间戳
  --since 2024-01-01 \    # 显示时间戳之后的日志
  --until 2024-01-02 \    # 显示时间戳之前的日志
  myapp

exec 常用

docker exec -it myapp bash              # 进入容器交互式 bash
docker exec -u root myapp whoami        # 以 root 用户执行
docker exec myapp ps aux                # 查看容器内进程(不交互)

3. 数据卷与网络

数据卷(Volume)

类型命令区别与应用
绑定挂载 (bind mount)docker run -v /host/path:/container/path myapp直接挂载宿主目录。同步双向,修改立即可见。用于开发阶段代码热更新
命名卷 (named volume)docker volume create mydata <br> docker run -v mydata:/data myappDocker 管理的卷。数据存储位置由 Docker 控制(/var/lib/docker/volumes/)。生产推荐
匿名卷docker run -v /data myapp不指定名称。Docker 自动生成 UUID 作卷名。难以管理,不推荐

卷操作命令

docker volume create mydata                    # 创建命名卷
docker volume ls                               # 列出所有卷
docker volume inspect mydata                   # 查看卷详细信息(路径等)
docker volume prune                            # 删除未被使用的卷
docker volume rm mydata                        # 删除指定卷
docker run -v mydata:/data --mount type=volume,source=mydata,target=/data myapp  # --mount 方式

网络(Network)

docker network create mynet                    # 创建自定义网络(bridge 类型)
docker network ls                              # 列出所有网络
docker network inspect mynet                   # 查看网络详情(关联容器等)
docker network connect mynet container1        # 容器连接网络(容器运行中)
docker network disconnect mynet container1     # 容器断开网络
docker network prune                           # 删除未被使用的网络
docker network rm mynet                        # 删除指定网络

# 启动容器加入网络
docker run -d --name app --network mynet nginx

网络模式

模式用途命令
bridge(默认)容器间通过网络通信docker run -d nginx(自动 bridge)
host容器共享宿主网络栈,性能最好docker run --network host nginx
none容器无网络docker run --network none nginx
container容器共享另一容器网络docker run --network container:web nginx

自定义 bridge 网络的好处:容器间可用容器名 DNS 解析(而默认 bridge 网络不行),简化跨容器通信。


4. 镜像与容器清理

操作命令说明
删除未使用容器docker container prune删除所有停止的容器。加 -f 跳过确认
删除未使用镜像docker image prune删除未被容器引用的镜像。-a 删除所有不用镜像
删除未使用卷docker volume prune删除未被挂载的卷。注意数据丢失!
删除未使用网络docker network prune删除未被使用的网络
一键清理(谨慎)docker system prune清理容器、镜像、卷、网络。-a 更激进。确保不需要数据后再用!
查看磁盘占用docker system df列出各组件占用空间

磁盘占用排查

# 查看磁盘占用概览
docker system df

# 查看各镜像大小
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# 查看各容器大小(包括日志)
docker ps -a --format "table {{.Names}}\t{{.Size}}"

# 查看具体卷占用
du -sh /var/lib/docker/volumes/*/

# 清理容器日志(容器运行中)
docker exec myapp bash -c "truncate -s 0 /var/log/app.log"
# 或直接清理宿主日志文件
truncate -s 0 /var/lib/docker/containers/容器ID/容器ID-json.log

5. Docker Compose

常用子命令

命令作用例子
docker compose up启动所有服务docker compose up -d / docker compose up --build
docker compose down停止并删除服务docker compose down / docker compose down -v(删卷)
docker compose ps列出 compose 管理的容器docker compose ps
docker compose logs查看服务日志docker compose logs -f web
docker compose exec在服务容器执行命令docker compose exec web bash
docker compose build构建镜像(不启动)docker compose build / docker compose build --no-cache
docker compose pull拉取镜像docker compose pull
docker compose restart重启服务docker compose restart web
docker compose stop停止服务(不删)docker compose stop web
docker compose start启动已停止服务docker compose start web

compose 文件关键字段

version: '3.9'

services:
  web:
    image: nginx:latest                         # 使用现有镜像
    # build: .                                  # 或从 Dockerfile 构建
    # build:
    #   context: .
    #   dockerfile: Dockerfile.prod
    #   args:
    #     VERSION: 1.0
    
    container_name: my-web                      # 容器名
    ports:
      - "8080:80"                               # 端口映射
      - "443:443/tcp"
    
    volumes:
      - ./data:/app/data                        # 绑定挂载
      - app-data:/data                          # 命名卷
    
    environment:                                # 环境变量
      - DATABASE_URL=postgres://db:5432/mydb
      - DEBUG=true
    # env_file: .env                            # 或从文件读取
    
    networks:
      - backend                                 # 自定义网络
    
    depends_on:
      - db                                      # 服务依赖
    
    restart: always                             # 重启策略
    
    healthcheck:                                # 健康检查
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 10s
      timeout: 3s
      retries: 3
      start_period: 40s
    
    command: python app.py                      # 覆盖 CMD
    working_dir: /app                           # 工作目录
    user: appuser                               # 运行用户
    
    # 资源限制
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend

# 定义命名卷
volumes:
  app-data:
  db-data:

# 定义网络
networks:
  backend:
    driver: bridge

常用模式

# 后台启动并查看日志
docker compose up -d && docker compose logs -f

# 完整重建(包括卷)
docker compose down -v && docker compose up -d --build

# 查看服务配置(合并后的)
docker compose config

# 验证 compose 文件格式
docker compose config --quiet

# 进入服务容器
docker compose exec web bash

# 一次性运行命令(不启动服务)
docker compose run --rm web python manage.py migrate

6. 排查与高频组合命令

快速诊断套路

# 1. 容器启动失败?查日志
docker logs myapp
docker logs myapp --tail 50 --timestamps

# 2. 进去容器看看
docker exec -it myapp bash
# 在容器内执行:ps aux, netstat -tlnp, env

# 3. 检查网络连通性
docker exec myapp curl http://service:8080/health
docker exec myapp ping db

# 4. 检查资源占用
docker stats myapp

# 5. 查看容器所有配置
docker inspect myapp | jq .

# 6. 看镜像的分层
docker history myapp:1.0

常用组合

# 构建 + 启动 + 查看日志
docker build -t myapp . && docker run -d --name myapp myapp && docker logs -f myapp

# 清理所有停止容器并查看磁盘占用
docker container prune -f && docker system df

# 修改配置后重启
docker compose down && docker compose up -d --build

# 导出容器为镜像(容器改动打包)
docker commit myapp myapp:backup

# 查找特定镜像的所有容器
docker ps -a --filter ancestor=nginx

# 批量删除镜像(危险!)
docker rmi $(docker images -q nginx)

# 实时监控多个容器日志
docker logs -f myapp1 myapp2 myapp3

# 进容器改文件后,验证改动后查看差异
docker exec myapp cat /config.json
docker diff myapp

性能排查

# 容器内可用资源(宿主总资源)
docker run alpine free -h

# 查看容器实际使用
docker stats --no-stream

# 查看容器内存峰值(需在容器停止后)
docker inspect myapp | grep -A 5 Memory

# 查看容器初始化时间
docker events --filter container=myapp --since 10m

# 检查日志大小(单个容器日志可能很大)
du -h /var/lib/docker/containers/容器ID/

网络排查

# 检查容器能否解析 DNS
docker exec myapp nslookup db

# 测试容器间连通
docker exec web curl http://db:5432

# 查看容器网络配置
docker inspect myapp --format='{{.NetworkSettings.Networks}}'

# 进入 bridge 网络的 container namespace(调试用)
docker run -it --network container:myapp nicolaka/netshoot sh

# 查看宿主网桥
ip link show | grep docker

7. 速查表(最常用的 10 条)

# 拉镜像
docker pull nginx

# 启动容器
docker run -d -p 8080:80 --name web nginx

# 查看日志
docker logs -f web

# 进入容器
docker exec -it web bash

# 列出容器
docker ps -a

# 构建镜像
docker build -t myapp:1.0 .

# 启动 compose
docker compose up -d

# 查看资源占用
docker stats

# 清理垃圾
docker system prune -a

# 导出镜像
docker save -o app.tar myapp:1.0 && docker load -i app.tar

更新日期:2026-07-11 用途:快速查阅,配合官方文档深化理解。命令参数持续变化,遇到新版本时以 docker <command> --help 为准。