用模板做网站,电商pc网站建设方案,文章网站建设,重庆市中心在哪个区在Docker中#xff0c;网络配置是一个重要的主题#xff0c;因为容器需要与其他容器或外部网络进行通信。Docker提供了多种网络模式和配置选项#xff0c;以便在不同的场景下满足用户的需求。 本文介绍这些网络模式的区别以及配置#xff0c;相信看完以后你能够掌握Docker网… 在Docker中网络配置是一个重要的主题因为容器需要与其他容器或外部网络进行通信。Docker提供了多种网络模式和配置选项以便在不同的场景下满足用户的需求。 本文介绍这些网络模式的区别以及配置相信看完以后你能够掌握Docker网络的配置以及适应不同的场景做出不同的选择。
一、Bridge网络模式 Docker Bridge网络模式是Docker默认的网络模式它将容器连接到Docker宿主机的虚拟网络中并为每个容器分配一个IP地址。容器之间可以通过IP地址直接通信也可以通过容器名称进行通信。 在Bridge网络模式下Docker会为每个容器创建一个虚拟网桥容器之间的通信都是通过这个虚拟网桥进行的。Docker宿主机上的所有容器都连接到这个虚拟网桥上而Docker宿主机本身也是通过一个特殊的容器名为docker0连接到这个虚拟网桥上的。 当Docker创建容器时它会自动为容器分配一个IP地址并将该地址添加到虚拟网桥的配置中。这样在容器之间通信时就可以使用这个IP地址进行通信了。 需要注意的是Bridge网络模式下的容器只能和同一台主机上的容器通信无法和其他主机上的容器通信。如果需要实现跨主机通信可以使用Docker的Overlay网络模式。 使用以下命令带--network bridge选项可以指定启用bridge模式因为这个模式是默认模式所以即使完全不指定也是默认使用此模式。 docker run -itd --name mycontainer --network bridge nginx 本地已经启动了2个容器是一个springboot应用通过docker命令可以查看到容器的id [rootnode1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d1fd1adc1c7 demo:latest java -jar demo-0.... 3 seconds ago Up 2 seconds 0.0.0.0:8081-8080/tcp optimistic_mirzakhani b8a144de27a9 demo:latest java -jar demo-0.... 4 hours ago Up 4 hours 0.0.0.0:8080-8080/tcp unruffled_mccarthy 使用docker exec命令可以进入容器内部查看IP地址和测试容器与其他容器以及宿主机之间的连通性。 [rootnode1 ~]# docker exec -it b8a144de27a9 sh [rootnode1 ~]# docker exec -it 2d1fd1adc1c7 sh 可以看到分别为两个容器分配了IP地址172.17.0.2和172.17.0.3。 他们之间可以相互ping通且ping宿主机172.17.0.1网络也是相通的。
通过查看主机的网络也可以发现有一个docker0的网桥且IP地址设置为了172.17.0.1。 宿主机也可以访问容器中暴露出来的服务例如如下访问8080端口暴露的web服务。 二、Host网络模式 在Host网络模式下容器将直接使用宿主机的网络接口这样容器就可以像宿主机一样使用主机的IP地址和端口。因此这种模式下的容器与主机之间没有网络隔离但它们与其他容器之间则是隔离的。
与其他Docker网络模式相比Host网络模式的主要特点包括
简单易用不需要对容器进行网络配置与宿主机直接共享网络。性能高因为容器与宿主机共享网络容器之间的通信无需经过网络层可以获得更高的网络性能。安全性较低容器与宿主机共享网络容器之间的网络隔离会降低容器中的应用程序可以直接访问宿主机上的网络接口。 Host网络模式适用于一些特定场景例如需要访问宿主机上的网络接口、需要最大化网络性能、需要简单易用的网络设置等。 可以通过在运行容器时指定–networkhost选项来启动类似上面Bridge网络模式的验证流程我们再次创建两个容器。 [rootnode1 ~]# docker run -d -p 8080:8080 demo:latest --network host 683e6d67f93ec2546b1627fa68c0902da749daaaeea4be344b9f0320f183fe69 [rootnode1 ~]# docker run -d -p 8081:8080 demo:latest --network host 081bd021af82e63094df42fee80f0a58f7fe0bcc36e19f28b18b6b9619863e45 同样进入这两个容器进行连通性验证发现都是能够正常联通的。且直接从容器中可以访问百度网络证明与宿主机共享了网络。 三、Overlay网络模式 Overlay网络模式用于连接跨主机的容器。在这种模式下Docker会创建一个虚拟网络所有连接到这个虚拟网络的容器都可以相互通信无论这些容器运行在哪个主机上。Overlay网络模式需要使用Docker Swarm集群管理工具来管理多个Docker主机之间的通信。 这里启动两个虚拟机分别在两个虚拟机上各创建1个容器。在使用Overlay网络模式前需要先创建一个Overlay网络 docker network create --driver overlay mynetwork 创建一个使用Overlay网络模式的容器 docker run -itd --name demo --network mynetwork demo:latest 在不同主机上启动多个容器并连接到同一个Overlay网络 docker run -itd --name demo1 --network mynetwork demo:latest 在容器内部使用ping命令测试容器之间是否可以相互通信 docker exec -it demo ping demo1 发现是可以正常通信的。
四、None网络模式 在None网络模式下容器不会拥有任何网络接口也没有IP地址因此无法与外部网络通信。这种模式通常用于特殊场景例如需要禁用网络功能的容器。
创建一个使用Host网络模式的容器 docker run -itd -p 8080:8080 --name demo --network none demo:latest 进入容器内部可以看到只有一个lo回环网络没有分配任何IP地址。 五、Macvlan网络模式 Macvlan是一种容器网络模式它允许Docker容器直接连接到主机的物理网络接口。这使得容器能够直接获得一个IP地址并且在网络上可以像主机一样运行。Macvlan网络模式的优点是容器的网络性能非常好而且可以实现容器与主机在同一局域网内相互通信。 在使用Macvlan网络模式时需要指定一个父网卡parent interface也就是一个物理网卡容器将使用该网卡进行通信。容器可以使用静态IP地址或从DHCP服务器获取IP地址。与其他网络模式相比Macvlan网络模式的缺点是较为复杂配置也相对困难。
以下是在Docker中配置和使用Macvlan网络模式的步骤 1、首先需要创建一个Macvlan网络。可以使用以下命令来创建 docker network create -d macvlan \ --subnetsubnet \ --gatewaygateway \ -o parentphysical_interface \ network_name 其中subnet是一个可用于Macvlan网络的子网地址例如192.168.1.0/24gateway是Macvlan网络的网关地址例如192.168.1.1physical_interface是宿主机上用于连接到物理网络的接口名称例如eth0或enp0s3network_name是Macvlan网络的名称。 2、接下来需要在Docker容器中使用这个Macvlan网络。可以使用以下命令来运行容器 docker run -itd \ --namecontainer_name \ --networknetwork_name \ --ipip_address \ image_name 其中container_name是容器的名称network_name是上一步中创建的Macvlan网络的名称ip_address是要分配给容器的IP地址必须是Macvlan网络中的可用地址image_name是要运行的Docker镜像名称。 3、容器现在应该已经成功连接到了宿主机上的物理网络可以使用分配给容器的IP地址来访问容器中运行的服务。
需要注意的是Macvlan网络模式需要宿主机的网卡支持802.1q VLAN标记且容器不能与宿主机共享网络命名空间。
六、Ipvlan网络模式 Ipvlan网络模式是另一种容器网络模式它允许Docker容器使用主机的IP地址来访问网络。不同于Macvlan模式Ipvlan模式中的容器不需要使用主机的物理网卡而是通过虚拟的MAC地址来访问网络。Ipvlan模式的优点是配置简单而且性能也不错。 Ipvlan网络模式支持两种模式L2模式和L3模式。L2模式使用与Macvlan模式相似的技术允许容器与主机在同一子网内。L3模式则允许容器与主机在不同的子网内需要通过路由器进行通信。
要在Docker中配置Ipvlan网络模式需要以下步骤
1、创建Ipvlan网络 首先使用以下命令创建一个新的Ipvlan网络 luaCopy codedocker network create -d ipvlan \ --subnet192.168.1.0/24 \ --gateway192.168.1.1 \ -o parenten0 \ ipvlan-network 其中
-d ipvlan 指定网络驱动程序为Ipvlan--subnet 指定网络子网--gateway 指定网络网关-o parent 指定网络接口这里是Mac上的en0ipvlan-network 是网络的名称
2、启动容器 现在可以启动一个新的容器并将其连接到Ipvlan网络 cssCopy codedocker run --namemy-container \ --networkipvlan-network \ --ip192.168.1.100 \ -d \ nginx 其中
--name 指定容器的名称--network 指定容器连接的网络--ip 指定容器的IP地址-d 指定容器在后台运行nginx 是要运行的容器镜像名称
七、网络模式选择 基于以上介绍做一下Docker网络模式适用场景的总结
bridge默认这种模式适合在单台主机上运行多个容器的场景且多个容器之间需要互相访问。host容器和主机共享网络命名空间和网络接口。这种模式可以实现最大的网络性能和最小的网络延迟适合需要高网络性能的场景。none容器没有网络连接。这种模式适用于特殊的情况如仅用于生成数据卷的容器。overlay在 Docker Swarm 模式下使用的网络模式允许容器在不同主机上的 Docker 引擎中通信。这种模式适合分布式应用程序的场景。macvlan将容器连接到物理网络每个容器分配一个 MAC 地址。这种模式适合需要容器使用主机网络拥有独立 IP 地址的场景如在企业内部网络中运行容器暴露相关的服务供内部人员使用。ipvlan类似于 macvlan但容器共享物理接口可以更有效地使用网络带宽。这种模式适用于需要在容器之间共享网络命名空间的场景。