Docker之网络配置

前言:

        在宿主机中安装了docker之后,我们的宿主机将会生成一个docker0的一个网关桥接,而这个桥接就是为了能够让容器与容器直接能够进行一个通讯,所以说,在容器中通讯是一个非常简单也是一个非常方便的模式,怎么进行桥接的如下图所展示出来的一样!

1、什么是Docker网络配置

Docker 的网络配置是指在 Docker 容器之间以及容器与外部网络之间建立通信的方式。Docker 提供了多种网络模式来满足不同的需求。主要的网络模式包括:

  1. 桥接网络(bridge network)(容器创建的时候默认的模式)

    • 这是 Docker 的默认网络模式。它为容器创建一个虚拟网络桥接(bridge),容器之间可以通过这个桥接进行通信。
    • 容器通过分配的 IP 地址在桥接网络中通信,并且可以通过端口映射与主机进行通信。
  2. 主机网络(host network)

    • 使用主机网络模式时,容器直接使用宿主机的网络栈,不会被分配单独的 IP 地址。
    • 这种模式下,容器与宿主机之间没有网络隔离,容器可以直接访问宿主机的网络资源和端口。
  3. 容器网络(container network)

    • 在这种模式下,多个容器可以共享同一个网络命名空间。容器之间通过本地接口直接通信,而不通过宿主机的网络。
    • 这种模式适用于需要容器之间紧密协作的场景。
  4. 自定义网络(overlay network)

    • 这种网络模式用于跨多个 Docker 主机的容器之间的通信。它通过创建一个虚拟网络覆盖在底层主机网络之上,允许容器跨主机通信。
    • 主要用于 Docker Swarm 或 Kubernetes 集群中的容器通信。
  5. macvlan 网络(macvlan network)

    • 这种模式允许为容器分配一个虚拟的 MAC 地址,使其在网络上看起来像是一个独立的物理设备。
    • 常用于需要容器具有独立网络身份的场景,例如与传统网络设备的兼容性要求较高的情况。

每种网络模式都有其适用的场景,可以根据实际需求选择合适的模式来配置 Docker 网络

2、连接容器的三种方法

连接Docker容器的三种主要方式是:

  1. 虚拟IP直接访问

    • 当Docker安装后,会默认创建一个名为docker0的网络桥接,每个容器在启动时都会被分配一个属于该网络的虚拟IP地址。
    • 容器之间可以通过这些虚拟IP地址直接进行通信。例如,如果两个容器分别被分配了IP地址172.17.0.2和172.17.0.3,那么它们可以直接使用这些IP地址进行ping操作或者通过相应的端口进行服务访问。
  2. Docker链接(link)

    • Docker链接是一种允许容器之间互相发现的机制。通过在一个容器创建时指定要链接的另一个容器,可以在容器内部通过容器名来访问被链接容器的服务。
    • 使用--link参数可以创建两个容器间的客户-服务链接,例如docker run --link redis:db -d webapp,其中redis是被链接容器的名字,db是链接别名,在webapp容器内部可以通过db来访问redis容器的服务。
    • 这种方式在Docker的早期版本中较为常用,但在后续版本中逐渐被更灵活的网络配置方式所取代。
  3. 创建自定义网络

    • Docker允许用户创建自定义的网络,容器可以通过加入这些网络来实现互相通信。
    • 使用docker network create命令可以创建一个新的网络,例如docker network create mynet创建了一个名为mynet的网络。
    • 容器在启动时可以通过--network参数指定要加入的网络,例如docker run --network mynet -d container1docker run --network mynet -d container2将两个容器加入到mynet网络中。
    • 在同一个网络中的容器可以通过容器名或者服务名来互相访问,Docker会自动处理DNS解析。

这三种方式提供了不同程度的灵活性和隔离性,用户可以根据具体的应用场景和需求来选择合适的方式连接Docker容器。

3、Docker Networking

        dockerNetworking也就是创建自定义的网络,然后相关的操作如下代码:

        3.1、创建网络

docker network create 网络名称
参数详解案列
--driver指定网络驱动程序。常见的驱动程序包括 bridgehostoverlaymacvlan 等docker network create --driver bridge my_network
--subnet设置网络的子网范围,例如 192.168.1.0/24。如果不指定,Docker 会自动分配一个子网docker network create --subnet 192.168.1.0/24 my_network
--gateway指定网络的网关 IP 地址。网关通常是容器网络的起始点docker network create --gateway 192.168.1.1 --subnet 192.168.1.0/24 my_network
--ip-range设置一个 IP 地址池,从中分配给容器。这个范围应该在指定的子网内docker network create --subnet 192.168.1.0/24 --ip-range 192.168.1.128/25 my_network
--auxiliary-address用于设置网络的辅助地址。这对于某些网络驱动程序(如 bridge)很有用,用来指定特殊的 IP 地址docker network create --auxiliary-address "addr1=192.168.1.2" my_network
--internal创建一个内部网络,使得容器只能与同一网络中的其他容器通信,而不能访问外部网络docker network create --internal my_network
--attachable使网络在 Docker Swarm 中的服务和容器都可以附加到网络。适用于 Swarm 模式下的 overlay 网络。docker network create --driver overlay --attachable my_overlay_network
--label为网络添加标签,用于组织和管理docker network create --label my_label=label_value my_network
--ipam-driver指定 IP 地址管理(IPAM)驱动程序,用于处理 IP 地址分配docker network create --ipam-driver default my_network

        3.2、查看网络的详细信息

docker network inspect 网络名称

        3.3、查看宿主机中创建的网络

docker network ls

        3.4、删除网络

docker network rm 网络名称

        3.5、如何使用网络

1)启动镜像时指定--net参数

sudo docker run -it --name test --net=app  imagename

2)也可以将运行中的容器加入网络

sudo docker network connect app test

第一种:

第二种:

4、Macvlan介绍

macvlan 是一种网络驱动,用于在 Linux 系统中为容器或虚拟机创建虚拟网络接口。它允许容器或虚拟机直接在物理网络上拥有自己的 MAC 地址,使得它们看起来像是独立的物理设备,从而实现高效的网络通信。

macvlan 的主要特点和用途:

  1. 直接网络访问

    • 容器通过 macvlan 网络驱动可以直接访问宿主机的物理网络,具有与物理主机相同的网络配置。这对于需要与物理网络直接通信的应用场景非常有用。
  2. 独立的 MAC 地址

    • 每个使用 macvlan 的容器会被分配一个独立的 MAC 地址,使得网络中的其他设备可以识别它们,就像识别物理设备一样。这有助于满足一些网络安全和管理需求。
  3. 网络隔离

    • macvlan 可以实现网络隔离,使得容器与宿主机的网络流量隔离。不同的容器可以在同一宿主机上拥有不同的 MAC 地址和 IP 地址,从而与其他容器或宿主机的网络流量分开。
  4. 应用场景

    • 适用于需要将容器或虚拟机直接集成到现有物理网络中的场景。例如,需要将容器或虚拟机与现有的网络设备进行互操作,或者需要将容器暴露在物理网络上以便进行特定的网络操作。

使用 macvlan 的注意事项:

  1. 网络接口依赖

    • macvlan 依赖于宿主机上的网络接口。如果指定的网络接口不存在或配置不正确,macvlan 网络将无法正常工作。
  2. 与桥接网络冲突

    • macvlan 网络可能会与宿主机的桥接网络或其他网络驱动冲突,特别是在同一物理接口上使用多个网络驱动时。

总结来说,macvlan 提供了一种强大的方式来将容器直接集成到物理网络中,但它的使用场景和限制需要根据具体需求来考虑。

5、Macvlan的操作

在 Docker 命令中,--driver 选项用于指定要使用的网络驱动。网络驱动决定了 Docker 如何管理和配置网络,以支持容器的网络功能。不同的网络驱动有不同的特性和用途。

在你提到的指令中:

docker network create --driver macvlan --subnet 192.168.111.0/24 --gateway 192.168.111.2 -o parent=ens33 test_macvlan
  • --driver macvlan:这里的 --driver 选项指定了网络驱动类型为 macvlan。这意味着 Docker 将创建一个使用 macvlan 驱动的网络。macvlan 驱动允许容器直接在宿主机的物理网络上拥有自己的 MAC 地址,从而使容器能够像物理设备一样在网络上进行通信。

在这个命令中,其他参数的作用如下:

  • --subnet 192.168.111.0/24:指定了网络的子网范围,即容器在这个子网中获取 IP 地址。

  • --gateway 192.168.111.2:指定了网络的网关地址,通常是用于网络流量的路由。

  • -o parent=ens33:指定了 macvlan 网络的父接口,即容器将使用宿主机的哪个网络接口(在这里是 ens33)来进行网络通信。

  • test_macvlan:这是要创建的网络的名称。

综上所述,--driver 选项是用来选择和配置网络驱动的,以便根据具体的需求和网络架构来管理容器的网络连接。

两台都启动!!!!

启动第一个容器并指定IP

这样不同的宿主机上的不同容器就可以进行通讯了!!!

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值