Docker网络功能

Docker网络功能

容器间的访问

首先安装bridge-utils

#sudo apt-get install bridge-utils

wKiom1W6_jPxXRDIAAFEkJjM_X8204.jpg

新添加一个桥接网卡br0

#sudo brctl addbr br0

wKioL1W7ADOT-C0xAAGlSzStCUE468.jpg

修改配置文件加入DOCKER_OPTS="-b=br0" ,使用该桥接网卡启动docker

#sudo vim /etc/default/docker

重启docker

#sudo restart docker

启动一个容器发现ip地址已经使用我们自定义的br0ip地址为192.168.100.2

wKioL1W7AD6wTrWGAAHxLvSQPMM011.jpg

 

容器互联

使用 --link 参数可以容器之安全的行交互

我们再次创建一个容器httpd2 使用--link选项,并测试两个容器的连通性

--link 参数的格式--link name:alias ,其中 name 是要接的容器的名称, alias 接的名。

wKiom1W6_lex2J3iAAG9Q3JMk54483.jpg

关闭并重新启动httpd1并查看其地址,发现地址已经改变

wKioL1W7AFHRAlpZAAGs6Hv4ZbQ758.jpg

我们再用httpd2 测试httpd1的连接,发现地址已自动修正

wKiom1W6_mui8XFoAAELiRgAzYE856.jpg

我们查看一下他的host记录。发现httpd1ip地址已自动更新

wKioL1W7AGaBunySAAC8ZDzQuic448.jpg

拒绝容器之间的互联

--icc=false

编辑/etc/default/docker ,增加--icc=false,并重启docker

wKiom1W6_oGTGRSkAABiemaiy-U897.jpg

启动容器

wKioL1W7AH7jsERrAACJXOdW7NY370.jpg

连接到httpd2再次测试httpd1,发现网络已经不通

wKiom1W6_pjTuqs6AAB-LAkXSzg489.jpg

容许特定的连接

编辑/etc/default/docker ,增加--iptables=true,并重启docker

wKiom1W6_rPjK0XEAABoQicz4qM685.jpg

进入容器httpd1启动httpd服务

wKiom1W6_ryDcVFVAACIfBrdCqw594.jpg

使用httpd2测试httpd1web服务,是否发现web可以访问呢?

wKioL1W7ALfAUbaaAAD9dutnjz0114.jpg

我们来查看一下本地的iptables,发现httpd1web端口是对httpd2开放的,所以我们可以访问却ping不通

wKiom1W6_tux3INJAAIrhnvBhcQ470.jpg

我们再次启动一个httpd3拒绝他访问httpd1web

wKioL1W7ANuDVA-qAABu18Nt05M030.jpg

是不是发现httpd3无法访问httpd1web服务呢。有关ubuntuiptables下节我将介绍一下

wKiom1W6_wiDKR3mAAIFAPy6gKg491.jpg

wKioL1W7ARigieL1AAJNwTwKEh4241.jpg

外部访问容器

容器中可以行一些网络应用,要外部也可以访问这用,可以通-P -p 参数来指定端口映射。

当使用 -P 标记时Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网端口。

 

#sudo docker -it -p 80 --name httpd4 192.168.7.130:5000/httpd

wKiom1W6_zTTXlKfAAFK_TwKNCo133.jpg

使用docker port 加容器名查看映射端口

也可以自己定义指定端口来映射,如图,我们用8080端口来映射容器的web服务

#sudodocker run -it -p 8080:80 --name httpd5 192.168.7.130:5000/httpd

wKioL1W7ATPyWMqlAAFJ43GY8X0642.jpg

本地访问测试

wKiom1W6_1LTzT0IAADDiCSqwRI675.jpg

/etc/default/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 可以覆盖置的默认值

--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 --映射容器所有端口到宿主主机

容器访问控制

容器要想访问外部网,需要本地系转发支持。在Linux 中,检查转发是否打开。

$sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1

如果0明没有开启转发需要手打开。

$sysctl -w net.ipv4.ip_forward=1

如果在启动 Docker --ip-forward=true ,Docker 就会自动设定系ip_forward参数1

 


你可能感兴趣的:(网络,docker)