网络命名空间基本原理

单机版多容器实例网络交互原理

  • 在宿主机上面打开两张网卡eth0与eth1,打通两张网卡的链路
  • 在test1上面启动一个veth网卡,创建一个namespace;并桥接到eth0上面
  • 在test2上面启动一个veth网卡,创建一个namespace;并桥接到eth1上面
  • 对test1与test2进行地址配置
  • 测试网络交互情况

模拟实验

添加两个namespace

[root@host- ~]# ip netns add test1
[root@host- ~]# ip netns add test2

查看添加状况

[root@host- ~]# ip netns list
test2
test1 [root@host- ~]# ip netns exec test1 ip addr
: lo: <LOOPBACK> mtu qdisc noop state DOWN group default qlen
link/loopback ::::: brd :::::
[root@host- ~]# ip netns exec test2 ip addr
: lo: <LOOPBACK> mtu qdisc noop state DOWN group default qlen
link/loopback ::::: brd ::::: PS:这里可以看到namespace还没有mac地址

添加一对虚拟网卡

[root@host- ~]# ip link add veth-test1 type veth peer name veth-test2

对虚拟网卡与namespace做捆绑

[root@host- ~]# ip link set veth-test1 netns test1
[root@host- ~]# ip link set veth-test2 netns test2

对namespace中的虚拟网卡做地址设定,并激活

[root@host- ~]# ip netns exec test1 ip addr add 10.1.1.100/ dev veth-test1
[root@host- ~]# ip netns exec test2 ip addr add 10.1.1.200/ dev veth-test2
[root@host- ~]# ip netns exec test1 ip link set dev veth-test1 up
[root@host- ~]# ip netns exec test2 ip link set dev veth-test2 up

查看设置的状况

[root@host- ~]# ip netns exec test1 ip addr
: lo: <LOOPBACK> mtu qdisc noop state DOWN group default qlen
link/loopback ::::: brd :::::
: veth-test1@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default qlen
link/ether f2:c2:eb:2b::d6 brd ff:ff:ff:ff:ff:ff link-netnsid
inet 10.1.1.100/ scope global veth-test1
valid_lft forever preferred_lft forever
inet6 fe80::f0c2:ebff:fe2b:8d6/ scope link
valid_lft forever preferred_lft forever [root@host- ~]# ip netns exec test2 ip addr
: lo: <LOOPBACK> mtu qdisc noop state DOWN group default qlen
link/loopback ::::: brd :::::
: veth-test2@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default qlen
link/ether 5e::df:2b:3d:fe brd ff:ff:ff:ff:ff:ff link-netnsid
inet 10.1.1.200/ scope global veth-test2
valid_lft forever preferred_lft forever
inet6 fe80::5c06:dfff:fe2b:3dfe/ scope link
valid_lft forever preferred_lft forever

测试实验结果

[root@host- ~]# ip netns exec test1 ping 10.1.1.200
PING 10.1.1.200 (10.1.1.200) () bytes of data.
bytes from 10.1.1.200: icmp_seq= ttl= time=0.141 ms
^C
--- 10.1.1.200 ping statistics ---
packets transmitted, received, % packet loss, time 0ms
rtt min/avg/max/mdev = 0.141/0.141/0.141/0.000 ms

网络基础之桥接原理

如上图所示,用户通过docker创建的容器,通过namespace桥接到宿主机的虚拟网卡,虚拟网卡会和docker的桥接网卡做一个绑定,这样docker容器通过namespace转到虚拟网卡,虚拟网卡通过桥接的方式与其他设备进行通信。需要注意,每一个docker容器都会产生一个相关的namespace,同理也会产生一个相关的虚拟网卡在宿主机中;相关命令如下:

查看docker相关的网卡
docker network ls 查看网关的详情
docker network inspect dockerid

网络基础之link

相关命令

创建test2的时候,添加一个test1的dns反向解析记录;test1必须事先创建好,如不存在则会报错。
docker run -itd --name test2 --link test1 centos 创建test3的时候,指定网络信息。
docker run -itd --name test3 --network my-bridge 创建一个docker网络
docker network create -d bridge my-bridge
PS:-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode 对指定的容器添加额外的网卡,这样就可以不使用link的方式来连接两个容器的信息了
docker network connect my-bridge test2

docker网络模式有四种,具体详情如下:

  • 第一种:桥接模式,也是默认模式;容器与服务器外部通过桥接网卡进行通信,通过桥接网卡做NAT来进行实现;
  • 第二种:自定义模式,自己可以定义相应的网络环境,并且可以对指定网卡做相应的操作
  • 第三种:host模式,相当于网络中的DMZ转发
  • 第四种:none模式,无namespace模式,相当于没有网卡

网络基础之端口映射

docker run -itd --name web -p 80:80 nginx:创建一个nginx的web服务,并且将web服务的端口映射到宿主机;注意:可以使用多个-p来指定端口范围,从而达到范围映射

参考地址:https://li-sen.github.io/2018/12/19/docker%E7%BD%91%E7%BB%9C%E8%AF%A6%E8%A7%A3/

Docker基础内容之网络基础的更多相关文章

  1. JS基础内容小结(基础)(一)

    字符串的各类方法 str.charAt(1); 从第0个开始计算获取第一个子符串,如str=‘你好吗’获取到‘好’ str.charCodeAt(1); 获取对应字符串的编码数字:从第0个开始计算 S ...

  2. Linux基础-7.Linux网络基础设置

    装好Linux,Linux一般会默认使用NetworkManager来辅助管理网络配置.对于配置Linux服务器来说,我们不需要NetworkManager来配置网络,所以要关闭它,不然它会影响手动配 ...

  3. Linux网络基础-总

    目录 Linux网络基础 一.网卡和数据包的转发 1.收包流程 二.多网卡bonding 三.SR-IOV 四.DPDK 五.TUN/TAP 六.Linux bridge 和VLAN 七.TCP/IP ...

  4. docker基础内容讲解

    一.初识docker 1.1 LXC介绍 LXC为LinuX Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提 ...

  5. Docker容器网络-基础篇

    开源Linux 一个执着于技术的公众号 Docker的技术依赖于Linux内核的虚拟化技术的发展,Docker使用到的网络技术有Network Namespace.Veth设备对.Iptables/N ...

  6. Docker网络基础:快速指南

    Docker网络基础:快速指南 原文连接:http://blogxinxiucan.sh1.newtouch.com/2017/07/30/Docker网络基础:快速指南/ 了解有关扩展网络功能的默认 ...

  7. docker 容器网络基础

    ======================== docker缺省自带的网络 ======================== host 网络, This enables a container to ...

  8. docker的网络(基础)

    Docker的网络子系统是可插拔的,使用驱动程序.默认情况下存在多个驱动程序,并提供核心网络功能: bridge:docker默认的网络驱动.如果未指定驱动程序,则这是需要创建的网络类型.当应用程序在 ...

  9. 前端学HTTP之网络基础

    × 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...

随机推荐

  1. E20180525-hm

    sensitive adj. 敏感的; 感觉的; [仪] 灵敏的; 易受影响的; lookup v. 查找; 查表; speedy  adj. 快的,迅速的; 敏捷的 marshal  vt. 整理, ...

  2. 51nod1416(dfs)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1416 题意:中文题诶- 思路:dfs 搜索同一颜色的点.. 只 ...

  3. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

    传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...

  4. scrapy的中间件Downloader Middleware实现User-Agent随机切换

    scrapy的中间件Download Middleware实现User-Agent随机切换   总架构理解Middleware 通过scrapy官网最新的架构图来理解: 从图中我们可以看出,在spid ...

  5. Codeforces 1132D(二分模拟)

    要点 二分显然,关键在于怎么判断 题解方法:开k个队列代表每个时间有哪些电脑会挂掉,这部分O(n)预处理一下,之后扫一遍时间,每个时间点贪心选取最靠前的会挂的电脑未雨绸缪给它充电,然后看看充电以后要不 ...

  6. 字符串与C51的格式化输出

    一字符数组和字符指针: 字符指针可以用字符串对其直接初始化和随时赋值:而字符数组可以用字符串进行初始化,但不能用字符串对其进行随时赋值(但此时可以定义一个字符串指针指向字符数组,然后用字符串对指针随时 ...

  7. [转] boost:lexical_cast用法

    转载地址:http://www.habadog.com/2011/05/07/boost-lexical_cast-intro/ 一.lexical_cast的作用lexical_cast使用统一的接 ...

  8. jquery.validate自定义验证--成功提示与择要提示

    1. 自定义验证--成功提示 1) 添加选项 errorClass: "unchecked", validClass: "checked", errorElem ...

  9. 再看SpringMVC通过一个DispatcherServlet处理Servlet

    初始入口: org.springframework.web.context.ContextLoaderListener org.springframework.web.context.ContextL ...

  10. 运行nodejs项目报Process finished with exit code 1 错误

    在项目中,明明在别人的机子上项目可以运行,但是复制到自己的电脑就无法就无法启动.报Process finished with exit code 1错误,也没提示错误地方.自己倒腾了很久总结了几个解决 ...