Files
docker_practice/network/README.md
Baohua Yang cc6510d0b2 fix: resolve content issues found in user review
- fix(install): correct Docker version in macOS guide
- fix(intro): localize external image to prevent link rot
- doc(swarm): add context note about Kubernetes supremacy
- fix(network): remove broken missing image reference
2026-01-24 19:45:22 -08:00

49 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 网络配置
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 就创建了在主机和所有容器之间一个虚拟共享网络
## 用户自定义网络
虽然默认的 `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 的一些高级网络配置包括 DNS 配置和端口映射等内容