Docker学习路径——3、常用命令

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

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)?

  • REPOSITORYTAG 均为 <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 构建自定义镜像,实现应用的标准化交付!

🔗 延伸阅读

相关推荐
STLearner2 小时前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng2 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
其实防守也摸鱼2 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
腾科IT教育2 小时前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
23471021273 小时前
4.14 学习笔记
笔记·python·学习
醇氧3 小时前
【学习】软件过程模型全解析:从瀑布到敏捷的演进之路
学习·log4j
邪修king3 小时前
UE5 零基础入门第三弹: 碰撞与触发交互,解锁场景机关与蓝图封装(高娱乐性学习)
学习·ue5·交互
uesowys4 小时前
CentOS Linux安装部署OpenClaw
linux·centos·安装部署openclaw
IMPYLH4 小时前
Linux 的 rm 命令
linux·运维·服务器·网络·bash