Docker 网络管理

一、Docker网络简介

Docker网络是容器化应用程序的重要组成部分,它使得容器之间可以互相通信和连接,同时也提供了容器与外部环境之间的隔离和连接。

二、Docker网络网络模式

Docker 提供了多种网络模式,可以通过docker network ls 命令查看docker的网络列表,常见有网络模式有如下:
在这里插入图片描述

  1. Bridge:默认模式,创建一个命名为"docker0"的虚拟网桥设备,将所有容器连接到该网桥设备上,实现容器之间的通信。
  2. Host:容器与主机共享网络命名空间,即容器可以访问主机的网络设备,但主机无法访问容器的网络设备。这种模式下,容器可以使用主机的IP地址和端口号。
  3. None:在容器内创建一个单独的网络命名空间,并使用Docker桥接驱动程序(bridge)将容器连接到该命名空间,实现容器之间的通信。
  4. Container:将容器内的端口映射到宿主机的端口上,以便容器服务可以通过宿主机 IP 和宿主机的端口进行访问,可以使用 -p 参数来指定映射规则。

三、Bridge模式

  当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥。此后,主机上每启动一个Docker容器都会连接到这个虚拟网桥上。
  当创建一个 Docker 容器的时候,容器会获得一个独立的Network Namespace,并在这个独立的Network Namespace下为容器设置一个默认的ip,同时会创建了一对 veth pair接口。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到docker0网桥,名称以 veth 开头。通过这对接口可以让容器与主机进行通信,也可以让容器与容器之间进行通信。
在这里插入图片描述

  1. 指定Bridge模式启动一个容器,默认不添加--net参数启动,就是Bridge模式,也可以通过--net=bridge来指定网络模式为Bridge,通常配合-p来知道主机与容器之间的端口映射。
    docker run -d --name n1 -p 8080:80 nginx
    docker run -d --name n2 --net=bridge -p 8080:80 nginx
  2. 通过docker inspect 容器id 查看容器的信息,显示网络模式为Bridge,以及分配的IP信息。
    在这里插入图片描述

四、Host 模式

Docker的host模式是一种特殊的网络模式,当Docker容器启动时,容器不再会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace,它会自动获取主机的IP地址和端口号,并将其作为容器的IP地址和端口号。容器可以直接访问其他容器或者主机的网络设备,同时,容器还可以使用主机的IP地址进行网络通信,而不需要使用Docker桥接设备分配的私有IP地址。
在这里插入图片描述

  1. 指定为Host 模式启动一个容器,通过--net=host来指定网络模式为Host。
    docker run -d --name n3 --net=host nginx
  2. 通过docker inspect 容器id 查看容器的信息,显示网络模式为Host,IP信息为空。
    在这里插入图片描述

五、None 模式

Docker的None模式下,不会为容器创建任何网络设备,容器无法访问其他容器或者主机的网络设备,也无法使用主机的IP地址进行网络通信。None模式的优点是可以最大程度地隔离容器和主机,避免了容器之间的相互干扰,同时也可以避免Docker桥接设备占用主机的网络接口。因此,none模式适用于需要高隔离性和低网络依赖性的应用程序。
在这里插入图片描述

  1. 指定为None 模式启动一个容器,通过--net=none来指定网络模式为None。
    docker run -d --name n4 --net=none nginx
  2. 通过docker inspect 容器id 查看容器的信息,显示网络模式为Host,IP信息为空。
    在这里插入图片描述

六、Container 模式

Docker的Container模式下,允许多个容器共享同一个网络命名空间,容器可以在该网络中共享ip和端口范围,并通过Docker的网络驱动程序进行通信,从而实现容器之间的网络通信。两个容器除了网络方面,其他的如文件系统,进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信,并且两个容器的端口不能相同。
在这里插入图片描述

  1. 使用默认网络模式创建一个nginx容器n1
    docker run -d --name n1 -p 8080:80 nginx
  2. 使用Container模式创建另一个mysql容器n2,与n1共享网络命名空间。
    docker run -e MYSQL_ROOT_PASSWORD=root -d --name n2 --net=container:n1 --restart=always mysql

七、自定义网络模式

当我们直接使用--net=bridge去指定IP运行docker 的,会提示报错如下:
在这里插入图片描述

如果想要指定ip去运行docker容器的话,就的先创建一个自定义一个网络模式,再指定IP运行docker容器。

  1. 可以通过命令docker network create --driver bridge --subnet 172.30.1.0/24 --gateway 172.30.1.1 my_net去创建一个自定义网络模式。
    在这里插入图片描述

  2. 使用自定义网络模式,指定ip去启动容器
    docker run -d --name n2 --net=my_net --ip 172.30.1.3 -p 8080:80 nginx
    在这里插入图片描述

  3. 查看容器信息
    在这里插入图片描述

  4. 删除自定义网络
    docker network rm my_net

相关推荐

  1. Docker Swarm网络管理

    2024-01-02 18:20:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 18:20:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 18:20:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 18:20:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 18:20:03       18 阅读

热门阅读

  1. 安卓中ViewPager组件的使用场景与优劣分析

    2024-01-02 18:20:03       29 阅读
  2. git环境配置

    2024-01-02 18:20:03       39 阅读
  3. Docker镜像制作之ZLMediakit镜像制作

    2024-01-02 18:20:03       42 阅读
  4. border设置小于1px,在ios上面不显示的问题

    2024-01-02 18:20:03       37 阅读
  5. 常见的排序算法解析实现

    2024-01-02 18:20:03       29 阅读
  6. 利用进制转换(轻松过期末考试)

    2024-01-02 18:20:03       39 阅读
  7. 三维重建 3D Gaussian Splatting:实时的神经场渲染

    2024-01-02 18:20:03       43 阅读
  8. C++递归/递归函数(详细讲解)

    2024-01-02 18:20:03       39 阅读
  9. C++拷贝构造函数介绍

    2024-01-02 18:20:03       34 阅读
  10. hive多分隔符外表支持

    2024-01-02 18:20:03       33 阅读
  11. vue解决执行打包之后打开页面空白问题

    2024-01-02 18:20:03       38 阅读