--- title: "06-数据卷与网络" created: 2026-09-01 tags: - 项目筑基 --- # 数据卷与网络 04 篇结尾埋了个坑:容器一删,里面的数据全没。本篇填这个坑——**数据怎么留住(卷)**,顺带讲清**盒子之间怎么通信(网络)**。这两块是 Docker 从"玩具"变"生产工具"的分水岭。 ## 一、容器数据为什么靠不住 容器的设计哲学是**用完即扔**:`docker rm` 掉的容器,它里面的读写层一起陪葬。数据库数据、上传的文件、配置修改——凡是想留下的,都不能只存在容器里。 再次出发组 [[11-拓展局域网思路|拓展局域网思路]] 的 NAT 生存法则第一条就是"**数据挂载 (Volume) 是核心**":`❌ docker run -d my-app` vs `✅ docker run -d -v /root/docker_data/app:/data my-app`。本篇把这个法则讲透。 ## 二、两种挂载方式:volume 与 bind mount ```bash # 方式一:volume(Docker 管理的数据卷) docker run -d -v mydata:/var/lib/mysql --name db mysql:8 # 方式二:bind mount(宿主机目录直挂) docker run -d -v /root/docker_data/app:/data --name app my-app ``` | 维度 | volume(命名卷) | bind mount(目录挂载) | | --- | --- | --- | | 位置 | Docker 统一管理(`/var/lib/docker/volumes/`) | 宿主机任意目录 | | 由谁指定 | Docker 自动创建 | 必须自己给绝对路径 | | 适合 | 数据库数据等"Docker 全托管" | 配置文件、需要经常手动看的目录 | | 可移植性 | 好(不依赖具体路径) | 依赖宿主机路径存在 | 实操感受一下: ```bash docker volume create mydata # 也可以不建,run 时 -v 会自动建 docker volume ls # 看所有卷 docker volume inspect mydata # 看卷在宿主机的真实位置 docker volume rm mydata # 删除卷(被容器占用会拒绝) ``` > [!tip] 直觉记忆 > `-v` 冒号左边是宿主机、右边是容器内。左边是"名字"就是 volume,左边是"/开头的路径"就是 bind mount。再次出发组的"数据目录规划"(`/opt/stacks`、`/root/docker_data/`)全是 bind mount 路线——图的就是备份脚本直接打包目录、换服务器打包带走。 ## 三、容器网络:默认隔离,映射通信 ### 端口映射:`-p` 的原理(简述) 容器网络默认跑在 `bridge`(网桥)上,是一个被隔离的小局域网(通常是 `172.17.0.x`)。外部进不来,所以需要 `-p 8080:80`——daemon 在宿主机上做了端口转发(底层靠 iptables DNAT 规则,原理知道即可,不用背)。 ```bash docker run -d -p 8080:80 nginx # 宿主 8080 → 容器 80 docker run -d -p 127.0.0.1:8080:80 nginx # 只允许本机访问(配合 Tunnel 的安全写法) docker port <容器名> # 查看容器的端口映射表 ``` `127.0.0.1` 前缀这个写法值得单独记住:**不暴露公网、只给本机**,Tunnel/反代走 localhost 回源——再次出发组所有服务的 Tunnel 配置默认就是这个姿势。 ### 容器互联:同网络直接喊名字 同一自定义网络里的容器,**直接用容器名当域名互相访问**: ```bash docker network create lab docker run -d --name web --network lab nginx docker run -d --name db --network lab mysql:8 # web 容器里可以直接连 db:3306 —— "db" 就是 DNS 名 ``` 这是 Compose 的底层机制:Compose 默认给一组服务建同一个网络,所以 yaml 里数据库地址写服务名就行,不用查 IP(容器重启 IP 会变,靠名字最稳)。 ### 三种网络模式速览 | 模式 | 说明 | 场景 | | --- | --- | --- | | bridge | 默认;隔离小局域网 + `-p` 映射 | 绝大多数场景 | | host | 容器直接用宿主机网络栈,`-p` 失效 | 追求极致性能、少折腾 | | none | 无网络 | 离线任务/安全沙箱 | --- 数据和网络两块拼图补齐,下一步就是把这些散装知识串成流水线——一个 yaml 描述所有服务,一条命令全部拉起:[[07-Compose-编排实操|Compose 编排实操]]。 --- ⬅️ [[05-Dockerfile-构建镜像|Dockerfile 构建镜像]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[07-Compose-编排实操|Compose 编排实操]]