将 "名字空间" 改为 "命名空间"

Namespace 术语一般的翻译是"命名空间",参见 <https://zh.wikipedia.org/zh-cn/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4>

Signed-off-by: Tao Wang <twang2218@gmail.com>
This commit is contained in:
Tao Wang
2016-11-15 06:56:29 +11:00
parent 3e0c0c6ef6
commit a37cf1b88c
9 changed files with 32 additions and 32 deletions

View File

@@ -1,6 +1,6 @@
## Docker 网络实现
Docker 的网络实现其实就是利用了 Linux 上的网络名空间和虚拟网络设备(特别是 veth pair。建议先熟悉了解这两部分的基本概念再阅读本章。
Docker 的网络实现其实就是利用了 Linux 上的网络名空间和虚拟网络设备(特别是 veth pair。建议先熟悉了解这两部分的基本概念再阅读本章。
### 基本原理
首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。
@@ -14,14 +14,14 @@ Docker 容器网络就利用了这项技术。它在本地主机和容器内分
Docker 创建一个容器的时候,会执行如下操作:
* 创建一对虚拟接口,分别放到本地主机和新容器中;
* 本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字,如 veth65f9
* 容器一端放到新容器中,并修改名字作为 eth0这个接口只在容器的名空间可见;
* 容器一端放到新容器中,并修改名字作为 eth0这个接口只在容器的名空间可见;
* 从网桥可用地址段中获取一个空闲地址分配给容器的 eth0并配置默认路由到桥接网卡 veth65f9。
完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
可以在 `docker run` 的时候通过 `--net` 参数来指定容器的网络配置有4个可选值
* `--net=bridge` 这个是默认值,连接到默认的网桥。
* `--net=host` 告诉 Docker 不要将容器网络放到隔离的名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus还可以让容器做一些影响整个主机系统的事情比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 `--privileged=true`,容器会被允许直接配置主机的网络堆栈。
* `--net=host` 告诉 Docker 不要将容器网络放到隔离的名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus还可以让容器做一些影响整个主机系统的事情比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 `--privileged=true`,容器会被允许直接配置主机的网络堆栈。
* `--net=container:NAME_or_ID` 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 `lo` 环回接口通信。
* `--net=none` 让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。
@@ -66,4 +66,4 @@ $ sudo ip netns exec $pid ip route add default via 172.17.42.1
当容器结束后Docker 会清空容器,容器内的 eth0 会随网络命名空间一起被清除A 接口也被自动从 `docker0` 卸载。
此外,用户可以使用 `ip netns exec` 命令来在指定网络名空间中进行配置,从而配置容器内的网络。
此外,用户可以使用 `ip netns exec` 命令来在指定网络名空间中进行配置,从而配置容器内的网络。