replace '網絡' as '網路'

This commit is contained in:
a504082002
2014-11-20 01:06:47 +08:00
parent d24b44076b
commit 893e0f8bb7
22 changed files with 71 additions and 71 deletions

View File

@@ -1,12 +1,12 @@
# 高級網配置
本章將介紹 Docker 的一些高級網配置和選項。
# 高級網配置
本章將介紹 Docker 的一些高級網配置和選項。
當 Docker 啟動時,會自動在主機上創建一個 `docker0` 虛擬網橋,實際上是 Linux 的一個 bridge可以理解為一個軟件交換機。它會在掛載到它的網口之間進行轉發。
同時Docker 隨機分配一個本地未占用的私有網段(在 [RFC1918](http://tools.ietf.org/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 容器的時候,同時會創建了一對 `veth pair` 接口(當數據包發送到一個接口時,另外一個接口也可以收到相同的數據包)。這對接口一端在容器內,即 `eth0`;另一端在本地並被掛載到 `docker0` 網橋,名稱以 `veth` 開頭(例如 `vethAQI2QT`。通過這種方式主機可以跟容器通信容器之間也可以相互通信。Docker 就創建了在主機和所有容器之間一個虛擬共享網
![Docker 網](../_images/network.png)
![Docker 網](../_images/network.png)
接下來的部分將介紹在一些場景中Docker 所有的網定制配置。以及通過 Linux 命令來調整、補充、甚至替換 Docker 默認的網配置。
接下來的部分將介紹在一些場景中Docker 所有的網定制配置。以及通過 Linux 命令來調整、補充、甚至替換 Docker 默認的網配置。

View File

@@ -1,8 +1,8 @@
## 容器訪問控制
容器的訪問控制,主要通過 Linux 上的 `iptables` 防火墻來進行管理和實現。`iptables` 是 Linux 上默認的防火墻軟件,在大部分發行版中都自帶。
### 容器訪問外部網
容器要想訪問外部網需要本地系統的轉發支持。在Linux 系統中,檢查轉發是否打開。
### 容器訪問外部網
容器要想訪問外部網需要本地系統的轉發支持。在Linux 系統中,檢查轉發是否打開。
```
$sysctl net.ipv4.ip_forward
@@ -16,18 +16,18 @@ $sysctl -w net.ipv4.ip_forward=1
### 容器之間訪問
容器之間相互訪問,需要兩方面的支持。
* 容器的網拓撲是否已經互聯。默認情況下,所有容器都會被連接到 `docker0` 網橋上。
* 容器的網拓撲是否已經互聯。默認情況下,所有容器都會被連接到 `docker0` 網橋上。
* 本地系統的防火墻軟件 -- `iptables` 是否允許通過。
#### 訪問所有端口
當啟動 Docker 服務時候,默認會添加一條轉發策略到 iptables 的 FORWARD 鏈上。策略為通過(`ACCEPT`)還是禁止(`DROP`)取決於配置`--icc=true`(缺省值)還是 `--icc=false`。當然,如果手動指定 `--iptables=false` 則不會添加 `iptables` 規則。
可見,默認情況下,不同容器之間是允許網互通的。如果為了安全考慮,可以在 `/etc/default/docker` 文件中配置 `DOCKER_OPTS=--icc=false` 來禁止它。
可見,默認情況下,不同容器之間是允許網互通的。如果為了安全考慮,可以在 `/etc/default/docker` 文件中配置 `DOCKER_OPTS=--icc=false` 來禁止它。
#### 訪問指定端口
在通過 `-icc=false` 關閉網訪問後,還可以通過 `--link=CONTAINER_NAME:ALIAS` 選項來訪問容器的開放端口。
在通過 `-icc=false` 關閉網訪問後,還可以通過 `--link=CONTAINER_NAME:ALIAS` 選項來訪問容器的開放端口。
例如,在啟動 Docker 服務時,可以同時使用 `icc=false --iptables=true` 參數來關閉允許相互的網訪問,並讓 Docker 可以修改系統中的 `iptables` 規則。
例如,在啟動 Docker 服務時,可以同時使用 `icc=false --iptables=true` 參數來關閉允許相互的網訪問,並讓 Docker 可以修改系統中的 `iptables` 規則。
此時,系統中的 `iptables` 規則可能是類似
```

View File

@@ -1,4 +1,4 @@
## 編輯網配置文件
## 編輯網配置文件
Docker 1.2.0 開始支持在執行中的容器裏編輯 `/etc/hosts`, `/etc/hostname``/etc/resolve.conf` 文件。

View File

@@ -1,7 +1,7 @@
## 配置 docker0 網橋
Docker 服務默認會創建一個 `docker0` 網橋(其上有一個 `docker0` 內部接口),它在內核層連通了其他的物理或虛擬網卡,這就將所有容器和本地主機都放到同一個物理網
Docker 服務默認會創建一個 `docker0` 網橋(其上有一個 `docker0` 內部接口),它在內核層連通了其他的物理或虛擬網卡,這就將所有容器和本地主機都放到同一個物理網
Docker 默認指定了 `docker0` 接口 的 IP 地址和子網掩碼,讓主機和容器之間可以通過網橋相互通信,它還給出了 MTU接口允許接收的最大傳輸單元通常是 1500 Bytes或宿主主機網路由上支持的默認值。這些值都可以在服務啟動的時候進行配置。
Docker 默認指定了 `docker0` 接口 的 IP 地址和子網掩碼,讓主機和容器之間可以通過網橋相互通信,它還給出了 MTU接口允許接收的最大傳輸單元通常是 1500 Bytes或宿主主機網路由上支持的默認值。這些值都可以在服務啟動的時候進行配置。
* `--bip=CIDR` -- IP 地址加掩碼格式,例如 192.168.1.5/24
* `--mtu=BYTES` -- 覆蓋默認的 Docker mtu 配置

View File

@@ -1,8 +1,8 @@
## 工具和示例
在介紹自定義網拓撲之前,你可能會對一些外部工具和例子感興趣:
在介紹自定義網拓撲之前,你可能會對一些外部工具和例子感興趣:
### pipework
Jérôme Petazzoni 編寫了一個叫 [pipework](https://github.com/jpetazzo/pipework) 的 shell 腳本,可以幫助用戶在比較復雜的場景中完成容器的連接。
### playground
Brandon Rhodes 創建了一個提供完整的 Docker 容器網拓撲管理的 [Python庫](https://github.com/brandon-rhodes/fopnp/tree/m/playground)包括路由、NAT 防火墻;以及一些提供 HTTP, SMTP, POP, IMAP, Telnet, SSH, FTP 的服務器。
Brandon Rhodes 創建了一個提供完整的 Docker 容器網拓撲管理的 [Python庫](https://github.com/brandon-rhodes/fopnp/tree/m/playground)包括路由、NAT 防火墻;以及一些提供 HTTP, SMTP, POP, IMAP, Telnet, SSH, FTP 的服務器。

View File

@@ -1,8 +1,8 @@
## 映射容器端口到宿主主機的實現
默認情況下,容器可以主動訪問到外部網的連接,但是外部網無法訪問到容器。
默認情況下,容器可以主動訪問到外部網的連接,但是外部網無法訪問到容器。
### 容器訪問外部實現
容器所有到外部網的連接源地址都會被NAT成本地系統的IP地址。這是使用 `iptables` 的源地址偽裝操作實現的。
容器所有到外部網的連接源地址都會被NAT成本地系統的IP地址。這是使用 `iptables` 的源地址偽裝操作實現的。
查看主機的 NAT 規則。
```
@@ -13,7 +13,7 @@ target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
...
```
其中,上述規則將所有源地址在 `172.17.0.0/16` 網段,目標地址為其他網段(外部網的流量動態偽裝為從系統網卡發出。MASQUERADE 跟傳統 SNAT 的好處是它能動態從網卡獲取地址。
其中,上述規則將所有源地址在 `172.17.0.0/16` 網段,目標地址為其他網段(外部網的流量動態偽裝為從系統網卡發出。MASQUERADE 跟傳統 SNAT 的好處是它能動態從網卡獲取地址。
### 外部訪問容器實現

View File

@@ -13,7 +13,7 @@ $ sudo docker run -i -t --rm --net=none base /bin/bash
root@12e343489d2f:/#
```
找到程序號,然後創建網名字空間的跟蹤文件。
找到程序號,然後創建網名字空間的跟蹤文件。
```
$ sudo docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a
2989
@@ -40,6 +40,6 @@ $ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B
```
現在這 2 個容器就可以相互 ping 通,並成功建立連接。點到點鏈路不需要子網和子網掩碼。
此外,也可以不指定 `--net=none` 來創建點到點鏈路。這樣容器還可以通過原先的網來通信。
此外,也可以不指定 `--net=none` 來創建點到點鏈路。這樣容器還可以通過原先的網來通信。
利用類似的辦法,可以創建一個只跟主機通信的容器。但是一般情況下,更推薦使用 `--icc=false` 來關閉容器之間的通信。

View File

@@ -1,6 +1,6 @@
## 快速配置指南
下面是一個跟 Docker 網相關的命令列表。
下面是一個跟 Docker 網相關的命令列表。
其中有些命令選項只有在 Docker 服務啟動的時候才能配置,而且不能馬上生效。
* `-b BRIDGE or --bridge=BRIDGE` --指定容器掛載的網橋
@@ -9,7 +9,7 @@
* `--icc=true|false` --是否支持容器之間進行通信
* `--ip-forward=true|false` --請看下文容器之間的通信
* `--iptables=true|false` --禁止 Docker 添加 iptables 規則
* `--mtu=BYTES` --容器網中的 MTU
* `--mtu=BYTES` --容器網中的 MTU
下面2個命令選項既可以在啟動服務時指定也可以 Docker 容器啟動(`docker run`)時候指定。在 Docker 服務啟動的時候指定則會成為默認值,後面執行 `docker run` 時可以覆蓋設置的默認值。
* `--dns=IP_ADDRESS...` --使用指定的DNS服務器