Docker网络配置
1、在没有任何docker容器启动时的原始宿主机网络如下:
1.回环 2.物理网卡 3.4虚拟机的 5.docker的网卡

2、启动tomcat容器
docker run -d -P --name tomcat_test tomcat #-P是随机端口

查看当前已经有一个启动中的容器,是我们制定的tomcat_test

进入到容器里:
docker exec -it tomcat_test ip addr #这里可以直接加上ip addr去查看容器的ip信息

结果可以发现,容器已经被分配了一个172.17.0.2是和宿主机中docker0 172.17.0.1同网段的一个ip address。可以看出,docker0就像一个路由器,比如我们家里面的光猫的登录地址一般是192.168.0.1,你连接后查看自己的设备ip一般是192.168.0.2之类的,我们每启动一个容器,docker就会给这个容器分配一个ip。只要安装了docker就会有一个桥接的docker0网卡。然后我们在回到宿主机查看宿主机的IP有么有变化

变化:1.docker0状态是UP了 2.多了一个veth2....if46的网卡,而且与容器的ip及其的相似,容器里面是eth0@if47。宿主机里面又是47:。。。。@if46 这其实是一种vethpair的技术
如果我们再启动一个容器,查看宿主机ip,又多了一对48 49的网卡

总结:容器带来的网卡,都是一对一对的。veth-pair技术就是一种虚拟的网络技术,只要是veth-pair连接的两个设备,就是可以通信的,目前的网络情况如下图(veth-pair的口编号不同人可能不同)

所以tomcat01与tomcat02是可以ping通的,是需要经过Docker0的。所有容器在启动的时候,如果不指定net默认的就是桥接Docker0模式。docker会给我们的容器分配一个默认可用的IP
ip地址其实本来是(每一段是8位2进制 0-255)
00000000.00000000.00000000.00000000
转为十进制才变成了255.255.0.1之类的255.255.0.1/16代表他的位数是前两位8*2=16
所以255.255.X.X就是同一个域。如果是/24那就是3*8只有最后一位不同才能是同一个网段,只有256个了
当容器删除或者重启之后,这个veth-pair就被删除了,不可访问了。所以怎么才能让服务的ip地址不变呢--link
-----------------------------自定义网络
docker的网络模式

如上图, 网桥模式bridge就是docker0的,主机模式host和主机完全一样,很少用,none(不创建网络)
一般情况,用桥接模式就可以了。不过可以自定义桥接
docker run -d -P --name tomcat01 --net bridge tomcat
这个启动的命令,可以用--net指定网络。默认如上。所以我们可以先创建一个网络配置,然后指定给我们想要启动的容器
配置docker容器和宿主机同网段IP的方法:

宿主机IP192.168.139.128/24,下面的子网设置为同网段的,并且网关设置为和宿主机一样,然后-o parent=宿主机的网卡名
docker network create -d macvlan --subnet 192.168.139.0/24 --gateway 192.168.139.1 -o parent=ens33 mac_net1
docker查看网络配置,可以看到mac_net1已经出现

然后在宿主机指定ip启动一个容器
[root@localhost ~]# docker run -itd --net=mac_net01 --ip=192.168.139.122 --name=tomcat01 tomcat
宿主机ping这个ip

但是同网段的其他机器是可以和容器ping通的。这是我直接回到win下ping然后说明这个服务的ip配好了,可以同网段访问,除了自己的宿主机和本容器之间不可ping通。

并且,我已经可以从外面访问到这个ip地址了

那如果我们的容器是一个centoOS的操作系统服务,那是不是可以通过这种方式,配置同网段的ip,并且ssh连接到容器的操作系统了呢。这就需要在容器中有ssh的服务了
https://www.cnblogs.com/zydev/p/5817804.html

浙公网安备 33010602011771号