docker网络
docker网络模式
默认模式:桥接模式
桥接模式 部署好docker服务,启动之后,创建一个虚拟网桥,docker0
这是虚拟的网络设备,类似于交换机。
每一次运行容器之后,docker0就会从网段当中分配一个ip地址给这个容器
容器与主机之间通信:通过桥接模式进行通信
容器与容器之间通信:多个容器都在同一网段,都在同一网桥,可以通过自己的IP地址进行通信
桥接模式:连接两个不网络段的设备。共享通信的一种方式
172.17 路由器 192.168
基于mac地址转发数据帧。
当172.17-------192.168 桥接设备查看目标的mac地址
ARP广播。如果在mac地址表,桥接设备直接把数据帧转发到目标的相应接口。如果不在,ARP广播,所有接口都会收到数据报文
桥接模式在物理和数据链路层上工作,学习和转发mac地址,用于局域网内部的连接和扩展
vethpair 方式生成一个对应容器的虚拟网卡
docker网桥是宿主机虚拟出来的,并不是真正的网络设备。外部是没有办法通过寻址找到
也是客户端是无法直接访问容器的ip地址
如果希望外部网络能够访问,要通过映射容器的端口到宿主机
容器要保持一直运行,必须要指定有一个运行的程序。nginx镜像当中声明号了运行程序
nginx -g “daemon off” 保持nginx一直在后台运行。-itd不加d,前台运行展示运行结果
桥接模式的宿主机和容器之间的端口映射,实际上是做了nat’地址的转换,容器的私有ip’映射到主机 的ipshang
从而实现容器与外部网络的通信。隐藏了容器内部的真实IP地址
docker基于桥接模式的网络类型
1、host模式,容器不会虚拟出自己的网卡,也不会配置自己的ip。容器全部使用宿主机的ip和端口
端口不重复的类型的应用。docker本身是单节点模式,使用与部署整个服务的应用程序
docker run -itd --name test1 --network host nginx:1.22
2、container模式:容器和容器之间共用一个network namespace不是和宿主机共享。
新创建的容器也不会有自己的网卡,配置自己的ip
而是和一个容器共享ip,端口,除了网络之外,其他的比如文件系统等等都是隔离。
docker run -itd --name test2 centos:7 /bin/bash
docker run -itd --name test3 --net=container:test2 centos:7 /bin/bash
3、none模式:创建容器之后,容器有自己的网络命名空间,但是不会进行任何网络的配置。
没有网卡,没有ip,没有端口。只有本地的1o回环网络。没有办法进行联网。网络是封闭的,一般用于内部调试。
docker run -d --name a1 --network=none nginx:latest
docker ps -a
docker inspect a1 ##查看该容器的详细信息
"Gateway": ""
"IPAddress": "",
4、自定义网络:和桥接模式一样,只不过我们可以自定义容器的网段和给新创建的容器指定ip地址
只有自定义网络可以在创建容器的时候指定ip地址
docker network create --subnet=172.111.0.0/16 mynetwork1
#创建自定义网络
docker network ls
#列出Docker主机上所有的网络
docker network create --subnet=172.112.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork2
#创建自定义网络并给网络命名,docker1为网卡,mynetwork2为自定义网段名