本节目录:
- 高级网络配置
- 快速配置指南
- 配置DNS
- 容器访问控制
- 端口映射实现
- 配置 docker0 网桥
- 自定义网桥
高级网络配置
当 docker 启动时,会自动创建一个 docker0 虚拟网桥,实际上是 Linux 的一个bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机分配一个本地未占用的私有网段(zai RFC 1918 中定义)中的一个地址给 docker0 接口.
比如:
172.17.42.1,掩码为255.255.0.0 。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
当创建一个Docker 容器的时候,同时创建一对 veth pair 接口。这对端口一段在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头,通过这个方式,主机可以跟容器通信,容器之间也可以相互通信。 Docker 就创建了在主机和所以容器之间的虚拟共享网络
关于1 RFC 1918
关于2 RFC 1918
veth pair
快速配置指南
下面关于 Docker 网络相关的命令列表。
其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效
|
|
下面两个命令在启动服务时指定,也可以在 Docker 容器启动指定
下面的选项只有在 docker run 命令下执行,因为它们是针对容器的特性内容。
|
|
配置 DNS
Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢?利用虚拟文件挂载容器的 3 个相关配置文件。在容器中使用 mount 命令可以看到挂载信息。
这种机制可以让宿主主机 DNS 信息发生更新后,所有 Docker 容器的 dns 配置通过 /etc/resolv.conf 文件立即得到更新。如果想要手动指定容器的配置。可以使用下面的选项。
会被写到容器内的 /etc/hostname 和 /etc/hosts 但在容器外看不到,即不会再 docker ps 中显示,也不会在其他的容器的 /etc/hosts 看到
–link=CONTAINER_NAME:ALIAS 选项会在创建容器的时候,添加一个其他容器的主机名到 /etc/hosts 文件中,使用主机名 alias 就可以连接它
–dns=IP_ADDRESS 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 的主机名
–dns-search=DOMAIN 设定容器的搜索域,当设定的搜索域为 .example.com ,在搜索一个名为 host 的主机,DNS 不仅搜索 host,还会搜索 host.example.com
默认用主机上的 /etc/resolv.conf 来配置容器
容器访问控制
容器访问控制,主要通过 Linux 上的 自带防火墙 iptables 进行管理和实现
容器访问外部网络
需要本地系统的转发支持
sysctl net.ipv4.ip_forward
如果为 0 ,说明没有开启转发,需要手动开启
sysctl -w net.ipv4.ip_forward=1
在启动 Docker 服务的时候设定 –ip-forward=true,
就会自动设置为 1 。
容器之间的访问
- 容器之间网络拓补是否互联
- 本地系统的防火软件 iptables 是否允许通过
访问所有端口
当启动 Docker 服务时,添加 iptables 的 FORWARD 链上。策略通过还是禁止取决于配置 –cc=true 还是 –cc=false 则不会添加 iptables 规则。
访问指定端口
再通过 –icc=false 关闭网络访问后,还可以通过 –link=CONTAINER_NAME:ALIAS 选项来访问容器的开放端口。
CONTAINER_NAME 必须是 Docker 分配的名字,或使用 –name 参数指定的名字。主机名则不会被识别
映射容器端口到宿主主机的实现
默认情况下容器可以访问外部网络,但是外部不能访问容器
容器访问外部实现
因为 windows 无法识别 iptables 这部分放弃了 ┭┮﹏┭┮ 我想换系统
配置 docker0 网桥
Docker 默认制定了 docker0 接口的 IP 地址和子网掩码,让主机和容器之间可以通过网桥互相通信,他们还给出了 MTU (接口允许接受的最大的传输单元),通常是 1500 Bytes
–bip=CIDR – IP 地址加掩码格式
–mtu=BYTES – 覆盖默认的 Docker mtu 配置 也可以在配置文件中配置 DOCKER_OPTS 然后重启服务。
每次创建一个新的容器的时候,Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口。使用本地主机上 docker0 接口的 IP 作为所以容器的默认网关。
自定义网桥
除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器
,使用 -b BRIDGE 或 –bridge=BRIDGE 来指定使用的网桥
。如果服务已经运行,需要停止服务,并删除旧的网桥
o(╥﹏╥)o 总结不下去,windows根本用不了,这本书让我好蛋疼啊,前面还介绍了 windows 后面直接全部 Linux 下的命令。
但是通过进入bash 可以执行,但是文件查看还是很麻烦
先告一段落,后期有时间继续学习相关知识