1、容器与宿主机之间
在宿主机上安装好docker 服务后,会默认安装一个虚拟网卡docker0
这里docker0的ip范围是在172.17.0.1到172.17.0.255之间(172.17.0.1和172.17.0.255不可取)
启动一个centos的容器查看网络信息
docker run -it -d centos /bin/bash
进入容器内查看网络信息
容器的ip与宿主机docker0网卡ip是在同一网段上(ip与子网掩码按位与运算),这是因为启动一个容器是如果不指定网络就会使用默认的docker0
通过docker network ls
查看docker所有的网络
启动容器是默认会使用这个名为bridge的网络,docker network inspect bridge
查看具体信息
宿主机和容器是能相互ping通的
2、容器与容器之间
那如果再启动一个容器,容器与容器之间能ping通吗?
centos02容器的网络信息
centos01的ip是172.17.0.2,centos02的ip是172.17.0.3 那么他们能ping通吗?
答案是可以的,因为两个容器默认使用的都是bridge网络(docker0网卡)
,分配的ip都是在同一网段。但是docker容器之间不是隔离的吗 如何实现隔离。就需要用到自定义网络
3、自定义网络
前面说到启动一个容器会默认使用bridge网络,如何自定义一个网络并使用?
docker network 命令
简单自定义一个网络 指定子网和网关
查看centos网络详细信息
在宿主机自定义一个网络,其实就是增加一个网卡信息
两个容器使用同一个网络
接下来启动两个centos容器使用同一个自定义网络
通过参数--network 网络名
指定容器使用的网络
查看cnetos01和centos02的网络信息
有人可能会有疑问:自定义得网络子网是 192.168.24.0/16 而两个容器的ip是192.168.0.1和2,这好像也不在同一个网段上,关于两个ip是否在同一网段上这点请自行解决
两个容器使用两个个网络
自定义两个网络centos01和centos02
启动两个centos容器分别使用不通的容器
查看centos01的网络信息
查看centos02的网络信息
这两个ip使用的不同的网络,不是在同一个网段上,所以两个容器是不能ping通的。
那么如何让两个隔离的容器能相互ping通?
使用docker network connect 命令
将容器连接到网络
docker network connect centos01 centos02
:可能有点晕,解释:将容器centos02连接到网络centos01中,这样容器centos02既连接到了网络centos01,也连接到了centos02中。
docker network connect 网络 容器
查看网络centos01信息:网络centos01中新增了centos02容器
进入centos02中查看网络信息:新增一个网卡信息
结果:容器centos02有两个网卡信息,因为它使用了两个自定义的网络
图解: