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

简介:

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,如需转载请自行联系原作者
目录
相关文章
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
1890 39
|
12月前
|
存储 Linux 容器
【Container App】在容器中抓取网络包的方法
本文介绍在Azure Container App中安装tcpdump抓取网络包,并通过Storage Account上传抓包文件的方法。内容包括使用curl和nc测试外部接口连通性、长Ping端口、安装tcpdump、抓取网络包、以及通过crul命令上传文件至Azure Storage。适用于需要分析网络请求和排查网络问题的场景。
331 0
|
网络协议 Docker 容器
使用网络--容器互联
使用网络--容器互联
267 18
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
610 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
450 0
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
592 20
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1504 8
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
516 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
380 10