前言:
在宿主机中安装了docker之后,我们的宿主机将会生成一个docker0的一个网关桥接,而这个桥接就是为了能够让容器与容器直接能够进行一个通讯,所以说,在容器中通讯是一个非常简单也是一个非常方便的模式,怎么进行桥接的如下图所展示出来的一样!
1、什么是Docker网络配置
Docker 的网络配置是指在 Docker 容器之间以及容器与外部网络之间建立通信的方式。Docker 提供了多种网络模式来满足不同的需求。主要的网络模式包括:
-
桥接网络(bridge network):(容器创建的时候默认的模式)
- 这是 Docker 的默认网络模式。它为容器创建一个虚拟网络桥接(bridge),容器之间可以通过这个桥接进行通信。
- 容器通过分配的 IP 地址在桥接网络中通信,并且可以通过端口映射与主机进行通信。
-
主机网络(host network):
- 使用主机网络模式时,容器直接使用宿主机的网络栈,不会被分配单独的 IP 地址。
- 这种模式下,容器与宿主机之间没有网络隔离,容器可以直接访问宿主机的网络资源和端口。
-
容器网络(container network):
- 在这种模式下,多个容器可以共享同一个网络命名空间。容器之间通过本地接口直接通信,而不通过宿主机的网络。
- 这种模式适用于需要容器之间紧密协作的场景。
-
自定义网络(overlay network):
- 这种网络模式用于跨多个 Docker 主机的容器之间的通信。它通过创建一个虚拟网络覆盖在底层主机网络之上,允许容器跨主机通信。
- 主要用于 Docker Swarm 或 Kubernetes 集群中的容器通信。
-
macvlan 网络(macvlan network):
- 这种模式允许为容器分配一个虚拟的 MAC 地址,使其在网络上看起来像是一个独立的物理设备。
- 常用于需要容器具有独立网络身份的场景,例如与传统网络设备的兼容性要求较高的情况。
每种网络模式都有其适用的场景,可以根据实际需求选择合适的模式来配置 Docker 网络
2、连接容器的三种方法
连接Docker容器的三种主要方式是:
-
虚拟IP直接访问:
- 当Docker安装后,会默认创建一个名为docker0的网络桥接,每个容器在启动时都会被分配一个属于该网络的虚拟IP地址。
- 容器之间可以通过这些虚拟IP地址直接进行通信。例如,如果两个容器分别被分配了IP地址172.17.0.2和172.17.0.3,那么它们可以直接使用这些IP地址进行ping操作或者通过相应的端口进行服务访问。
-
Docker链接(link):
- Docker链接是一种允许容器之间互相发现的机制。通过在一个容器创建时指定要链接的另一个容器,可以在容器内部通过容器名来访问被链接容器的服务。
- 使用
--link
参数可以创建两个容器间的客户-服务链接,例如docker run --link redis:db -d webapp
,其中redis
是被链接容器的名字,db
是链接别名,在webapp
容器内部可以通过db
来访问redis
容器的服务。 - 这种方式在Docker的早期版本中较为常用,但在后续版本中逐渐被更灵活的网络配置方式所取代。
-
创建自定义网络:
- Docker允许用户创建自定义的网络,容器可以通过加入这些网络来实现互相通信。
- 使用
docker network create
命令可以创建一个新的网络,例如docker network create mynet
创建了一个名为mynet
的网络。 - 容器在启动时可以通过
--network
参数指定要加入的网络,例如docker run --network mynet -d container1
和docker run --network mynet -d container2
将两个容器加入到mynet
网络中。 - 在同一个网络中的容器可以通过容器名或者服务名来互相访问,Docker会自动处理DNS解析。
这三种方式提供了不同程度的灵活性和隔离性,用户可以根据具体的应用场景和需求来选择合适的方式连接Docker容器。
3、Docker Networking
dockerNetworking也就是创建自定义的网络,然后相关的操作如下代码:
3.1、创建网络
docker network create 网络名称
参数 | 详解 | 案列 |
--driver | 指定网络驱动程序。常见的驱动程序包括 bridge 、host 、overlay 、macvlan 等 | 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
的主要特点和用途:
-
直接网络访问:
- 容器通过
macvlan
网络驱动可以直接访问宿主机的物理网络,具有与物理主机相同的网络配置。这对于需要与物理网络直接通信的应用场景非常有用。
- 容器通过
-
独立的 MAC 地址:
- 每个使用
macvlan
的容器会被分配一个独立的 MAC 地址,使得网络中的其他设备可以识别它们,就像识别物理设备一样。这有助于满足一些网络安全和管理需求。
- 每个使用
-
网络隔离:
macvlan
可以实现网络隔离,使得容器与宿主机的网络流量隔离。不同的容器可以在同一宿主机上拥有不同的 MAC 地址和 IP 地址,从而与其他容器或宿主机的网络流量分开。
-
应用场景:
- 适用于需要将容器或虚拟机直接集成到现有物理网络中的场景。例如,需要将容器或虚拟机与现有的网络设备进行互操作,或者需要将容器暴露在物理网络上以便进行特定的网络操作。
使用 macvlan
的注意事项:
-
网络接口依赖:
macvlan
依赖于宿主机上的网络接口。如果指定的网络接口不存在或配置不正确,macvlan
网络将无法正常工作。
-
与桥接网络冲突:
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
这样不同的宿主机上的不同容器就可以进行通讯了!!!