docker1.9网络新特性,overlay网络实现主机间容器互联

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

Docker1.9引入了新的网络机制,包括一整套的网络操作命令和跨主机的网络支持。

该网络特性主要是为了实现容器的网络互联(单主机/跨主机),取代了之前的--link网络模式。


docker网络命令:

wKioL1diB2-xL25dAAA1KhWkDZ0079.png

查看当前的docker网络:

1
2
3
4
5
# docker network ls
NETWORK ID         NAME               DRIVER           
a77b0f433ea0        none                null                
ddc8ce5a4767        host                host                
fdeed50789ae        bridge              bridge

刚创建的docker,包含3个默认的网络,如上:

  • bridge:容器使用独立网络Namespace,并连接到docker0虚拟网卡(默认模式)。

  • none:容器没有任何网卡,适合不需要与外部通过网络通信的容器。

  • host:容器与主机共享网络Namespace,拥有与主机相同的网络设备。


通过创建新的网络,我们就可以实现容器间的互联。、



单主机容器互联:

 1:创建一个新的docker网络。

1
2
3
4
5
6
7
8
# docker network create net0
579c19e76a171d293cda54c1d93c5246537c43e01ee523010da378c1a6714f60
# docker network ls
NETWORK ID          NAME               DRIVER             
a77b0f433ea0        none                null                
ddc8ce5a4767        host                host                
fdeed50789ae        bridge               bridge                           
579c19e76a17        net0                bridge       ---出现了一个名为net0的新网络

 

 2:创建容器,把容器关联到新建的net0网络。

1
2
3
4
# docker run -idt --name net_test1 --net net0 centos
cbe802f86e72f32c50d2d7780489476c7ccfc5badb8e2e6a37196360415ae726
# docker run -idt --name net_test2 --net net0 centos 
bdc32d45a9a60007961b5df81782c866036f3f303e282912b606e0a839841649

 

 3:测试容器网络互通:

1
2
3
4
5
6
# docker exec net_test1 ping net_test2
PING net_test2 (172.19.0.3) 56(84) bytes of data.
64 bytes from net_test2 (172.19.0.3): icmp_seq=1 ttl=64  time =0.103 ms
64 bytes from net_test2 (172.19.0.3): icmp_seq=2 ttl=64  time =0.077 ms
64 bytes from net_test2 (172.19.0.3): icmp_seq=3 ttl=64  time =0.082 ms
64 bytes from net_test2 (172.19.0.3): icmp_seq=4 ttl=64  time =0.069 ms

  可以看到两个容器间可以通过容器名直接通信。

  进入容器查看/etc/hosts文件,可以看到相应的IP和HOST的映射,docker会把添加到该网络的容器与ip的映射关系写进每一个容器的/etc/hosts文件中。

  wKioL1diCl-giIh6AABIhLlHHVU131.png



主机间的容器互联:

在Docker的1.9中版本中正式加入了官方支持的跨节点通信解决方案,它是通过swarm+overlay网络实现的。

 1:配置swarm docker集群。参考之前的博客:http://icenycmh.blog.51cto.com/4077647/1789505(swarm+zookeeper配置docker集群)

 

 2:通过集群创建overlay网络:

集群间的swarm网路信息需要有一个存储网络信息的地方,这里可以使用zookeeper,如果没有配置,在通过swarm集群配置overlay网络时会报错。

1
2
# vim /etc/sysconfig/docker
OPTIONS= '--selinux-enabled -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --storage-opt dm.no_warn_on_loop_devices=true --cluster-store=zk://192.168.1.110:2181/store --cluster-advertise=192.168.1.121:2375'

如上,在docker启动后台添加--cluster-store=zk://192.168.1.110:2181/store --cluster-advertise=192.168.1.121:2375参数。

创建overlay网络:

1
2
3
4
5
6
7
8
9
10
11
12
13
# docker -H 192.168.1.121:3376 network create --driver=overlay ovr0
# docker -H 192.168.1.121:3376 network ls
NETWORK ID          NAME                    DRIVER
3e2b6eacf589        node2 /docker_gwbridge    bridge              
28a5376c6b19        node2 /none               null                
ddc8ce5a4767        node1 /host               host                
da1289e78b54        node2 /host               host                
98d31593ac87        node2 /bridge             bridge              
fdeed50789ae        node1 /bridge             bridge              
68e6e9d0b0a9        ovr0                  overlay     ---新建的overlay网络   
2df6c6c9b59c        node1 /docker_gwbridge         bridge              
579c19e76a17        node1 /net0              bridge              
a77b0f433ea0        node1 /none               null

通过集群查看网络,可以看到所有节点的网络信息,也可以看到集群中新增了一个overlay网络,名为ovr0。


3:通过集群创建容器:

1
2
3
4
5
6
7
8
9
10
11
# docker -H 192.168.1.121:3376 run -idt  --name test1 --net ovr0 docker.io/centos
ad6e5022af1ad43cd4fe04e10aa1c32d1e8aa45545866b51d8609b6705c8cc0e
# docker -H 192.168.1.121:3376 run -idt  --name test2 --net ovr0 docker.io/centos 
adf2ec96ef6449364316f2a896246154a221f3899a6b8943fed21f30eea18b0e
# docker -H 192.168.1.121:3376 ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                    NAMES
adf2ec96ef64        docker.io /centos     "/bin/bash"               11 seconds ago      Up 10 seconds                                                node1 /test2
ad6e5022af1a        docker.io /centos     "/bin/bash"               15 seconds ago      Up 14 seconds                                                node2 /test1
16457b216799        swarm                "/swarm manage -H 0.0"    3 hours ago         Up About an hour    2375 /tcp , 192.168.1.121:3376->3376 /tcp    node1 /lonely_archimedes
479fdbbe3235        swarm                "/swarm join zk://192"    3 hours ago         Up About an hour    2375 /tcp                                  node2 /drunk_bohr
e3674e871486        swarm                "/swarm join zk://192"    3 hours ago         Up About an hour    2375 /tcp                                  node1 /hungry_fermat

以上命令在集群中创建了两个容器test1和test2,并添加进ovr0网络。可以看到test1被分配在node2节点,test1被分配在node1节点,两个容器处于不同的主机上。


4:测试不同主机上容器的联通:

1
2
3
4
5
6
# docker -H 192.168.1.121:3376 exec  test1 ping test2   
PING test2 (10.0.0.3) 56(84) bytes of data.
64 bytes from test2 (10.0.0.3): icmp_seq=1 ttl=64  time =0.601 ms
64 bytes from test2 (10.0.0.3): icmp_seq=2 ttl=64  time =0.319 ms
64 bytes from test2 (10.0.0.3): icmp_seq=3 ttl=64  time =0.307 ms
64 bytes from test2 (10.0.0.3): icmp_seq=4 ttl=64  time =0.389 ms

两个容器网络已经互通。

查看两个容器的/etc/hosts文件,可以看到相应的IP:容器映射信息。

wKiom1diDmji35TuAABJwVQEAQU120.png










本文转自 icenycmh 51CTO博客,原文链接:http://blog.51cto.com/icenycmh/1789796,如需转载请自行联系原作者
目录
相关文章
|
13天前
|
机器学习/深度学习 安全 网络安全
云端盾牌:云计算时代的网络安全守护在这个数字脉搏加速跳动的时代,云计算以其高效、灵活的特性,成为推动企业数字化转型的强劲引擎。然而,正如每枚硬币都有两面,云计算的广泛应用也同步放大了网络安全的风险敞口。本文旨在探讨云计算服务中网络安全的关键作用,以及如何构建一道坚不可摧的信息防线,确保数据的安全与隐私。
云计算作为信息技术领域的革新力量,正深刻改变着企业的运营模式和人们的生活。但在享受其带来的便利与效率的同时,云服务的安全问题不容忽视。从数据泄露到服务中断,每一个安全事件都可能给企业和个人带来难以估量的损失。因此,本文聚焦于云计算环境下的网络安全挑战,分析其根源,并提出有效的防护策略,旨在为云服务的安全使用提供指导和参考。
|
1月前
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
88 0
Docker跨宿主机容器通信-通过网络跨宿主机互联
|
1月前
|
应用服务中间件 nginx Docker
Docker同一台宿主机容器通信-通过容器名称互联
本文详细介绍了如何通过容器名称实现同一宿主机上容器间的互联,并提供了实战案例。首先,文章解释了容器间通过自定义名称访问的原理,随后演示了创建并连接Tomcat与Nginx容器的具体步骤。此外,还讨论了配置中可能出现的问题及解决方案,包括避免硬编码IP地址和使用自定义容器别名来增强系统的灵活性与可维护性。通过这些实践,展示了如何高效地配置容器间通信,确保服务稳定可靠。
28 1
Docker同一台宿主机容器通信-通过容器名称互联
|
2月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
2月前
|
网络协议 Linux 网络安全
遇到Docker容器网络隔断?揭秘六种超级实用解决方案,轻松让Docker容器畅游互联网!
【8月更文挑战第18天】Docker容器内网络不通是开发者常遇问题,可能因网络配置错、Docker服务异常或防火墙阻碍等原因引起。本文提供六种解决策略:确认Docker服务运行状态、重启Docker服务、检查与自定义Docker网络设置、验证宿主机网络连接、临时禁用宿主机IPv6及检查防火墙规则。通过这些步骤,多数网络问题可得以解决,确保容器正常联网。
99 1
|
25天前
|
Linux 调度 Docker
容器网络概述
【9月更文挑战第9天】容器技术利用如命名空间(namespace)和控制组(cgroup)等技术创建隔离环境,实现资源限制与独立运行。命名空间避免命名冲突,cgroup则能对CPU、内存等资源进行限制。容器状态可通过镜像保存并标准化,确保在任何环境中都能复现相同状态。
|
2月前
|
弹性计算 Prometheus 监控
如何基于容器网络流量指标进行弹性伸缩
【8月更文挑战第13天】基于容器网络流量指标进行弹性伸缩可动态调整资源,提升系统性能与利用率。首先选监控工具如Prometheus,收集并分析网络流量数据。接着定义监控指标及阈值,如入站与出站流量。最后配置如Kubernetes的HPA实现自动化伸缩,并通过测试不断优化策略,确保系统稳定高效运行。
|
2月前
|
Kubernetes Cloud Native 网络安全
云原生入门指南:Kubernetes和容器化技术云计算与网络安全:技术融合的新篇章
【8月更文挑战第30天】在云计算的浪潮中,云原生技术如Kubernetes已成为现代软件部署的核心。本文将引导读者理解云原生的基本概念,探索Kubernetes如何管理容器化应用,并展示如何通过实践加深理解。
|
2月前
|
Linux 调度 Docker
容器网络概述
【8月更文挑战第7天】容器就是 Container,而 Container 的另一个意思是集装箱。其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。
下一篇
无影云桌面