十五、Docker 网络

1、概述

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

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

2、Docker network 相关命令

帮助文档

命令说明
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默认创建了3个网络,我们分别介绍下3种网络

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

3.1、bridge 模式

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

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

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

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

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

查看两个容器IP

这个时候突然centos01挂了,我们又启动了一个centos03,咱们再看看IP变化

 咱们可以看出原本属于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 指定

 

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

3.3、none模式

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

使用--network none指定

 禁用网络功能,只有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

 进入各自容器ping对方

 

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

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

先创建自定义网络my_net:

命令:

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

 进入各自容器ping对方

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈行动派

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值