1006 字
约 3 分钟
10
S15-J04 · Docker 基础:镜像、容器、数据卷
适用读者:会
docker run但说不清"容器和虚拟机差在哪"的人。
前置:S15-B04。
实测环境:Docker(Ubuntu 24.04 宿主)/ alpine:3.20(2026-11-05)。
覆盖旧文:21 张 Docker 卡 + 3 张命令卡 = 866 点。
覆盖扩展:E-S15-006(容器 vs 虚拟机)、E-S15-015(数据卷与容器生命周期)。
上一篇:S15-J03 · 抓包与网络排障
下一篇:S15-J05 · Dockerfile 与 Compose。
1. 一句话结论
虚拟机虚拟的是"硬件",容器隔离的是"进程"——所以容器秒级启动、镜像分层复用,但它和宿主共享内核。
| 维度 | 虚拟机 | 容器 |
|---|---|---|
| 隔离层 | Hypervisor + 完整 OS | namespace + cgroup |
| 启动 | 分钟级 | 秒级 |
| 体积 | GB 级 | MB 级 |
| 内核 | 各用自己的 | 共享宿主内核 |
"共享内核"意味着:Windows 宿主跑不了 Linux 容器(除非 WSL2/虚拟化);容器里不能换内核。
2. 三个概念(E-S15-006)
| 概念 | 是什么 | 生命周期 |
|---|---|---|
| 镜像(image) | 只读模板(分层) | 长期 |
| 容器(container) | 镜像的运行实例(可写层) | 创建/停止/删除 |
| 卷(volume) | 独立于容器的持久存储 | 独立 |
实测(数据卷持久化):
docker volume create s15vol
docker run --rm -v s15vol:/data alpine:3.20 sh -c 'echo persist > /data/f.txt'
docker run --rm -v s15vol:/data alpine:3.20 cat /data/f.txt # → persist
"容器删了数据还在吗":在卷里就在;写在容器可写层 → 删容器即丢。
3. 最常用的 12 条命令
| 目的 | 命令 |
|---|---|
| 拉镜像 | docker pull alpine:3.20 |
| 看本地镜像 | docker images |
| 运行 | docker run -d -p 8080:8080 --name app img |
| 看容器 | docker ps / docker ps -a |
| 进容器 | docker exec -it app sh |
| 看日志 | docker logs -f app |
| 停止/启动 | docker stop app / docker start app |
| 删除容器 | docker rm -f app |
| 删除镜像 | docker rmi img |
| 看资源 | docker stats |
| 看分层 | docker history img |
| 导出/导入 | docker save / docker load |
一个实测坑:运行不存在的本地镜像时,docker 会尝试从仓库拉取:
Unable to find image 's15demo:v1' locally
docker: Error response from daemon: pull access denied for s15demo
"为什么报 pull access denied":它以为你要拉一个叫 s15demo 的远程镜像 → 先确认本地构建成功。
4. 端口、网络与挂载
| 写法 | 含义 |
|---|---|
-p 8080:80 |
宿主 8080 → 容器 80 |
-p 127.0.0.1:8080:80 |
只绑本机(更安全) |
-v /host/path:/container/path |
绑定挂载(宿主机目录) |
-v volname:/path |
命名卷(推荐) |
--network host |
用宿主网络(端口不隔离) |
判据:"这个端口要给公网吗?" 不给 → 绑定 127.0.0.1(S15-J03 的"本机通外网不通"就是这里)。
5. 五个误区
| 误区 | 真相 |
|---|---|
| "容器=轻量虚拟机" | 共享内核,隔离的是进程 |
| "容器删了数据一定丢" | 在卷里不丢 |
| "镜像找不到会本地报错" | 会尝试远程拉取 |
"-p 随便写就行" |
绑定地址决定暴露面 |
| "容器里能改内核参数" | 共享内核,需宿主设置 |
6. 自检
- 容器与虚拟机的三点差异?
- 镜像、容器、卷的生命周期?
- 数据卷为什么能持久化?
- 运行不存在的镜像会怎样?
-p 127.0.0.1:8080:80与-p 8080:80的差别?
7. 下一篇
S15-J05 · Dockerfile 与 Compose
容器讲完,下一篇讲"怎么做出小镜像":分层、多阶段构建(实测 20.8MB → 12.1MB)。
本篇属于系列《S15 · Linux 与运维》。旧文来源:24 张 Docker 卡;扩展点 E-S15-006/015。镜像、卷与报错为真实 docker 实测。
S15-J04 · Docker 基础:镜像、容器、数据卷
https://www.clxhxhhr.top/posts/5398/ 评论
0 条
还没有评论,先写一条吧。