十五、Docker 网络

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 十五、Docker 网络,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、概述

        Docker 容器和服务如此强大的原因之一是您可以将它们连接在一起,或将它们连接到非 Docker 工作负载。Docker 容器和服务甚至不需要知道它们部署在 Docker 上,或者它们的对等体是否也是 Docker 工作负载。无论您的 Docker 主机运行 Linux、Windows 还是两者的混合体,您都可以使用 Docker 以与平台无关的方式管理它们。

        上述描述是Docker官网描述 Docker network的。说白了,Docker network 可以连接多个容器,使容器之间可以互相通信,并且是容器与Docker宿主机之前通信的桥梁。所以说Docker network在Docker体系中至关重要。

2、Docker network 相关命令

帮助文档

十五、Docker 网络

命令 说明
docker network ls 列出当前所有的网络
 docker network create 网络名称         创建新的网络
docker network rm 网络名称         删除已创建网络
docker network inspect 网络名称 查看网络信息
docker network prune 删除所有不用的网络
docker network connect [OPTIONS] NETWORK CONTAINER 连接一个容器和网络
docker network disconnect [OPTIONS] NETWORK CONTAINER 断开连接一个容器和网络

3、主流网络模式详解

十五、Docker 网络

docker默认创建了3个网络,我们分别介绍下3种网络

docker启动后,会在宿主机上创建一个docker0的虚拟网桥

十五、Docker 网络

3.1、bridge 模式

        bridge模式是docker中默认的网络,它会为每个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,默认为改模式。

它就像个交换机,负责宿主机到容器之间的联通。

使用–network bridge指定,默认使用docker0

十五、Docker 网络

 docker run -it centos:7 /bin/bash  等价于  docker run -it –network bridge  centos:7 /bin/bash

注意:这种模式官网是不推荐使用的,咱们看下反例

十五、Docker 网络

查看两个容器IP

十五、Docker 网络这个时候突然centos01挂了,我们又启动了一个centos03,咱们再看看IP变化

十五、Docker 网络

 咱们可以看出原本属于centos01的IP 172.17.0.2 被分配给centos3容器了,这在传统的服务器上是不可思议的。

我们的微服务项目连接redis、mysql等中间件都是以IP访问的,这个时候如果部署到docker还是以IP访问,岂不是乱套了。

虽然IP变了,但是容器名称不会变化,所以springboot项目部署到docker中连接redis、mysql等中间件要以容器名称连接调用

3.2、host 模式

        host模式,容器不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机IP和端口。

使用–network host 指定

十五、Docker 网络

 十五、Docker 网络

 注意:因为和宿主机公用端口等,此时容器再指定不同的映射端口就会有警告,咱们以tomcat8 为例验证

十五、Docker 网络

3.3、none模式

        host模式,容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接、IP等

使用–network none指定

十五、Docker 网络

 禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

3.4、container模式

        container模式,新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

3.5、自定义网络(推荐)

在3.1中我们说过 bridge模式下,容器的IP可能会变化,最好就别用IP通行,直接通过容器名称通讯。

咱们分两拨验证

  • bridge 模式下,创建两个centos7容器,分别是 centos01和centos02,然后进入各自容器用IP和容器名称分别ping对方看看效果

命令:

docker run -it --name centos01 centos:7 /bin/bash
docker run -it --name centos02 centos:7 /bin/bash

查看各自容器IP

十五、Docker 网络

 进入各自容器ping对方

十五、Docker 网络

 十五、Docker 网络

结论:在bridge网络模式下,容器之间可以以IP通信,不能以容器名称通信 

  • 自定义网络模式下,创建两个centos7容器,分别是 centos01和centos02,然后进入各自容器用IP和容器名称分别ping对方看看效果

先创建自定义网络my_net:

十五、Docker 网络

命令:

docker run -it --name centos01 --network my_net centos:7 /bin/bash
docker run -it --name centos02 --network my_net centos:7 /bin/bash

创建并查看各自IP

十五、Docker 网络

 进入各自容器ping对方

十五、Docker 网络

十五、Docker 网络

 结论:在自定义网络模式下,容器之间可以不以IP通信,而是以容器名称通信(这种方式也是生产环境所推荐的)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/144695.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!