Products
GG网络技术分享 2025-03-18 16:13 0
在《Docker入门概述》中,提到容器能够在一个松散隔离环境中运行打包的应用程序。这个环境称为容器,这种隔离和安全性允许在宿主机上同时运行许多容器。默认情况下,容器与其他容器以及宿主机相对隔离,容器将应用程序彼此隔离,并将底层基础架构隔离,同时为应用程序提供额外的保护层。另外,还提到容器和虚拟机具有类似的资源隔离和分配优势,但它们之间功能不同,容器虚拟化了操作系统而不是硬件。容器更轻便,效率更高。
从上面的描述中,似乎容器之间只能独立运行,多个容器之间不能互相通信。如果应用程序需要相互通信,主机或外部网络该如何处理呢?
本文将简要介绍一下Docker的容器网络(Docker Container Networks)。
Docker容器(container)和服务(services)的强大和快速流行发展的原因之一,就是可以通过Docker的容器网络能将容器和容器、容器和非Docker容器服务连接在一起互相通信。甚至Docker容器和服务都不需要知道它们是否是部署在Docker上还是其他平台上,它们之间的通信都是无缝连接的。无论Docker主机运行环境是Linux,Windows还是两者兼而有之,都可以使用Docker以与平台无关的方式管理它们。
Docker网络架构建立在一组称为容器网络模型(CNM)的接口上。CNM的目标就是在各种基础设施间提供应用程序可移植性。
由上图可以看出,在Docker Engine层之上的CNM由沙箱(Sandbox)、端点(Endpoint)和网络(Network)三个部分组成。这些组成部分都和操作系统和基础架构无关(容器虚拟化了操作系统而不是硬件),因此无论基础架构如何变化,应用程序层都不会受任何影响。
沙箱 :包含容器网络堆栈的配置。包括容器接口管理,路由表和DNS设置。沙箱执行Linux网络命名空间。沙箱可以包含来自多个网络的不同端点。
端点 :端点将沙箱连接到网络。端点从应用程序中抽象出与网络的实际连接,这样有助于服务可以使用不同类型的网络驱动程序(Network Driver)保持可移植性,从而无需关心如何连接到网络。
网络:CNM没有根据OSI模型指定网络。网络的实现可以是Linux网桥、VLAN等。网络是端点之间连接的集合地(可以认为是端点构成的局域网)。没有连接到网络的端点将不能访问在网络上其他端点。
容器网络模型CNM提供两个可插拔的开放驱动程序:网络驱动(Network Drivers)和IPAM驱动(IPAM Drivers)。
1. 网络驱动:Docker网络驱动程序保证网络正常使用。由于可插拔,可以使用不同的驱动程序并轻松互换以支持不同的网络。可以在Docker引擎或集群上同时使用多个不同网络驱动程序,但每个Docker网络仅通过单个网络驱动程序进行实例化。
网络驱动程序有两种类型:
1.1原生网络驱动程序(Native Network Drivers)
原生网络驱动程序是Docker引擎的一部分,有多种驱动程序并支持不同的功能,如覆盖网络(overlay )或原生网桥(bridges)。
1.2远程网络驱动程序(Remote Network Drivers)
远程网络驱动程序是Docker社区和其他供应商等第三方提供创建的网络驱动程序。这些驱动程序可用于提供与现有软件和硬件的集成。用户还可以在需要现有网络驱动程序不支持的特定功能的情况下创建自己的驱动程序。
2. IPAM驱动:Docker具有原生IP地址管理驱动程序,默认情况下,如果容器没有指定网络IP地址,则Docker为网络和端点提供默认子网或IP地址。也可以通过网络,容器和服务创建命令手动分配IP地址。远程IPAM驱动程序也存在,并提供与现有IPAM工具的集成。
Docker原生网络驱动程序是Docker Engine的一部分,不需要增加任何额外的模块。可以通过标准docker network命令调用和使用。原生网络驱动程序包括:
另外,Docker还支持如下网络驱动程序:
今天的分享就到这里,欢迎大家关注、收藏、转发、评论。谢谢大家支持!
由于默认的bridge桥接网络,重启容器后会改变ip地址。在一些场景下我们希望固定容器IP地址。
docker-compose是docker的一个编排工具,相对于命令模式创建网络,容器等。使用配置文件相对来说更方便,可追溯问题。
直接粘贴docker-compose.yml文件
version: \'2\' services: nginx: image: nginx:1.13.12 container_name: nginx restart: always tty: true networks: extnetwork: ipv4_address: 172.19.0.2 networks: extnetwork: ipam: config: - subnet: 172.19.0.0/16 gateway: 172.19.0.1 |
说明:
gateway是网关地址
subnet是网络号段
extnetwork是自定义的网络名称
上面配置中我们的nginx容器固定ip为172.19.0.2
示例,自定义网络模式:
version: \'2\' services: nginx: image: nginx:1.13.12 container_name: nginx restart: always networks: extnetwork: ports: - 80:80 volumes: - \'/nginx/conf.d:/etc/nginx/conf.d\' nginx2: image: nginx:1.13.12 container_name: nginx2 restart: always networks: extnetwork: ipv4_address: 172.19.0.2 db: image: mysql:5.7 container_name: db volumes: - /var/lib/mysql:/var/lib/mysql restart: always networks: extnetwork: ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: image: wordpress:latest container_name: wordpress depends_on: - db ports: - \"8000:80\" restart: always networks: extnetwork: environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress networks: extnetwork: ipam: config: - subnet: 172.19.0.0/16 gateway: 172.19.0.1 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本网站!
Demand feedback