【Docker】容器与镜像全生命周期常用命令速查大全

admin / Docker / 已更新 2026-09-22 / 2838 字 · 约 17 分钟 / 3289 次阅读 /

在现代云原生与微服务架构中,Docker 已经成为应用打包、交付与标准化运行的工业级基石。熟练掌握 Docker 命令行工具链,不仅能够显著提升本地开发调试效率,更是日常生产环境排障与容器运维的必备基本功。

本文将 Docker 核心命令按照容器生命周期、运维排查、文件快照、镜像构建、离线归档与系统清理六大维度进行结构化梳理,提供详尽的参数解析、生产示例与经典避坑对比。


一、Docker 核心架构与常用命令速查表

现代 Docker CLI 推行基于对象的管理命令(Management Commands,如 docker container rundocker image ls),同时也完全向前兼容传统扁平命令(如 docker rundocker ps)。

核心操作命令速查矩阵

场景分类 传统命令 现代管理命令 核心功能简述
创建并运行 docker run docker container run 创建并以后台/交互模式启动容器
查看容器 docker ps docker container ls 列出运行中/全部容器
进入容器 docker exec docker container exec 在运行容器中执行命令/打开 Shell 终端
查看日志 docker logs docker container logs 实时跟踪或截取容器标准输出日志
停止/启动 docker stop / start docker container stop / start 优雅停止或重新拉起容器
删除容器 docker rm docker container rm 删除已停止的容器(-f 强制删除)
本地镜像 docker images docker image ls 列出本地拉取或构建的镜像
构建镜像 docker build docker image build 根据 Dockerfile 构建容器镜像
镜像归档 docker save / load docker image save / load 完整镜像层保存为 tar 包与恢复(带历史)
容器快照 docker export / import docker container export 容器文件系统扁平导出与导入(丢弃历史)
磁盘清理 docker system prune docker system prune -a 清理孤立镜像、停止容器与无主数据卷

二、容器生命周期管理 (Lifecycle)

容器的本质是宿主机上的一个受隔离的独立进程,其状态涵盖:created(已创建)、running(运行中)、paused(暂停)、restarting(重启中)、exited(停止)与 dead(死亡)。

1. docker run:创建并启动新容器

# 1. 后台守护进程模式启动 Nginx,映射 80 端口,挂载数据目录并命名
docker run -d \
  --name mynginx \
  -p 80:80 \
  -v /opt/data:/data:ro \
  --restart=always \
  nginx:latest

# 2. 交互式模式启动 Ubuntu 容器并进入 bash 终端 (退出后容器自动销毁)
docker run -it --rm ubuntu:22.04 /bin/bash

# 3. 限制容器内存与 CPU 使用配额 (防止资源耗尽打死宿主机)
docker run -d \
  --name app_service \
  -m 512m \
  --cpus 1.5 \
  my-service:v1.0

2. docker start / stop / restart:状态启停

# 启动已被停止的容器
docker start mynginx

# 优雅停止运行中的容器 (默认发送 SIGTERM 信号,超时 10s 后发送 SIGKILL)
docker stop -t 15 mynginx

# 重启容器
docker restart mynginx

3. docker kill:强制终止容器

不同于 stop 的优雅等待,kill 直接向容器主进程发送系统信号:

# 强制终止容器 (默认发送 SIGKILL)
docker kill mynginx

# 向容器发送特定系统信号 (如平滑重载配置 SIGHUP)
docker kill -s HUP mynginx

4. docker rm:删除容器

# 1. 删除已停止的容器
docker rm mynginx

# 2. 强制删除运行中的容器并清理关联的匿名 Volume
docker rm -f -v mynginx

# 3. 批量删除所有处于退出 (exited) 状态的孤立容器
docker rm $(docker ps -a -q -f status=exited)

5. docker pause / unpause:暂停与恢复

利用 Linux Cgroups Freezers 机制挂起容器中所有进程,完全释放 CPU 占用但不释放内存:

# 暂停运行中的数据库容器
docker pause db01

# 恢复容器进程
docker unpause db01

三、容器日常运维与排查 (Operations)

1. docker ps:列出容器状态

# 1. 列出当前正在运行的容器
docker ps

# 2. 列出全量容器 (包含已停止退出的容器)
docker ps -a

# 3. 仅输出容器 ID (常用于批量管道组合)
docker ps -q

# 4. 高级格式化输出:只打印容器名、镜像与运行状态
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"

2. docker exec:进入容器或执行命令

在已有容器内部运行额外调试进程(排障最常用工具):

# 1. 打开交互式 bash 终端进入容器内部
docker exec -it mynginx /bin/bash

# 2. 以 root 身份免密进入容器调试
docker exec -it -u 0 mynginx /bin/sh

# 3. 免交互直接获取容器内的特定输出
docker exec mynginx cat /etc/nginx/nginx.conf

[!WARNING] 切记避坑:绝不要使用已淘汰的 docker attach 进入生产容器!docker attach 会直接挂接到容器的 PID 1 主进程上,按下 Ctrl+C 会直接将容器主进程杀死导致服务瘫痪;而 docker exec 会开启全新的独立调试进程,退出时对容器主程序毫无影响。


3. docker logs:捕获容器日志

# 1. 实时跟踪滚动输出容器日志 (等同于 tail -f)
docker logs -f mynginx

# 2. 查看最新 100 条日志,并附带纳秒级标准时间戳
docker logs -f --tail 100 -t mynginx

# 3. 筛选指定时间之后的日志
docker logs --since "2026-03-01T12:00:00" mynginx

4. docker inspect:深度提取元数据

以 JSON 格式输出容器或镜像的完整底层配置,结合 --format Go 模板可实现精细化提取:

# 1. 快速提取指定容器的内网 IP 地址
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx

# 2. 查看容器的存储卷挂载映射详情
docker inspect --format '{{json .Mounts}}' mynginx | jq .

# 3. 查看容器真实的重启策略与健康检查状态
docker inspect --format '{{.State.Health.Status}}' mynginx

5. docker statsdocker top:资源消耗监控

# 1. 实时动态展示所有运行容器的 CPU、内存占用、网络 IO 与磁盘读写
docker stats

# 2. 查看指定容器在宿主机操作系统层面的进程清单
docker top mynginx

四、容器文件系统与镜像快照 (Filesystem)

1. docker cp:主机与容器双向文件拷贝

# 1. 从宿主机拷贝配置文件到容器指定目录
docker cp ./nginx.conf mynginx:/etc/nginx/nginx.conf

# 2. 从容器内部拷贝日志文件到宿主机当前目录
docker cp mynginx:/var/log/nginx/access.log ./access.log

2. docker diff:查看容器文件系统改动

对比容器当前文件系统与基础镜像的差异(A 新增、C 改变、D 删除):

docker diff mynginx

3. docker commit:由容器直接固化为镜像

# 将临时修改后的容器固化为一个新标签镜像 (建议带上提交信息)
docker commit -a "admin" -m "fix security vulnerability" mynginx mynginx:v1.1

五、镜像构建与远程仓库操作 (Registry)

1. docker build:基于 Dockerfile 编译镜像

# 1. 使用当前目录下的 Dockerfile 构建镜像,并赋予版本标签
docker build -t myapp:v1.0.0 .

# 2. 指定特定的 Dockerfile 路径与构建参数,禁用构建缓存
docker build -f ./docker/Dockerfile.prod \
  --build-arg ENV=production \
  --no-cache \
  -t myapp:prod .

2. docker login / push / pull:仓库交互

# 1. 登录私有 Harbor 仓库
docker login registry.x7lab.cn -u admin -p mypassword

# 2. 为镜像打上私有仓库规范 Tag
docker tag myapp:v1.0.0 registry.x7lab.cn/library/myapp:v1.0.0

# 3. 推送镜像至私有镜像仓库
docker push registry.x7lab.cn/library/myapp:v1.0.0

# 4. 从远程仓库拉取指定镜像
docker pull registry.x7lab.cn/library/myapp:v1.0.0

六、本地镜像维护与离线归档 (Images)

1. 核心机制辨析:save/load vs export/import

在进行容器镜像离线迁移或跨内网环境传输时,很多工程师容易混淆这两对命令:

对比维度 docker save & load docker export & import
操作对象 Docker 镜像 (Image) 运行中的容器 (Container)
层级历史 完整保留所有 Layer 镜像层与提交历史 丢弃所有历史,完全扁平化(Flatten)为单层
元数据与配置 完整保留 CMD、ENTRYPOINT、ENV 等元数据 丢弃镜像原始元数据(导入时需手动指定 CMD)
适用场景 离线环境分发生产镜像、版本留存 导出特定业务容器的数据快照、极简轻量迁移
# 【推荐】镜像完整归档方案 (save / load)
# 导出镜像至离线 tar 包
docker save -o nginx_latest.tar nginx:latest
# 在离线主机恢复镜像
docker load -i nginx_latest.tar

# 【快照】容器扁平快照方案 (export / import)
# 导出容器当前状态
docker export -o mynginx_snapshot.tar mynginx
# 导入为新镜像 (需通过 -c 补回入口命令)
docker import -c 'CMD ["nginx", "-g", "daemon off;"]' mynginx_snapshot.tar mynginx:imported

七、生产环境资源清理与最佳实践 (Maintenance)

长期运行的 Docker 宿主机极易产生大量无用的虚悬镜像(Dangling Images)、已退出的孤儿容器以及未引用的持久化存储卷,导致磁盘空间爆满。

# 1. 查看 Docker 占用的全局磁盘空间分布 (镜像、容器、卷、构建缓存)
docker system df

# 2. 安全清理虚悬镜像、已停止容器与未使用的网络 (最常用安全清理)
docker system prune

# 3. 强力彻底大扫除 (慎用:清理所有无容器引用的镜像与孤立 Volume)
docker system prune -a --volumes -f

[!TIP] 生产规范三原则: 1. 严禁裸 run:生产容器启动必须显式声明 --name--restart=always/unless-stopped 以及内存限制 -m; 2. 排障首选 exec:避免使用 attach,永远使用 docker exec -it <id> /bin/bash 安全介入; 3. 定期空间健康度巡检:配置定时任务运行 docker system df,并在可用磁盘低于 20% 时自动预警。

admin

admin

云原生架构 · 全栈开发

感谢阅读本文!记录系统架构思考与实战复盘。专注于 Python、Django、PostgreSQL 与云原生容器化工程实践。