《Docker……》笔记-10高级网络配置

杨保华 戴王剑 曹亚伦.《Docker技术入门与实战》 〔M〕.机械工业出版社,2015年2月∶P238-251

第二十章 高级网络配置

具体讲解Docker使用网络的一些高级配置等,并分析底层实现的技术过程。
本章介绍Docker的一些关于网络的高级知识,包括网络的启动和配置参数、DNS的使用配置、容器访问和端口映射的相关实现。在一些场景中,Docker所有的网络定制配置。以及通过Linux命令来调整、补充、替换Docker默认的网络配置。并介绍关于Docker网络的一些工具和项目。

1 网络启动与参数配置
1. 基本过程

Docker启动时会在主机上自动创建一个docker0虚拟网桥,它会在挂在其上的接口之间进行转发。同时Docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口。

2. 网络相关参数

下面是跟Docker网络相关的命令参数。其中有些命令选项仅能在Docker服务启动时才能配置,不能马上生效:
* -b BRIDGE or --bridge=BRIDGE——指定容器挂载的网桥。
* --bip=CIDR——定制docker0的掩码。
* -H SOCKET... or --host=SOCKET...——Docker服务端接受命令的通道。
* --icc=true|false——是否支持容器间进行通信。
* --ip-forward=true|false——启用net.ipv4.ip forward,即打开转发功能。
* --iptables=true|false——禁止Docker添加iptables规则。
* --mtu=BYTES——容器网络中的MTU。
下面两个命令选项既可以在启动服务时指定,也可以Docker容器启动时指定。
* --dns=IP_ADDRESS...——使用指定的DNS服务器。
* --dns-search=DOMAIN...——指定DNS搜索域。
下面选项只能在docker run执行时使用:
* -h HOSTNAME or --hostname=HOSTNAME——配置容器主机名。
* --link=CONTAINER_NAME:ALIAS——添加到另一个容器的连接。
* --net=bridge|none|container:NAME_or_ID|host——配置容器的桥接模式。
* -p SPEC or --publish=SPEC——映射容器端口到宿主主机。
* -P or --publish-all=true|false——映射容器所有端口到宿主主机。

2. 配置容器DNS和主机名。
1. 相关配置文件

容器中主机名和DNS配置信息都是通过三个系统配置文件来维护的:/etc/resolv.conf、/etc/hostname 和 /etc/hosts 。
启动容器,使用mount命令可看到这三个文件挂载信息。
* /etc/resolv.conf 文件在创建容器时,默认与宿主机/etc/resolv.conf 文件内容保持一致。
* /etc/hosts 文件默认只记录了容器自身的一些地址和名称。
* /etc/hostname 文件记录了容器的主机名。

2. 容器内修改配置文件

在运行中的容器里编辑这三个文件,所做的修改是临时的,只在运行的容器中保留,容器终止或重启后不会被保存下来。也不会被docker commit提交。

3. 通过参数指定

自定义容器配置,可在创建或启动容器时利用下面参数指定:
* 指定主机名-h HOSTNAME or --hostname=HOSTNAME这个主机名会被写到容器内的/etc/hostname 和/etc/hosts。但只能在容器内看到,容器外看不到,也不会在docker ps中显示,也不会在其他的容器的/etc/hosts看到。
* 记录其他容器主机名--link=CONTAINER_NAME:ALIAS.
* 指定DNS服务器--dns=IP_ADDRESS添加DNS服务器到容器的/etc/resolv.conf中,容器会用指定的服务器来解析所有不在/etc/hosts中的主机名。
* 指定DNS搜索域--dns-search=DOMAIN当设定搜索域为.example.com时,在搜索一个名为host的主机时,还会搜索host.example.com。

3. 容器访问控制
1. 容器访问外部网络

默认情况下可以访问宿主机本地,要想通过宿主机访问到外部网络,需要宿主机进行转发。
在宿主机Linux系统中,检查转发是否打开:
$ sudo sysctl net.ipv4.ip_forward
为1,则说明开启转发;为0,说明没有开启转发,需手动打开:
$ sudo sysctl -w net.ipv4.ip_forward=1

2. 容器间访问

容器之间访问需要以下两方面的支持。
* 网络拓扑是否已经连通。默认情况下,拓扑是互通的。
* 本地系统的防火墙软件iptables是允许访问通过。

访问所有端口

启动Docker服务时,默认会添加一条“允许”转发策略到iptables的FORWARD链上。通过配置--icc=true|false参数可以控制默认的策略。

访问指定端口

通过-icc=false禁止容器间相互访问后,仍可以通过--link=CONTAINER_NAME:ALIAS选项来允许访问指定容器的开发端口。

4. 映射容器端口到宿主主机的实现。
1. 容器访问外部实现

容器要能访问外部网络,源地址不能为容器内部的网络地址,需要进行源地址映射(SourceNAT,SNAT),修改为本地系统的IP地址。映射是通过iptables的源地址伪装操作实现的。

2. 外部访问容器实现

容器运行外部访问,可在容器启动时,通过-p 或-P参数启用。
其实是在本地的iptables的nat表中添加相应的规则,将访问外部IP地址的网报进行目标地址DNAT,将目标地址修改为容器的IP地址。

5. 配置docker0网桥

Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器间可通过网桥相互通信,它还给出了MTU(接口运行接收的最大传输单元),通常为1500Bytes,或宿主主机网络路由上支持的默认值。这些值可在服务启动时进行配置。
* --bip=CIDR——IP地址加掩码格式,如192.168.1.5/24
* --mtu=BYTES——覆盖默认的MTU配置。
也可以在配置文件中配置DOCKER_OPTS,然后重启服务。

6. 自定义网桥

启动Docker服务时,使用-b BRIDGE--bridge=BRIDGE指定使用的网桥。

7. 创建一个点到点连接

需要两个容器之间直连通信,解决方法:创建一对peer接口,分别放到两个容器中,配置成点到点链路类型即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值