• Docker网络说明


    一、docker网络常见模式(5种)

    在这里插入图片描述
    默认的有三个:
    在这里插入图片描述
    作用:
    容器间的互联和通信以及端口映射
    容器IP变动时候可以通过服务名直接网络通信而不受到影响

    1、bridge模式

    定义:Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
    在这里插入图片描述
    在这里插入图片描述
    第二幅图,是宿主机上查看ip配置的相关结果
    我们可以看到有个docker0,这个网络存在
    这个网络是在启动docker软件的时候,就会被创建的

    所以,通过图1,我们就可以简单的理解
    容器-docker0网络-宿主机ens32或ens33网络之间的关系

    所以,容器间的网络交互,都是通过docker0网络间接实现的

    2、host模式

    定义:容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
    直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。
    在这里插入图片描述
    我们启动容器时选择这种模式,是无需指定端口映射的,因为使用的就是宿主机的端口和网络
    所以,命令可以这么写:

    docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
    
    • 1

    访问方式:http://宿主机IP:8080/
    因为tomcat的默认端口是8080
    就可以简单的理解为,直接在宿主机上启动了一个tomcat,用的就是宿主机的网络。

    3、none模式

    不考虑

    4、container模式

    定义:新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
    在这里插入图片描述
    这个模式的案例,无法使用tomcat镜像来演示
    因为,tomcat启动默认端口是8080
    于是,你两个容器公用一套网络端口,会导致端口冲突。
    就简单的理解为,一台服务器上启动两个tomcat,都是8080端口,当然会报错冲突。

    案例:

    docker run -it                             --name alpine1  alpine /bin/sh
    docker run -it --network container:alpine1 --name alpine2  alpine /bin/sh
    
    • 1
    • 2

    alpine1容器内部:
    在这里插入图片描述
    alpine2容器内部:
    在这里插入图片描述
    由上面两幅图,可以看出,这两个容器,公用一个IP。
    这种模式情况下,当alpine1容器被停止后
    alpine2容器的网络将丢失,就等价于none模式,没有自己的IP网络可用了。
    在这里插入图片描述

    5、自定义网络模式

    使用场景:
    规划容器网络,我们根据自己的设计,创建对应的docker网络,然后,在启动容器时,指定这个网络
    这样,就可以把N多的容器网络,进行网段划分,方便管理容器。
    当容器被重启时,对应的容器IP可能会发生变化,所以,我们在实际中使用的时候,会采取服务名进行互相调用,这样,无论容器IP如何变化,都不会影响服务互相调用。

    而这个时候,我们用模式1的情况下,ping 容器名,是无法ping通的,所以,这种情况,通过容器名
    无法互相访问。

    这个时候,自定义网络就体现出它的作用了!!!

    创建自定义网络:

    docker network create pzj_network
    
    • 1

    在这里插入图片描述
    创建容器实例的时候,使用自己创建的网络:

    docker run -d -p 8081:8080 --network pzj_network  --name tomcat1 billygoo/tomcat8-jdk8
    docker run -d -p 8082:8080 --network pzj_network  --name tomcat2 billygoo/tomcat8-jdk8
    
    • 1
    • 2

    进入tomcat1容器,ping tomcat2
    在这里插入图片描述
    进入tomcat2容器,ping tomcat1
    在这里插入图片描述
    会发现,此时,可以通过容器名,进行互相ping通。

    这样就做到了,容器和IP解耦,服务间可以通过容器名进行互相访问。

    自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

  • 相关阅读:
    Q&A特辑 | 这场直播解决了我对于电商风控的大部分疑问
    幼儿园核酸预约登记小程序实战开发(上篇)
    【机器学习】MS_MARCO_Web_Search解析说明
    如何实现服务器时间同步
    安装DevEco Studio 3.0 Beta2
    消息队列 随笔 6-spring-kafka
    LeetCode 1582. 二进制矩阵中的特殊位置
    ESP8266-Arduino网络编程实例-Web页面WiFi配置管理
    了解操作系统,什么是操作系统Operation System?
    els 兼容性DC、传递图片到窗口
  • 原文地址:https://blog.csdn.net/Brave_heart4pzj/article/details/126561330