Docker进阶二-网络详解

docker网络详解

1、网络高级

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

Docker进阶二-网络详解_第1张图片

​ Linux虚拟网络技术。

Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);

Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。

原理:

1、每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。桥接网卡

2、每启动一个容器linux主机多了一个虚拟网卡。

3、docker run -d -P --name tomcat --net bridge tomcat:8

#1、docker0网络的特点。,
	默认
	域名访问不通
	--link 域名通了,但是删了又不行
	
#2、可以让容器创建的时候使用自定义网络
	 1、自定义创建的默认default "bridge"
	 2、自定义创建一个网络网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
	所有东西实时维护好,直接域名ping同
	3、理解网络。

docker network connect [OPTIONS] NETWORK CONTAINER

跨网络连接别人就用
docker network connect mynet tomcat
效果:
	1、自定义网络,默认都可以用主机名访问通
	2、跨网络连接别人就用 docker network connect mynet tomcat

1、容器启动,指定容器ip。 docker run --ip 192.168.0.3 --net 自定义网络  
2、网络。docker network create --subnet 指定子网范围  --driver bridge 所有东西实时维护好,直接域名ping同
3、docker compose。

1、网络的创建过程

Docker创建一个容器的时候,会具体执行以下操作:

  1. 创建一对虚拟接口,分别放到本地主机和新容器的命名空间中

  2. 本地主机一段的虚拟接口连接到默认的docker0网桥或者指定网桥上,并具有一个以veth开头的唯一名字
    Docker进阶二-网络详解_第2张图片

  3. 容器一段的虚拟接口将放到新创建的容器中,并修改名字为eth0。这个接口只在容器的命名空间可见
    Docker进阶二-网络详解_第3张图片

  4. 从网桥的可用地址段中获取一个空闲的地址分配给容器的eth0(如:172.17.0.2/16),并配置默认路由网关为docker0网卡的内部接口docker0的IP地址(如:172.17.42.1/16)

完成以上,容器就可以使用它所能看到的eth0虚拟网卡来连接其他容器和访问外部网络。

2、网络模式

网络模式 配置 说明
bridge模式 –net=bridge 默认值,在Docker网桥docker0上为容器创建新的网络栈
none模式 –net=none 不配置网络,用户可以稍后进入容器,自行配置
container模式 –net=container:name/id 容器和另外一个容器共享Network namespace。
kubernetes中的pod就是多个容器共享一个Network namespace。
host模式 –net=host 容器和宿主机共享Network namespace
用户自定义 –net=自定义网络 用户自己使用network相关命令定义网络,
创建容器的时候可以指定为自己定义的网络

3、实验测试网络互连

  • 大家重点理解veth pair技术
  • –link是容器在默认网络模式下,可以互相使用容器名ping通的
  • 如果容器创建时使用自定义网络,不使用–link也是可以ping通相互的容器名
  • –link 生产一般不用,我们可以使用自定义网络的方式
  • docker network connect

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