一. 案例

1.创建一个 container

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

2.进入到 container 内

  docker exec -it test1 /bin/sh

3.查看 当前网络 ip a

  可以看出 其使用的 ip 地址为 127.0.0.1  和 172.17.0.2

4. 退出 到 虚拟机 使用 ip a

  可以看出 其 ip 地址 与 test1 内的 ip 地址不同  所以 通过 network Namespace 实现了网络的隔离

5. 再次创建相同的容器

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

6.进入 查看新 容器的 IP

  docker exec test2 ip a

  可以看出 其使用的 ip 地址为 127.0.0.1  和 172.17.0.3

7. 进入 test2 容器 并 ping 通 test1 是可以 ping 通的

  docker exec -it test1 /bin/sh

  ping 172.17.0.2

二. network Namespace 操作

  1. 查看所有 network Namespace

    sudo ip netns list

  2. 删除 network Namespace

    sudo ip netns delete [ list 出来的项 ]

  3. 添加  network Namespace

    sudo ip netns add [eg:test1]

  4.查看创建的 容器 test1 的 ip

    sudo ip netns exec test1 ip a  在 test1 容器内 执行 ip a 命令

    sudo ip netns exec test1 ip link   在 test1 容器内 执行 ip link 命令

    sudo ip netns exec test1 ip link set dev lo up 让 test1 容器内 的 lo 回管口 up 起来

三 连接两个容器

  

  1. 添加一对link  (即 图中 那根管道)

    sudo ip link add veth-test1 type veth peer name veth-test2

    使用 ip a 查看创建的 link

      会出现 veth-test2@veth-test1   和  veth-test1@veth-test2 这一对link

  2. 将 veth-test1 添加到 test1 容器中  并且 将 veth-test2 添加到 test2 容器中

    sudo ip link set veth-test1 netns test1

    sudo ip netns exec test1 ip link   查看是否包含 veth-test1

    ip a                 查看包含的 veth 是否还包含 veth-test1

    sudo ip link set veth-test2 netns test2

    sudo ip netns exec test2 ip link  查看是否包含 veth-test2

    ip a                 查看包含的 veth 是否还包含 veth-test2

  3. 分配 ip 地址

    分配 ip 地址 test1

      sudo ip netns exec test1 ip addr add 192.168.1.13/24 dev veth-test1

    分配 ip 地址 test2

      sudo ip netns exec test2 ip addr add 192.168.1.14/24 dev veth-test2

    使用 ip link 查看是否分配 ip 地址  发现 网络 还未开启

      sudo ip netns exec test1 ip link

    将 test1 和 test2 的网络 开启

      sudo ip netns exec test1 ip link set dev veth-test1 up

      sudo ip netns exec test2 ip link set dev veth-test2 up

    使用 ip a 查看是否 分配ip 地址

      sudo ip netns exec test1 ip a

      sudo ip netns exec test2 ip a

    使用 ping 互通 test1 test2

      sudo ip netns exec test1 ping 192.168.1.14

      sudo ip netns exec test2 ping 192.168.1.13

13.docker 网络 docker NameSpace (networkNamespace)的更多相关文章

  1. 14. docker 网络 docker bridge0 详解

    1.创建一个 container docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600; done ...

  2. 15 docker 网络 docker 容器之间的关系 docker link

    1.案例:使用 link 关联后台与数据库 创建 test1 容器 docker run -d --name test1 busybox /bin/sh -c "while true; do ...

  3. 12. docker 网络 docker network (docker 网络)

    1. 环境准备 编写 Vagrantfile 为 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.require_version "> ...

  4. 理解Docker :Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  5. (转)Docker 网络

    转:https://www.cnblogs.com/allcloud/p/7150564.html 本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker ...

  6. Docker 网络原理

    引言 学习docker网络,可以带着下面两个问题来探讨 容器之间可以相互访问的原理 容器暴露端口后,通过宿主机访问到容器内应用,并且对于访问端而言不用感知容器存在的原理 Docker 本身的技术依赖L ...

  7. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  8. docker网络

    docker网络   Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一 ...

  9. 16.2,docker网络

      Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一个hosts解析记 ...

随机推荐

  1. c++程序—布尔值

    #include<iostream> using namespace std; #include<string> int main() { //创建bool数据类型 bool ...

  2. 记-OSPF学习

    LSA Type 1:Router LSA1.传播范围 :只能在本区域2.通告者 :每台路由器 (router-id作为标识)3.内容 :路由和拓扑信息show ip ospf database ro ...

  3. CSS根据屏幕分辨率宽度自动适应的办法

    CSS根据屏幕分辨率宽度自动适应的办法 第一种办法是js选择CSS <SCRIPT language=JavaScript><!-- Beginif (screen.width == ...

  4. BZOJ 4029 [HEOI2015]定价

    题解: !!!!!! 分类讨论,情况挺多 #include<iostream> #include<cstdio> #include<cstring> using n ...

  5. MyBatis 关联查询的实现:一对多

    有2个实体:用户.订单,一个用户可以拥有多个订单,同时这多个订单属于一个用户,即一对多. user_tb: order_tb: 在“多”的一方(order)添加“一”的一方(user)的主键(user ...

  6. 七、SAP中输出当前日期

    一.在Sap中输出当前日期的函数是sy-datum,代码如下: 二.输出效果如下

  7. 简单makefile示例

    Makefile cmd: - g++ 相信在linux下编程的没有不知道makefile的,刚开始学习linux平台下的东西,了解了下makefile的制作,觉得有点东西可以记录下. 下面是一个极其 ...

  8. kubelet组件详解---链接

    https://blog.csdn.net/jettery/article/details/78891733

  9. VS程序不显示控制台

    之所以会有这样的想法是因为,有时候我会用到一些库,这些库在使用的时候会在控制台输出一些信息,虽然这是无可厚非的事情,但是,如果我写了一个界面,这个时候当然是希望要显示什么就显示在界面上,或者就不要显示 ...

  10. django-blog:多对多查询

    简单写一下多对多查询model 不是多对多的字段我就没写上来的 class Tag(models.Model): name = models.CharField(max_length=20,verbo ...