『 云原生·Docker』Docker网络

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

系列文章目录

本系列主要分为以下六大部分,正在更新中,尽请期待

🚩点击关注本专栏


提示已经更新的或正在更新的文章前面打勾了哈

文章目录


前言

当你开始大规模使用Docker时你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器技术有很多令人称道的功能如Docker的镜像管理。然而Docker同样有着很多不完善的地方网络方面就是Docker比较薄弱的部分。因此我们有必要深入了解Docker的网络知识以满足更高的网络需求。

一、初识Docker网络

Docker 默认启动的时候会为我们创建三个网络

  • bridge创建容器默认连接到此网络
  • none
  • host

我们可以使用命令来列出docker当前的网络如下

docker network ls

Docker能干嘛

首先我们要知道Docker 容器内部的 IP 是有可能变化的。

通过Docker网络我们可以实现

  1. 容器间的互联、通信以及端口映射。
  2. 可以通过服务名直接通信而不受容器 IP 变化的影响。

二、常用基本命令

1.Docker 网络的帮助命令

  • 命令
docker network --help

2.查看网络

  • 命令
docker network ls

3.查看网络源数据

  • 命令
docker network inspect xxx

4.创建网络

  • 命令
docker network create xxx

5.删除网络

  • 命令
docker network rm xxx

三、网络模式

Docker网络模式主要有四种

  1. bridge 模式默认
  2. host模式
  3. none模式
  4. container模式

接下来我们对这四种模式分别进行学习

1.bridge 模式

Docker 使用 Linux 桥接在宿主机虚拟一个 Docker 容器网桥( docker0 )Docker启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址称为 Container-IP 同时 Docker 网桥是每个容器的默认网关。

因为在同一宿主机内的容器都接入同一个网桥这样容器之间就能够通过容器的 Container-IP 直接通信。

docker run 的时候没有指定 network 的话默认使用的网桥模式就是 bridge 使用的就是 docker0

在宿主机使用 ifconfig 命令就可以看到

  • docker0 和自己 createnetworketh0eth1eth2……分别代表网卡一网卡二网卡三……
  • lo 代表127.0.0.1localhost
  • inet addr 用来表示网卡的 IP 地址

网桥 docker0 创建一对对等虚拟设备接口一个叫 veth另一个叫 eth0 成对匹配。

整个宿主机的网桥模式都是 docker0类似一个交换机有一堆接口每个接口叫 veth在本地主机和容器内分别创建一个虚拟接口并让他们彼此联通这样一对接口叫 veth pair

  1. 每个容器实例内部也有一块网卡每个接口叫 eth0
  2. docker0 上面的每个 veth 匹配某个容器实例内部的 eth0 两两配对一一匹配。

综上所述将宿主机上的所有容器都连接到这个内部网络上两个容器在同一个网络下,会从这个网关下各自拿到分配的 ip 此时两个容器的网络是互通的。

切换到bridge模式使用下列命令

docker run --network bridge xxx

不过docker默认就是这个模式是不需要切换的。

2.host模式

容器不会获得一个独立的 Network Namespace而是和宿主机共用一个 NetWork Namespace 容器将不会虚拟出自己的网卡而是使用宿主机的 IP 和端口

切换到host模式使用下列命令

docker run --network host xxx

3.none模式

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

切换到none模式使用下列命令

docker run --network none xxx

4.container模式

新建的容器和已经存在的一个容器共享一个网络 ip 配置而不是和宿主机共享。

新创建的容器不会创建自己的网卡配置自己的 IP而是和一个指定的容器共享 IP、端口范围等。

同样两个容器除了网络方面其他的如文件系统、进程列表等还是隔离的。

切换到container模式使用下列命令

docker run --network 容器名称|容器ID xxx

四、自定义网络

建议使用自定义的网桥来控制哪些容器可以相互通信还可以自动DNS解析容器名称到IP地址。Docker提供了创建这些网络的默认网络驱动程序

容器 IP 变动时候可以通过服务名直接网络通信而不受影响。类似Eureka通过服务名直接互相通信而不是写死IP地址。

自定义网络默认使用的是桥接网络 bridge

自定义网络本身就维护好了主机名和 ip 的对应关系ip 和域名都能通常用。

使用时自定义网络时直接创建网络就行如下

docker network create demo

看看本专栏文章有哪些吧

本系列文章目录

  • 『 云原生·生之门』
  • 『 云原生·前置知识』
  • 『 云原生·Docker』
  • 『 云原生·Kubernetes』
  • 『 云原生·KubeSphere』
  • 『 云原生·DevOps』

🚩点击关注本专栏

可以看出来本系列文章将会带你从-1到1的学习云原生的一起加油吧

总结

本篇阐述了Docker网络相关知识下一篇是 Docker-compose 容器编排欢迎关注本专栏

参考https://blog.csdn.net/meltsnow/article/details/94490994

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker