暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Docker 网络之bridge0相关介绍

原创 鸿惊九天 2022-12-04
504

一、 docker0 是本机器在docker 内的Namespace
通过追踪docker0,我们解决如下两个问题:

我们通过多个容器是如何互连的?
单个容器是如何访问外网的 ?
1.1 创建一个 container

docker run -d --name test1 com/library/busybox /bin/sh /bin/sh -c “while true; do sleep 3600; done”

1.2 查看 docker 的网络情况
 docker network ls

1.3 查看容器的网络
查看 test1 的网络是连接到那种 driver 上的:docker network inspect [ bridge 的 network_id]
输出中包含了 containers , 其中包含了 Name 为 test1 和 test2

1.4 查看 container的network
查看命令:ip a
docker0 是本机器 在docker 内的Namespace
docker0 下的 test1 的Namespace 为虚拟的 是 以 veth 开头的

1.5 查看 test1 和test2的网络

docker exec test1 ip a  可以看出eth0@if33 和 veth34bd270@if32是一对

docker exec test2 ip a  可以看出 eth0@if37 和 vethfef8006@if36是一对

并且 veth34bd270@if32 和 vethfef8006@if36 是连到了 docker0 上

1.6 验证veth85d9927@if5是连到了 docker0 上

安装验证工具 bridge-utils: yum install bridge-utils
使用 brctl show

interfaces 的 数值 刚好与 container test1 的对外接口 对应上
说明 container test1 的对外接口 是通过 docker0 桥接出去的

1.7 桥接网络图

1.8 容器是如何访问外网的

answer:通过 NAT 技术 查询 ip tables 然后访问的

二、 手动创建bridge
2.1 bridge的创建
创建 driver 为 bridge 的网络:docker network create -d bridge my-bridge
查看创建的网络 :docker network ls
查看桥接方式: brctl show

2.2 指定连接的网络

创建 容器 指定网络 为新创建的网络
docker run -d --name test3 --network my-bridge hub.c.163.com/library/busybox /bin/sh -c “while true; do sleep 3600; done”

查看 创建的网络 是否有新的 interfaces:docker exec test2 ip a
brctl show 或使用docker network inspect my-bridge 查看

2.3 将test1 和 test2 link 到 my-bridge 上
连接语法: docker network connect [network_name] [container_name]

docker network connect my-bridge test1

验证是否连接上:
docker network inspect my-bridge 此时里面containers是否包含test1和test3

docker network inspect bridge 此时到container 内 也包含了 test1 和 test2

此时在 test1 容器内ping test2 和 test3 的 ip 地址是通的:docker exec -it test1 /bin/sh

此时在 test2容器内ping test3 的 ip 地址是不通的:docker exec -it test2 /bin/sh

用户创建的 network (eg:my-bridge) 内 是可以使用 ping [container_name]
默认使用了docker link。

三、 Docker网络之容器间关联docker link
案例:使用 link 关联后台与数据库
3.1 创建 test1 容器

docker run -d --name test1 hub.c.163.com/library/busybox /bin/sh -c “while true; do sleep 3600; done”

docker exec test1 ip a

3.2 创建 test2 并关联到 test1 上

docker run -d --name test2 --link test1 hub.c.163.com/library/busybox /bin/sh -c “while true; do sleep 3600; done”

3.3 进入test2 容器内
docker exec -it test2 /bin/sh

可以使用 ping test1 即可访问 test1

如果test1是 mysql 服务 可以使用 test1:3306 即可访问数据库

3.4 论证link链接是单向

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论