docker 网络命名空间如何连通?

简介: docker 网络命名空间如何连通?

一、busybox介绍


busybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,busybox有非常广的应用。

[root@iZ2vceej7yes1abpm7yec2Z ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
python                      3.6                 1297140c6dd2        9 days ago          874MB
ubuntu                      latest              d70eaf7277ea        2 weeks ago         72.9MB
busybox                     latest              f0b02e9d092d        4 weeks ago         1.23MB

看到了吧,busybox 这个images只有1.23MB, 这一般用于嵌入式linux系统。

详情参考:https://www.ibm.com/developerworks/cn/linux/l-busybox/index.html

二、运行两个busybox contain,尝试互ping 和 telnet


在busybox的sh下运行一个sleep脚本

1、busybox test1

docker run -d busybox /bin/sh -c "while true; do sleep 3600; done"

2、busybox test2

~]# docker run -d --name test2 busybox /bin/sh -c "while true; do sleep 3600; done"
~]# docker container  ls -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                       PORTS                    NAMES
51ea3cd11968        busybox                        "/bin/sh -c 'while t…"   5 seconds ago       Up 5 seconds                                          test2
4209ba002f3d        busybox                        "/bin/sh -c 'while t…"   3 minutes ago       Up 3 minutes                                          gallant_ramanujan

在container test2中ping 另外一个container

docker exec 在运行中的container中查询ip

 ~]# docker exec  51ea ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
144: eth0@if145: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@iZ2vceej7yes1abpm7yec2Z ~]# 
[root@iZ2vceej7yes1abpm7yec2Z ~]# docker exec  420 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
142: eth0@if143: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

两个容器相互ping,可以ping通

 ~]# docker exec 51e ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.093 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.065 ms
64 bytes from 172.17.0.3: seq=2 ttl=64 time=0.070 ms
^C
[root@iZ2vceej7yes1abpm7yec2Z ~]# 
[root@iZ2vceej7yes1abpm7yec2Z ~]# docker exec 420 ping 172.17.0.4
PING 172.17.0.4 (172.17.0.4): 56 data bytes
64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.083 ms
64 bytes from 172.17.0.4: seq=1 ttl=64 time=0.071 ms
64 bytes from 172.17.0.4: seq=2 ttl=64 time=0.068 ms

这是如何实现的呢?请看第三节

三、networknamespace的实现原理


3.1 如何创建和销毁linux 的netns?


~]# ip netns add net1
[root@iZ2vceej7yes1abpm7yec2Z ~]# ip netns add net2
[root@iZ2vceej7yes1abpm7yec2Z ~]# 
[root@iZ2vceej7yes1abpm7yec2Z ~]# ip netns list
net2
net1

3.2 如何在linux中查看netns的ip?


上面创建的这两个容器都有自己的netns,通过docker exec查看ip和端口。linux中也有同样的命令。

 ~]# ip netns exec net1 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

执行ip link

 ~]# ip netns exec net1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

只有一个link,是本地回环口。

稍后会绑定一个link 和另外一个netns互通。

启动l0端口

~]# ip netns exec net1 ip link set dev lo up
[root@iZ2vceej7yes1abpm7yec2Z ~]# 
[root@iZ2vceej7yes1abpm7yec2Z ~]# ip netns exec net1 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

状态现在变为unknown,这和本地的回环口一样,只有两端都连接时,例如eth0会和mac的虚拟端口连接起来,必须是一对才会显示up。

3.3 docker 中的网络连接


20201119150134799.png

通过docker network inspect 可以看到bridge上的连接就是0.4这个ip地址。

20201119150242929.png

本地的ip a结果分析

20201119150414363.png

目录
相关文章
|
20天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
132 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
1月前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
39 6
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
110 7
|
2月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
49 5
|
2月前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
2月前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
2月前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
2月前
|
Linux Docker 容器
【赵渝强老师】Docker的Bridge网络模式
本文介绍了Docker容器的网络隔离机制及其四种网络模式:bridge、container、host和none。重点讲解了默认的bridge模式,通过示例演示了如何创建自定义bridge网络并配置容器的网络信息。文中还附有相关图片和视频讲解,帮助读者更好地理解Docker网络的配置和使用方法。
|
20天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
59 17
|
30天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。