mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-02 05:39:51 +00:00
- 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
49 lines
2.4 KiB
Go
49 lines
2.4 KiB
Go
# 网络配置
|
||
|
||
当 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 配置和端口映射等内容。
|