Docker网络基础-yellowcong

来源:互联网 发布:mac如何解密外置硬盘 编辑:程序博客网 时间:2024/05/22 13:47

Docker容器启动后,会创建网络连接的两端,一端是在容器内创建eth0网卡,容器外创建vethxxx接口,并通过docker0网桥,进行外部网络连接,Docker容器互联,特定允许特定容器连接,容器与外部让网络连接

docker0的ip地址172.17.42.1 子网掩码255.255.0.0
mac地址的范围02:42:ac:11:00:00到02:42:ac:11:ff:ff
一共65534个地址

这里写图片描述

Docker创建是为容器提供MAC地址,启动时创建容器连接的两端,一个是容器内的网络设备eth0,另一个是docker0与外部网络的通信veth*,vethxxx是主机与container内部eth0相连的管道

这里写图片描述

自定义网桥操作

网桥管理工具

yum install bridge-utilsbrctl show #查看网桥brctl addbr br0#查看docker环境信息ps -ef|grep docker

修改网桥地址

ifconfig docker0 192.168.200.1 netmask 255.255.255.0

这里写图片描述

网桥配置注意

1、网桥配置不生效
配置自定义网桥后,我们在/etc/default/docker配置网桥后,并不会生效,请参考 Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题-yellowcong,这篇文章具体介绍了如何自定义网桥。

2、网桥设置后,重启服务器,docker启动失败
网桥配置完成后,当我们重启服务器,就会导致docker启动不了,是由于我们配置的网桥没有保存,具体请查看 Docker之网桥保存-yellowcong

Docker容器互联

默认情况下,docker的容器间是可以相互访问的

docker的容器重启后,ip地址就会发生变化,这样容器的访问,不能基于ip地址,所以需要使用 –link参数来基于容器名来访问容器,解决了ip地址变化,导致容器访问不了的问题,docker每次启动的时候都会动态更改evn和hosts,这样就维护了ip地址变化问题

案例

这下面有三个容器,我们再添加一个容器,然后使用别名来访问test1容器

#启动容器nginx,连接到test1服务器,并命名别名test,我们就可以直接通过别名的方式来访问网站了,容器就算是重启,也是可以访问的docker run -it --link=test1:test1 --name test3 nginx#开启80端口docker run -it --link=test1:test1 --name test3 -p 80 nginx#容器的hosts配置cat /etc/hosts#查看环境变量evn#注销掉了所有容器service docker restart#启动容器docker start test1 test2 test3

这里写图片描述

直接通过别名,就可以访问到服务
这里写图片描述

查看test3的hosts,发现了别名的映射
这里写图片描述

阻止容器间访问–icc=false

这里写图片描述

配置了–icc= false属性后,容器之间,就不能随意访问了,需要暴漏端口,才可以进行访问

#web服务器docker run -it -p 80 --name=test1 nginx /bin/bash#进入容器后,启动nginx  nginx#建立连接的容器docker run -it --name=test2 --link=test1:web nginx /bin/bash#我们可以直接通过别名访问相互关联的容器curl web#查看端口映射情况docker port test1#80/tcp -> 0.0.0.0:32768

ip端口的映射

我们可以在运行的时候,指定端口的映射,也可以只暴漏端口,让docker做映射操作

#运行一个简单的应用程序,那么容器里运行在3000端口的服务在宿主机的8080端口也就可用了#简单来讲,将容器的3000端口映射到宿主机的8080端口docker run -p 8080:3000 my-image#直接-p,不直接指定宿主机端口,docker自动分配端口,解决的端口冲突docker run -it -p 80 --name test

允许特定容器连接

–icc=false #不允许容器之间访问
–iptables=true #允许docker将配置添加到iptables中
–link #允许link的容器访问
docker的访问主要依赖于iptables的操作

#查看端口的映射docker port 容器名 iptables -L -n #查看防火墙的设置

这里写图片描述

Docker容器与外部让网络连接

–ip_forward=true
docker默认设定是true ,可以进行系统转发,可以自己在docker中配置DOCKER_OPTS这个字段

#查看系统是否开启了流量转发,设定为1 就是开启了sysctl net.ipv4.conf.all.forwarding

这里写图片描述

Iptables

iptables
允许端口映射访问
限制ip访问
input forword output链

三种操作,一种是外部传递进来的数据,第二种,是本机发出的,第三种,是转发的。
这里写图片描述

#表示允许外界访问test1的容器#source 如果是0.0.0.0/0 就表示不限制ip#destination 表示服务器的ip,目的ipDOCKER#链表target     prot opt source               destinationACCEPT     tcp  --  0.0.0.0/0            192.168.110.2        tcp dpt:80#DROP表示禁止192.168.110.4访问192.168.110.2 ipiptables -I DOCKER -S 192.168.110.4  -D 192.168.110.2 -p TCP -dport 80 -J DROP

这里写图片描述

原创粉丝点击