Update advanced_network
parent
a9eb521865
commit
8bf728103b
|
@ -39,7 +39,7 @@ DROP all -- 0.0.0.0/0 0.0.0.0/0
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
之后,启动容器(`docker run`)时使用 `--link=CONTAINER_NAME:ALIAS` 选项。Docker 会在 `iptable` 中为 两个容器分别添加一条 `ACCEPT` 规则,允许相互访问开放的端口(取决于 Dockerfile 中的 EXPOSE 行)。
|
之后,启动容器(`docker run`)时使用 `--link=CONTAINER_NAME:ALIAS` 选项。Docker 会在 `iptable` 中为 两个容器分别添加一条 `ACCEPT` 规则,允许相互访问开放的端口(取决于 `Dockerfile` 中的 `EXPOSE` 指令)。
|
||||||
|
|
||||||
当添加了 `--link=CONTAINER_NAME:ALIAS` 选项后,添加了 `iptables` 规则。
|
当添加了 `--link=CONTAINER_NAME:ALIAS` 选项后,添加了 `iptables` 规则。
|
||||||
```bash
|
```bash
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
## 自定义网桥
|
## 自定义网桥
|
||||||
|
|
||||||
除了默认的 `docker0` 网桥,用户也可以指定网桥来连接各个容器。
|
除了默认的 `docker0` 网桥,用户也可以指定网桥来连接各个容器。
|
||||||
|
|
||||||
在启动 Docker 服务的时候,使用 `-b BRIDGE`或`--bridge=BRIDGE` 来指定使用的网桥。
|
在启动 Docker 服务的时候,使用 `-b BRIDGE`或`--bridge=BRIDGE` 来指定使用的网桥。
|
||||||
|
@ -10,13 +11,17 @@ $ sudo systemctl stop docker
|
||||||
$ sudo ip link set dev docker0 down
|
$ sudo ip link set dev docker0 down
|
||||||
$ sudo brctl delbr docker0
|
$ sudo brctl delbr docker0
|
||||||
```
|
```
|
||||||
|
|
||||||
然后创建一个网桥 `bridge0`。
|
然后创建一个网桥 `bridge0`。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo brctl addbr bridge0
|
$ sudo brctl addbr bridge0
|
||||||
$ sudo ip addr add 192.168.5.1/24 dev bridge0
|
$ sudo ip addr add 192.168.5.1/24 dev bridge0
|
||||||
$ sudo ip link set dev bridge0 up
|
$ sudo ip link set dev bridge0 up
|
||||||
```
|
```
|
||||||
|
|
||||||
查看确认网桥创建并启动。
|
查看确认网桥创建并启动。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ip addr show bridge0
|
$ ip addr show bridge0
|
||||||
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
|
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
|
||||||
|
@ -24,12 +29,17 @@ $ ip addr show bridge0
|
||||||
inet 192.168.5.1/24 scope global bridge0
|
inet 192.168.5.1/24 scope global bridge0
|
||||||
valid_lft forever preferred_lft forever
|
valid_lft forever preferred_lft forever
|
||||||
```
|
```
|
||||||
配置 Docker 服务,默认桥接到创建的网桥上。
|
|
||||||
```bash
|
在 Docker 配置文件 `/etc/docker/daemon.json` 中添加如下内容,即可将 Docker 默认桥接到创建的网桥上。
|
||||||
$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
|
|
||||||
$ sudo systemctl start docker
|
```json
|
||||||
|
{
|
||||||
|
"bridge": "bridge0",
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 Docker 服务。
|
启动 Docker 服务。
|
||||||
|
|
||||||
新建一个容器,可以看到它已经桥接到了 `bridge0` 上。
|
新建一个容器,可以看到它已经桥接到了 `bridge0` 上。
|
||||||
|
|
||||||
可以继续用 `brctl show` 命令查看桥接的信息。另外,在容器中可以使用 `ip addr` 和 `ip route` 命令来查看 IP 地址配置和路由信息。
|
可以继续用 `brctl show` 命令查看桥接的信息。另外,在容器中可以使用 `ip addr` 和 `ip route` 命令来查看 IP 地址配置和路由信息。
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
## 配置 docker0 网桥
|
## 配置 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 配置
|
* `--bip=CIDR` IP 地址加掩码格式,例如 192.168.1.5/24
|
||||||
|
* `--mtu=BYTES` 覆盖默认的 Docker mtu 配置
|
||||||
|
|
||||||
也可以在配置文件中配置 DOCKER_OPTS,然后重启服务。
|
也可以在配置文件中配置 DOCKER_OPTS,然后重启服务。
|
||||||
|
|
||||||
由于目前 Docker 网桥是 Linux 网桥,用户可以使用 `brctl show` 来查看网桥和端口连接信息。
|
由于目前 Docker 网桥是 Linux 网桥,用户可以使用 `brctl show` 来查看网桥和端口连接信息。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo brctl show
|
$ sudo brctl show
|
||||||
bridge name bridge id STP enabled interfaces
|
bridge name bridge id STP enabled interfaces
|
||||||
|
@ -17,6 +21,7 @@ docker0 8000.3a1d7362b4ee no veth65f9
|
||||||
|
|
||||||
|
|
||||||
每次创建一个新容器的时候,Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口。使用本地主机上 `docker0` 接口的 IP 作为所有容器的默认网关。
|
每次创建一个新容器的时候,Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口。使用本地主机上 `docker0` 接口的 IP 作为所有容器的默认网关。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo docker run -i -t --rm base /bin/bash
|
$ sudo docker run -i -t --rm base /bin/bash
|
||||||
$ ip addr show eth0
|
$ ip addr show eth0
|
||||||
|
@ -29,5 +34,4 @@ $ ip addr show eth0
|
||||||
$ ip route
|
$ ip route
|
||||||
default via 172.17.42.1 dev eth0
|
default via 172.17.42.1 dev eth0
|
||||||
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3
|
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3
|
||||||
$ exit
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -46,7 +46,12 @@ DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.
|
||||||
|
|
||||||
注意:
|
注意:
|
||||||
|
|
||||||
* 这里的规则映射了 0.0.0.0,意味着将接受主机来自所有接口的流量。用户可以通过 `-p IP:host_port:container_port` 或 `-p
|
* 这里的规则映射了 `0.0.0.0`,意味着将接受主机来自所有接口的流量。用户可以通过 `-p IP:host_port:container_port` 或 `-p IP::port` 来指定允许访问容器的主机上的 IP、接口等,以制定更严格的规则。
|
||||||
IP::port` 来指定允许访问容器的主机上的 IP、接口等,以制定更严格的规则。
|
|
||||||
|
|
||||||
* 如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 `/etc/default/docker` 中指定 `DOCKER_OPTS="--ip=IP_ADDRESS"`,之后重启 Docker 服务即可生效。
|
* 如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 `/etc/docker/daemon.json` 中添加如下内容。
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"ip": "0.0.0.0"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
|
@ -3,21 +3,24 @@
|
||||||
下面是一个跟 Docker 网络相关的命令列表。
|
下面是一个跟 Docker 网络相关的命令列表。
|
||||||
|
|
||||||
其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效。
|
其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效。
|
||||||
* `-b BRIDGE or --bridge=BRIDGE` --指定容器挂载的网桥
|
|
||||||
* `--bip=CIDR` --定制 docker0 的掩码
|
|
||||||
* `-H SOCKET... or --host=SOCKET...` --Docker 服务端接收命令的通道
|
|
||||||
* `--icc=true|false` --是否支持容器之间进行通信
|
|
||||||
* `--ip-forward=true|false` --请看下文容器之间的通信
|
|
||||||
* `--iptables=true|false` --是否允许 Docker 添加 iptables 规则
|
|
||||||
* `--mtu=BYTES` --容器网络中的 MTU
|
|
||||||
|
|
||||||
下面2个命令选项既可以在启动服务时指定,也可以 Docker 容器启动(`docker run`)时候指定。在 Docker 服务启动的时候指定则会成为默认值,后面执行 `docker run` 时可以覆盖设置的默认值。
|
* `-b BRIDGE` 或 `--bridge=BRIDGE` 指定容器挂载的网桥
|
||||||
* `--dns=IP_ADDRESS...` --使用指定的DNS服务器
|
* `--bip=CIDR` 定制 docker0 的掩码
|
||||||
* `--dns-search=DOMAIN...` --指定DNS搜索域
|
* `-H SOCKET...` 或 `--host=SOCKET...` Docker 服务端接收命令的通道
|
||||||
|
* `--icc=true|false` 是否支持容器之间进行通信
|
||||||
|
* `--ip-forward=true|false` 请看下文容器之间的通信
|
||||||
|
* `--iptables=true|false` 是否允许 Docker 添加 iptables 规则
|
||||||
|
* `--mtu=BYTES` 容器网络中的 MTU
|
||||||
|
|
||||||
|
下面2个命令选项既可以在启动服务时指定,也可以在启动容器时指定。在 Docker 服务启动的时候指定则会成为默认值,后面执行 `docker run` 时可以覆盖设置的默认值。
|
||||||
|
|
||||||
|
* `--dns=IP_ADDRESS...` 使用指定的DNS服务器
|
||||||
|
* `--dns-search=DOMAIN...` 指定DNS搜索域
|
||||||
|
|
||||||
最后这些选项只有在 `docker run` 执行时使用,因为它是针对容器的特性内容。
|
最后这些选项只有在 `docker run` 执行时使用,因为它是针对容器的特性内容。
|
||||||
* `-h HOSTNAME or --hostname=HOSTNAME` --配置容器主机名
|
|
||||||
* `--link=CONTAINER_NAME:ALIAS` --添加到另一个容器的连接
|
* `-h HOSTNAME` 或 `--hostname=HOSTNAME` 配置容器主机名
|
||||||
* `--net=bridge|none|container:NAME_or_ID|host` --配置容器的桥接模式
|
* `--link=CONTAINER_NAME:ALIAS` 添加到另一个容器的连接
|
||||||
* `-p SPEC or --publish=SPEC` --映射容器端口到宿主主机
|
* `--net=bridge|none|container:NAME_or_ID|host` 配置容器的桥接模式
|
||||||
* `-P or --publish-all=true|false` --映射容器所有端口到宿主主机
|
* `-p SPEC` 或 `--publish=SPEC` 映射容器端口到宿主主机
|
||||||
|
* `-P or --publish-all=true|false` 映射容器所有端口到宿主主机
|
||||||
|
|
Loading…
Reference in New Issue