一、Docker命令体系
1. 常用子命令(必须掌握)
| 命令 | 作用 |
|---|---|
run |
从镜像创建并运行新容器 |
exec |
在运行中的容器内执行命令 |
ps |
列出容器 |
build |
通过 Dockerfile 构建镜像 |
pull |
从仓库下载镜像 |
push |
上传镜像到仓库 |
images |
列出本地镜像 |
search |
在 Docker Hub 搜索镜像 |
version / info |
查看版本或系统信息 |
2. 容器管理子命令(必须掌握)
| 命令 | 作用 |
|---|---|
create |
创建容器(不启动) |
start / stop / restart |
启停容器 |
rm |
删除容器(-f 强制删除运行中容器) |
kill |
强制终止容器(可指定信号) |
logs |
查看容器日志 |
top |
查看容器内进程 |
rename |
重命名容器 |
inspect |
查看容器/镜像的详细配置(支持 Go 模板过滤) |
3. 全局选项(了解)
-
-H, --host:指定 Docker 守护进程地址 -
--tlsverify:启用 TLS 验证 -
--log-level:设置日志级别
二、镜像管理
核心概念
-
镜像:只读模板,包含文件系统和应用。
-
镜像层:多个只读层叠加,每层记录文件系统的增量变化。
-
Dockerfile:自动化构建镜像的文本文件。
-
镜像仓库:存储镜像的地方(如 Docker Hub)。
镜像分层与 CoW 机制
-
分层优势:共享基础层,节省存储和带宽;支持多种 Linux 发行版共存。
-
Copy-on-Write (写时复制):
-
镜像只读,容器层可写。
-
读取文件:从上往下查找,找到后复制到容器层。
-
修改/删除文件:复制到容器层后再操作。
-
容器层保存所有变化,镜像本身不变。
-
镜像表示
text
[registry]/[namespace]/[repository]:[tag]
-
示例:
docker.io/library/nginx:latest -
官方镜像可省略 registry 和 namespace。
镜像制作方式
| 方式 | 说明 |
|---|---|
| Dockerfile | 自动化构建(推荐) |
docker commit |
从容器生成镜像 |
docker load / save |
导入/导出 tar 包 |
docker pull |
从仓库下载 |
镜像管理命令
| 命令 | 作用 |
|---|---|
images |
列出本地镜像 |
pull / push |
下载 / 上传镜像 |
tag |
给镜像打标签 |
rmi |
删除镜像 |
inspect / history |
查看镜像详情和历史层 |
save / load |
导出 / 导入镜像为 tar 文件 |
commit |
容器 → 新镜像 |
三、容器管理
容器本质
-
容器是进程,运行在独立的命名空间中(PID、网络、用户等)。
-
拥有自己的 root 文件系统、网络配置、进程空间。
docker run 常用参数(重点)
| 参数 | 说明 |
|---|---|
--name |
指定容器名 |
-d |
后台运行(守护进程) |
-it |
交互式运行(分配伪终端) |
-p |
端口映射 主机端口:容器端口 |
-P |
随机映射暴露的端口 |
-v |
挂载卷 |
-e |
设置环境变量 |
-h |
设置容器主机名 |
--restart |
重启策略:no / always / on-failure / unless-stopped |
--rm |
容器退出后自动删除 |
--privileged |
赋予扩展权限 |
容器生命周期与状态
-
created :已创建未运行(
docker create) -
running (Up):正在运行
-
exited:已退出(正常或错误)
-
paused:已暂停
容器退出状态码(常见)
| 码 | 含义 |
|---|---|
| 0 | 正常退出 |
| 1 | 通用错误(应用错误) |
| 137 | 被 SIGKILL 强制终止(如 OOM) |
| 139 | 段错误(内存访问违规) |
常用操作命令
| 命令 | 说明 |
|---|---|
exec -it <容器> bash |
进入容器执行命令 |
logs -f <容器> |
跟踪日志 |
ps -a |
列出所有容器(含已退出) |
inspect |
查看 IP、端口、挂载点等(配合 -f 模板) |
rename |
重命名容器 |
四、课堂练习示例(镜像拉取、打包、恢复)
bash
# 搜索并拉取 Redis 镜像
docker search redis
docker pull redis:latest
# 保存镜像为 tar 文件
docker save redis:latest -o redis.tar
# 删除本地镜像
docker rmi redis:latest
# 从 tar 文件加载镜像
docker load -i redis.tar