Docker 网络简单了解

Docker 网络简单了解

使用与原理

docker network ls 查看 docker 中的所有网络

docker network create test 创建名字为 test 的网桥

docker run --name=nginx --net=test -d nginx 创建容器,使用 --net=test 指定容器连接到 test 网桥

Docker可以有以下 4 种网络模式:

  • host模式:使用 --net=host 指定。
  • none模式:使用 --net=none 指定。
  • bridge模式:使用 --net=bridge 指定,默认设置。
  • container模式:使用 --net=container:NAME_or_ID 指定。

同时每个容器和 docker0 都建立了 veth pair 对, 来建立一个端口对,veth pair 对的一端连接的是容器通过 network namespace 隔离出来的网络空间并且命名为 eth0 另一端链接 docker0 网桥

docker0 会分配一个内网的 IP 给容器, 在宿主机内部可以通过这个 IP 来访问容器,容器之间也能够通过网桥通信

out-bound(出站):在 docker 默认安装的时在 iptable 中添加了一个转化规则,从docke0 出去的请求都做了一个NAT转换,把 docker0 转换成宿主机的 eth0 发送出去

in-bound(入站):宿主机的外部要想访问容器内部只能通过 docker-proxy 代理

查看 docker 得进程就会发现做的代理

img

查看容器端口映射和 docker-proxy 一致

img

原理图(桥接模式)

  1. 创建两个容器,容器 1 和容器 2。创建容器 1 时不指定网络,创建容器 2 时指定网络,通过查看其 ip 发现他们在同一个网络下(docker0)

img

  1. 通过 docker network create test 创建 test 网桥,发现宿主机多出来了一个网卡

img

  1. 创建容器 3 并指定其网桥为 test(docker run --name=nginx2 --net=test -d nginx
  2. 小实验1:在容器 1 中可以通过 ip ping 通容器 2,但不能通过 ip ping 通容器 3。说明不同网络的容器是相互隔离的

img

https://www.cnblogs.com/zuxing/articles/8780661.html

https://blog.csdn.net/qq_21047625/article/details/88727611

问题

如何通过容器名访问一个容器

通过 --link=xxx 参数关联容器

创建两个容器,后者关联前者

img

关联的原理(在声明关联关系的容器的 /etc/hosts 记录本地 dns 缓存)

img

因此可在 nginx-2 通过 nginx-1 访问容器 1

img

上边的两个容器都使用了默认的 bridge 网络,不在同一个网络中的两个容器可以关联吗?let’s check it out!

img

结果:并不能!说明不同网络的容器不能通过 --link 关联

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值