Merge networks

This commit is contained in:
Baohua Yang
2026-01-02 16:55:39 -08:00
parent 61a71f3c25
commit 6e6d31d1d6
19 changed files with 177 additions and 1042 deletions

View File

@@ -1,3 +1,48 @@
# Docker 中的网络功能介绍
# 网络配置
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务
Docker 启动时会自动在主机上创建一个 `docker0` 虚拟网桥实际上是 Linux 的一个 bridge可以理解为一个软件交换机它会在挂载到它的网口之间进行转发
同时Docker 随机分配一个本地未占用的私有网段 [RFC1918](https://datatracker.ietf.org/doc/html/rfc1918) 中定义)中的一个地址给 `docker0` 接口。比如典型的 `172.17.42.1`,掩码为 `255.255.0.0`。此后启动的容器内的网口也会自动分配一个同一网段(`172.17.0.0/16`)的地址。
当创建一个 Docker 容器的时候同时会创建了一对 `veth pair` 接口当数据包发送到一个接口时另外一个接口也可以收到相同的数据包这对接口一端在容器内 `eth0`另一端在本地并被挂载到 `docker0` 网桥名称以 `veth` 开头例如 `vethAQI2QT`通过这种方式主机可以跟容器通信容器之间也可以相互通信Docker 就创建了在主机和所有容器之间一个虚拟共享网络
![Docker 网络](./_images/network.png)
## 用户自定义网络
虽然默认的 `bridge` 网络可以满足大部分需求但为了更好地隔离容器或满足特定的网络需求我们推荐使用用户自定义网络
用户可以创建 `bridge``overlay` `macvlan` 等不同类型的自定义网络
### 创建一个自定义 bridge 网络
```bash
$ docker network create my-net
```
### 连接容器到自定义网络
在启动容器时可以使用 `--network` 选项来指定网络
```bash
$ docker run -it --rm --name busybox1 --network my-net busybox sh
$ docker run -it --rm --name busybox2 --network my-net busybox sh
```
`busybox1` 的终端中可以 `ping` `busybox2`
```bash
/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.083 ms
```
### 容器互联的废弃与替代
Docker 的早期版本中`--link` 选项被用来连接容器然而这个功能现在已经被废弃并且不推荐在生产环境中使用
**注意`--link` 是一个遗留功能它可能会在未来的版本中被移除我们强烈建议使用用户自定义网络来连接多个容器**
使用自定义网络容器之间可以通过容器名直接进行通信这比使用 `--link` 更加灵活和强大
接下来的部分将介绍在一些场景中Docker 所有的网络定制配置以及通过 Linux 命令来调整补充甚至替换 Docker 默认的网络配置