欢迎来到我的CSDN主页!
我是平顶山大师,一个在CSDN分享笔记的博主。
推荐给大家我的博客专栏《【Docker】在容器中管理数据》。
如果感觉还不错的话请给我关注加三连吧!
容器间网络通信是指在同一主机上运行的不同容器之间进行通信。容器可以通过共享同一个网络命名空间(network namespace)来实现直接的网络通信。,或与非 Docker 工作负载通信。
默认情况下,容器启用了网络,它们可以发出 连接。容器没有关于它是哪种网络的信息 附加到,或者它们的对等节点是否也是 Docker 工作负载。一个 容器只能看到一个具有 IP 地址、网关、 路由表、DNS 服务和其他网络详细信息。也就是说,除非 容器使用网络驱动程序。
none
安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls
查看
Docker网络模式配置说明表格:
网络模式 说明 host 容器和宿主机共享Network namespace。容器使用宿主机的IP和端口。 container 容器和另外一个容器共享Network namespace。Kubernetes中的Pod就是多个容器共享一个Network namespace。创建的容器不会创建自己的网卡,配置自己的IP,而是与指定的容器共享IP和端口范围。 none 容器拥有独立的Network namespace,没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等。该模式关闭了容器的网络功能。 bridge 默认模式。此模式为每个容器分配和设置IP,并将容器连接到一个名为docker0的虚拟网桥,通过docker0网桥和Iptable nat表配置与宿主机通信。 macvlan 无(覆盖网络)。容器没有自己的MAC地址,显示为网络上的物理设备。利用VXLAN实现桥接模式。 overlay 无(覆盖网络)。利用VXLAN实现的bridge模式。
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连 接到这个虚拟网桥上。 虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。 在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名 为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入 到docker0网桥中。 bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。
查看bridge信息 打开容器 查看docker0网桥 查看容器网络 docker0就像是一个路由器,容器就像是路由器下的设备,它们在同一个网段内,可以互相ping通。
查看bridge信息
docker inspect bridge
打开容器
docker run -itd --net=bridge --name cname iname
查看docker0网桥 查看容器网络,两种方式:
ip addr
ifconfig
绑定多个端口号(外部访问 设置端口映射 -p参数可以出现多次)
docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0
容器通信模式:
查看bridge信息
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
docker run -itd \
--name t2 \
--net host \
tomcat:8.5.20
docker run -it \
--name c2 \
-d centos
c2 ping c3
这个ping成功了
CTRL+c终止
部署一个项目:
1.放入war包
2.建立网络
docker network create --subnet=172.20.0.0/16 mynet
3.建立容器
docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
--net mynet \
--ip 172.20.0.100 \
tomcat:8.5.20
在mysql中创建一个名为xl的用户,可以进行远程访问命令:grant all on *.* to xl@'%' identified by '123456';
mkdir -p /mysql {conf,data} 创建多级文件夹
重新启动mysql容器
命令:docker restart m1
访问:
子网掩码:
互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于 IP地址的寻址操作。 子网掩码是“255.255.255.0”的网络: 最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地 址数量是256-2,即254个,因为主机号不能全是“0”或全是“1”。 子网掩码是“255.255.0.0”的网络: 后面两个数字可以在0~255范围内任意变化,可以提供255²个IP地址。但是实际可用的IP地址数量 是255²-2,即65023个。 IP地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根 据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而 认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正 确到达目标主机,导致网络传输错误;如果将子网掩码设置得过小,那么就会将本来属于同一子网 内的机器之间的通信当做是跨子网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负 担,造成网络效率下降。 因此,子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过254台电脑,采用 “255.255.255.0”作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此 “255.255.255.0”是最常用的IP地址子网掩码;假如在一所大学具有1500多台电脑,这种规模的局域网可以使用“255.255.0.0”。
网关:
网关实质上是一个网络通向其他网络的IP地址。 路由器(Windows下叫默认网关,网关就是路由,路由就是网关不要蒙)
计算机的IP地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分 相同,主机部分不同同时重复出现。 路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网 络地址和主机地址,在互相连接的整个网络中保证每台主机的IP地址不会互相重叠,即IP地址具有了唯 一性。
docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过-p或-P参数来启用,访问容器的时候就通过
宿主机IP:容器端口
访问容器。网关实质上是一个网络通向其他网络的IP地址。