数据卷volume
1. 是什么?
数据卷(Volume)是 Docker 官方推荐的容器数据持久化方案 ,本质是由 Docker 守护进程统一管理的宿主机目录(默认路径:/var/lib/docker/volumes/),完全独立于容器的生命周期,专门用于持久化容器生成 / 使用的数据。
2. 为什么需要?
容器默认是临时存储:容器删除后,内部所有数据会被彻底清除,无法保留。数据卷解决了以下核心问题:
- ✅ 数据持久化:容器销毁 / 重建后,数据不丢失
- ✅ 数据共享:多个容器可挂载同一数据卷,实现数据互通
- ✅ 解耦容器与数据:容器与存储分离,提升容器可移植性
- ✅ 性能与安全:比直接挂载宿主机目录更安全,支持多种存储驱动扩展
3. 能干什么?
- 持久化数据库、日志、配置等核心业务数据
- 实现容器与宿主机、容器与容器之间的文件共享
- 容器迁移、备份与恢复
- 开发环境热重载(如代码实时同步)
绑定方式
1匿名绑定
-v /container/pathDocker 自动生成随机卷名,统一管理,/var/lib/docker/volumes/[哈希]/_data
匿名绑定绑定删除容器后,数据卷保留,可以使用--rm让容器删除时数据卷也删除
2具名绑定
-v my-volume:/container/path按指定名称管理,默认路径/var/lib/docker/volumes/[卷名]/_data
3Bind Mount(绑定挂载)
-v /host/path:/container/path用户手动指定宿主机任意路径,Docker 不管理直接映射宿主机目录,可实时读写宿主机文件
数据卷管理
docker volume是 Docker 专门用于 ** 管理数据卷(Volume)** 的核心命令,所有操作都围绕数据卷的生命周期展开。
- 语法:
docker volume COMMAND - 可以通过
docker volume COMMAND --help查看每个子命令的详细用法
| 子命令 | 作用 | 常用实战示例 |
|---|---|---|
create |
手动创建一个数据卷(匿名 / 具名) | docker volume create nginx-data(创建名为 nginx-data 的具名卷) |
inspect |
查看数据卷的详细信息(包括存储路径、挂载点等) | docker volume inspect nginx-data |
ls |
列出当前主机上所有的数据卷 | docker volume ls(区分匿名卷 / 具名卷) |
prune |
删除所有未被使用的本地数据卷(清理孤儿卷) | docker volume prune(执行前会二次确认) |
rm |
删除指定的一个或多个数据卷 | docker volume rm nginx-data(删除单个)docker volume rm $(docker volume ls -qf dangling=true)(批量删匿名卷) |
docker网络模式
1bridge网桥模式

核心结论速记
-
网络模式:这是 Docker 默认的 bridge 网络模式,容器默认连接到 docker0 网桥。
-
容器间通信:同一主机上的容器通过同一个 docker0 网桥实现二层互通,无需额外配置。
-
外网访问流程:容器访问外网时,请求会经过:容器 → docker0 网桥 → 宿主机网络栈/NAT → 宿主机网卡(ens33) → 外网
-
默认网桥 docker0 不支持容器名解析→ 只能 ping IP,不能 ping 容器名
-
自定义网桥 内置 DNS 服务→ 可以直接
ping web2、curl web2
bash
自定义网桥
docker network create --driver bridge my-net
docker run -d --name web1 --network my-net nginx
docker run -d --name web2 --network my-net nginx
docker exec -it web1 curl web2
2host模式
- 原理 :
- 共享网络命名空间。容器不再拥有独立的 IP,直接复用宿主机的 IP 和端口。
- 容器内的端口就是宿主机的端口,不需要
-p映射。
- 优点 :性能高(少一层转发)、端口直接暴露。
- 缺点 :失去隔离性,端口容易冲突,容器间网络隔离失效。
bash
docker run -d --name web3 --net host nginx
3. None(无网络模式)
- 原理 :
- 彻底关闭网络。容器只有一个
lo(回环接口),没有任何网卡。 - 完全孤立,既不能访问外网,也不能被外部访问,也不能连其他容器。
- 彻底关闭网络。容器只有一个
- 适用场景 :
- 极度安全的离线任务。
- 不需要网络的加密计算任务。
- 手动定制网络的基础层。
bash
docker run -d --name nginx-none --network none nginx
4. Container(容器模式)
- 原理 :
- 共享网络栈 。新创建的容器与一个已存在的容器共享网络命名空间。
- 它们共用 IP、端口资源(例如:A 容器暴露了 80 端口,B 容器也能直接用 80,且互通)。
- 关键点 :
- 两个容器之间几乎无损耗通信(通过 lo 接口)。
- 但这两个容器只有网络共享,文件系统还是隔离的。
bash
# 先运行容器A
docker run -d --name container-a nginx
# 运行容器B,与A共享网络
docker run -d --name container-b --network container:container-a nginx
5. 自定义网络(推荐)🔥 生产首选
- 原理 :
- 用户手动创建的网络(
docker network create)。 - 可以创建 Bridge 网络 或 Overlay 网络(Swarm 模式)。
- 用户手动创建的网络(
- 为什么推荐?
- 自动 DNS 解析:在自定义网络中,容器名可以直接互 ping(默认 bridge 网络不行,需 link)。
- 完全隔离 :不同的自定义网络之间,容器默认无法互通,安全可控。
- 多网段:可以指定子网段(Subnet)、网关(Gateway)。
bash
# 1. 创建自定义网络
docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 my-net
# 2. 运行容器加入该网络
docker run -d --name nginx-custom --network my-net nginx
网络实战命令
bash
# 1. 查看所有网络
docker network ls
# 2. 查看网络详情
docker network inspect 网络名/ID
# 3. 创建自定义网络
docker network create my-bridge-net
# 4. 运行容器并指定网络
docker run -d --name web1 --network my-bridge-net nginx
# 5. 将运行中的容器连接到新网络
docker network connect my-bridge-net web1