Docker 常用命令全解析:镜像管理与容器操作实战指南
掌握 Docker 的核心在于熟练使用其命令行工具。本文将系统梳理 镜像 (Image) 与 容器(Container) 两大核心对象的常用操作命令,涵盖从拉取、运行、调试到清理的完整生命周期,助你高效驾驭容器技术。
前置要求:
- 已安装 Docker(参考上一篇《Docker 安装与核心架构详解》)
- 具备基础 Linux 命令行操作能力
一、镜像(Image)管理命令
镜像是容器的"模板",所有容器都基于镜像创建。高效管理镜像是 Docker 使用的第一步。
1. 列出本地镜像:docker images
bash
docker images [OPTIONS] [REPOSITORY[:TAG]]
常用选项:
-a, --all:显示所有镜像(包括中间层镜像)-q, --quiet:仅显示镜像 ID--digests:显示摘要信息(用于验证镜像完整性)
输出字段说明:
| 字段 | 含义 |
|---|---|
REPOSITORY |
镜像仓库名(如 ubuntu, redis) |
TAG |
镜像标签(版本号,默认 latest) |
IMAGE ID |
镜像唯一标识(SHA256 哈希前缀) |
CREATED |
镜像创建时间 |
SIZE |
镜像磁盘占用大小 |
示例:
bash
# 列出所有镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 3 months ago 13.3kB
ubuntu latest ba6acccedd29 21 months ago 72.8MB
# 仅显示 ID(用于批量操作)
$ docker images -q
9c7a54a9a43c
ba6acccedd29
2. 搜索公共镜像:docker search
bash
docker search [OPTIONS] TERM
常用选项:
--limit N:限制返回结果数量(默认 25)
输出字段说明:
| 字段 | 含义 |
|---|---|
NAME |
镜像名称 |
DESCRIPTION |
镜像描述 |
STARS |
社区评分(⭐️越多越受欢迎) |
OFFICIAL |
[OK] 表示官方维护镜像 |
AUTOMATED |
[OK] 表示自动构建镜像(由 GitHub 代码触发) |
示例:
bash
$ docker search redis --limit 5
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store... 12255 [OK]
redislabs/redisearch Redis With the RedisSearch module pre-loaded... 57
💡 最佳实践 :
优先选择 OFFICIAL = [OK] 的镜像,安全性与维护性更有保障。
3. 下载镜像:docker pull
bash
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 不指定
TAG时默认拉取latest - 支持通过摘要(Digest)精确拉取(防篡改)
示例:
bash
# 拉取最新 Ubuntu
$ docker pull ubuntu
# 拉取指定版本 Redis
$ docker pull redis:6.0.8
# 通过摘要拉取(安全场景)
$ docker pull ubuntu@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
⚠️ 注意 :
latest标签不保证稳定性 !生产环境务必指定明确版本(如redis:6.0.8)。
4. 查看磁盘使用情况:docker system df
bash
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 1 177MB 177MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
- RECLAIMABLE:可回收空间(未被容器引用的镜像/缓存)
- 执行
docker system prune可清理可回收资源
5. 删除镜像:docker rmi
bash
docker rmi [OPTIONS] IMAGE [IMAGE...]
常用选项:
-f, --force:强制删除(即使被容器引用)
高级用法:
bash
# 删除单个镜像
$ docker rmi hello-world
# 删除所有镜像(谨慎!)
$ docker rmi -f $(docker images -q)
# 仅删除虚悬镜像( 镜像)
$ docker image prune
🔍 什么是虚悬镜像(Dangling Image)?
REPOSITORY和TAG均为<none>- 通常由镜像重建或标签覆盖产生
- 建议定期清理 :
docker image prune -f
6. 镜像导入/导出
| 场景 | 命令 | 特点 |
|---|---|---|
| 跨主机迁移 | docker save -o nginx.tar nginx:latest docker load -i nginx.tar |
保留历史层和标签 |
| 精简备份 | docker export <container> > app.tar `cat app.tar |
docker import - myapp:v1` |
对比说明:
save/load:适用于镜像分发(保留完整元数据)export/import:适用于容器快照(生成新镜像,无构建历史)
二、容器(Container)操作命令
容器是镜像的运行实例,代表一个隔离的进程环境。
1. 创建并启动容器:docker run
bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
核心选项:
| 选项 | 作用 |
|---|---|
--name |
指定容器名称(默认随机生成) |
-d, --detach |
后台运行(守护式容器) |
-it |
交互模式 + 伪终端(前台调试) |
-p host:container |
端口映射(如 -p 8080:80) |
-v /host:/container |
目录挂载(持久化数据) |
--rm |
容器退出后自动删除 |
示例:
bash
# 交互式运行 Ubuntu(前台)
$ docker run -it --name=my-ubuntu ubuntu /bin/bash
root@abc123:/# exit # 容器停止
# 后台运行 Redis(守护式)
$ docker run -d --name=my-redis redis:6.0.8
8598375b077b...
# 端口映射 + 自动删除
$ docker run -d -p 8080:80 --rm nginx
💡 守护式 vs 交互式:
- 守护式 (
-d):适合长期运行的服务(Web 服务器、数据库)- 交互式 (
-it):适合临时调试、执行一次性任务
2. 查看容器状态:docker ps
bash
docker ps [OPTIONS]
常用选项:
-a:显示所有容器(包括已停止的)-l:显示最近创建的容器-n N:显示最近 N 个容器-q:仅显示容器 ID
输出关键字段:
| 字段 | 含义 |
|---|---|
CONTAINER ID |
容器唯一标识 |
IMAGE |
创建容器所用的镜像 |
COMMAND |
容器启动命令 |
CREATED |
容器创建时间 |
STATUS |
运行状态(Up/Exited) |
PORTS |
端口映射信息 |
NAMES |
容器名称 |
示例:
bash
# 查看运行中的容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e832e00f4f0 ubuntu "/bin/bash" 2 minutes ago Up 2 mins myu01
# 查看最近 2 个容器(含已停止)
$ docker ps -n 2
3. 容器生命周期管理
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动 | docker start <容器> |
启动已停止的容器 |
| 停止 | docker stop <容器> |
优雅停止(发送 SIGTERM) |
| 强制停止 | docker kill <容器> |
强制终止(发送 SIGKILL) |
| 重启 | docker restart <容器> |
重启容器 |
| 删除 | docker rm <容器> |
删除已停止的容器 -f 强制删除运行中容器 |
⚠️ 重要区别:
stop→ 容器可重启,数据保留rm→ 永久删除容器及可写层(挂载卷除外)
4. 调试与日志查看
(1)查看容器日志:docker logs
bash
docker logs [OPTIONS] CONTAINER
-f:实时跟踪日志(类似tail -f)--since:查看指定时间后的日志--tail N:仅显示最后 N 行
示例:
bash
# 实时查看 Redis 日志
$ docker logs -f my-redis
1:M 04 Aug 2023 09:47:54.631 * Ready to accept connections
(2)查看容器内进程:docker top
bash
$ docker top my-redis
UID PID PPID C STIME TTY TIME CMD
root 25436 25417 0 05:47 ? 00:00:00 redis-server *:6379
(3)查看容器详细信息:docker inspect
bash
$ docker inspect my-redis
# 返回 JSON 格式的完整配置(网络、存储、状态等)
- 用途:排查网络问题、确认挂载路径、获取 IP 地址等
5. 进入运行中的容器
| 方法 | 命令 | 特点 |
|---|---|---|
| 新终端 | docker exec -it <容器> bash |
✅ 推荐!启动新进程,退出不影响容器 |
| 原终端 | docker attach <容器> |
❌ 退出会导致容器停止(除非用 Ctrl+P+Q 分离) |
最佳实践:
bash
# 进入容器调试(安全方式)
$ docker exec -it my-redis redis-cli
127.0.0.1:6379> INFO
6. 文件拷贝:docker cp
在容器与宿主机之间复制文件:
bash
# 从容器复制到主机
$ docker cp my-container:/app/config.json ./config.json
# 从主机复制到容器
$ docker cp ./data.txt my-container:/tmp/
💡 替代方案 :
对于频繁文件交换,建议使用 目录挂载 (
-v /host/path:/container/path)
7. 容器导入/导出(快照)
bash
# 导出容器为 tar(不含历史层)
$ docker export my-container > app.tar
# 从 tar 创建新镜像
$ cat app.tar | docker import - myapp:v1
# 验证新镜像
$ docker run -it myapp:v1 ls /tmp
🔧 适用场景:
- 将容器当前状态固化为镜像
- 迁移无法通过 Dockerfile 重建的环境
三、命令速查表
镜像管理
| 功能 | 命令 |
|---|---|
| 列出镜像 | docker images |
| 搜索镜像 | docker search nginx |
| 拉取镜像 | docker pull redis:6.0.8 |
| 删除镜像 | docker rmi ubuntu |
| 清理虚悬镜像 | docker image prune -f |
| 导出镜像 | docker save -o nginx.tar nginx |
| 导入镜像 | docker load -i nginx.tar |
容器操作
| 功能 | 命令 |
|---|---|
| 运行容器 | docker run -d --name web nginx |
| 查看容器 | docker ps -a |
| 停止容器 | docker stop web |
| 删除容器 | docker rm -f web |
| 查看日志 | docker logs -f web |
| 进入容器 | docker exec -it web bash |
| 复制文件 | docker cp web:/app/log.txt ./ |
四、总结
- 镜像 是静态模板,容器是动态实例
- 守护式容器 (
-d)用于服务,交互式容器 (-it)用于调试 exec进入容器 比attach更安全- 定期清理虚悬镜像和停止的容器,避免磁盘占满
掌握这些命令,你就具备了日常 Docker 开发与运维的核心能力。下一步,我们将学习如何通过 Dockerfile 构建自定义镜像,实现应用的标准化交付!
🔗 延伸阅读:
- Docker CLI 官方文档
- 《Docker ------ 从入门到实践》第 3 章