Docker网络

文章详细介绍了Docker网络的不同类型,包括none、host、bridge和user-defined网络,以及容器如何与外部通信。重点讨论了跨主机容器通信,提到了Docker的overlay网络驱动和VxLAN技术,以及创建和配置覆盖网络以实现跨主机通信的过程。
摘要由CSDN通过智能技术生成

前言

Docker网络主要解决下面几个问题:

  • 同一个宿主机上的多个容器之间如何通信

  • 容器与外部如何通信

  • 跨主机容器如何通信

同一个宿主机上多容器之间的通信

同一个宿主机上多容器之间的网络可以分为下面几种网络:none网络、host网络、bridge网络、user-defined网络。其中前面三种网络,在安装docker时会自动创建,如下图我们可以通过命令docker network ls查看:

409aaabf04c4a65e6b867126e5e5bc55.png
image.png

所谓none网络,其实就是没有网络。当一个容器挂在到该网络时,该容器只有用于本地LOOPBACK的网卡,没有其他可以与外部通讯的网卡。创建容器时时我们可以通过 --network=none指定使用none网络:docker run -it --newwork=none busybox

1d4644520154a7ffe32f0f7baed2ee33.png
image.png

所谓host网络是指容器共享Docker 宿主机的网络栈。我们可以在创建容器时使用 --network=host指定使用host网络:docker run -it --network=host  busybox

b399c1afeb7a4fa9132121dc51d89d3e.png
image.png

所谓bridge网络是指Docker安装时会创建的命名为docker0的Linux bridge。如果创建容器时不指定--network,则默认容器都会挂到docker0上。

所谓user-defined网络,是指用户可以根据业务需要创建user-defined网络,Docker提供三种user-defined网络驱动:bridge、overlay和macvlan。比如创建bridge网络示例:docker network create --driver bridge my_network

bb3d0c9e1df752614d4f45297ae035d2.png
image.png

同一个宿主机上的多个容器容器要能通信,必须要有属于同一个网络的网卡。然后容器就可以通过IP交互了。具体做法是在容器创建时通过 --network指定同一个网络,或者通过docker network connect将现有容器加入到指定网络

容器与外部如何通信

首先我们先看在容器内是否可以访问外部网络,如下我们在容器内ping www.baidu.com可知是通的,其实这是通过NAT实现的

ca2231dbd9a497e4b0077a8080b0b367.png
image.png

然后我们看外部如何访问容器网络,如下图我们启动了一个容器:

4f7d9a3b75efccba2f067d3538c6bbed.png
image.png

然后我们在浏览器里面访问http://localhost:8080/就可以看到容器内部启动的监听端口为80的服务。其实我们创建容器时,通过端口映射把宿主机上的8080端口映射到了容器内部的80端口,从而实现外部可以访问容器内部的服务。

跨主机容器通信

跨主机网络方案包括:

  • (1)docker原生的overlay和macvlan;

  • (2)第三方方案:常用的包括flannel、weave和calico
    本文我们研究overlay,为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络。VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网二层服务,但是拥有更强的扩展性和灵活性

我们可以使用docker network create -d overlay  my_overlay_network来创建一个overlay网络。一开始执行会报错如下:

6803b1b7307436698231a6d058f2c8bf.png
image.png

这时我们需要执行下面命令,让当前节点成为管理节点,然后就可以创建覆盖网络:

4457cc25c6857efeae6d8275ac6bf62a.png
image.png

然后我们就可以在创建容器时指定网络为该覆盖网络。

最后我们可以在另外一个机器2上执行下面命令让该机器成为机器1的管理节点:

b82363d5d1ffb65b96c7264b4bcbf790.png
image.png

然后再机器2也启动一个容器,并且指定网络为覆盖网络,则这两个容器就可以跨主机通信了。

戳下面阅读

👇

我的第三本书    我的第二本书    我的第一本书

程序员的办公神器    ForkJoinPool    K8s网络模型

  我的视频号  

点亮再看哦👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值