• 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 关联

  • 相关阅读:
    C和C++导出DLL后在Csharp中调用函数名的差异
    RabbitMQ实现延迟消息的方式-死信队列、延迟队列和惰性队列
    视频怎么打上自己的水印
    Spring BeanFactory容器简介说明
    MGRE结合OSPF(超详解)
    如何使用Vite创建Vue3的uniapp项目
    栈与队列:设计循环队列
    上海亚商投顾: 市场再现弱势调整 节日气氛浓厚
    大数据的关键思考系列28:大数据与时尚业
    【北亚企安数据恢复】Ceph存储介绍&Ceph数据恢复流程
  • 原文地址:https://blog.csdn.net/qq_43341057/article/details/125607927