『 云原生·Docker』Docker网络
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
系列文章目录
本系列主要分为以下六大部分,正在更新中,尽请期待
- 『 云原生·生之门』
- 『 云原生·前置知识』
- 『 云原生·Docker』
- 『 云原生·Kubernetes』
- 『 云原生·KubeSphere』
- 『 云原生·DevOps』
提示已经更新的或正在更新的文章前面打勾了哈
文章目录
前言
当你开始大规模使用Docker时你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器技术有很多令人称道的功能如Docker的镜像管理。然而Docker同样有着很多不完善的地方网络方面就是Docker比较薄弱的部分。因此我们有必要深入了解Docker的网络知识以满足更高的网络需求。
一、初识Docker网络
Docker 默认启动的时候会为我们创建三个网络
- bridge创建容器默认连接到此网络
- none
- host
我们可以使用命令来列出docker当前的网络如下
docker network ls
Docker能干嘛
首先我们要知道Docker 容器内部的 IP 是有可能变化的。
通过Docker网络我们可以实现
- 容器间的互联、通信以及端口映射。
- 可以通过服务名直接通信而不受容器 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网络模式主要有四种
- bridge 模式默认
- host模式
- none模式
- container模式
接下来我们对这四种模式分别进行学习
1.bridge 模式
Docker 使用 Linux 桥接在宿主机虚拟一个 Docker 容器网桥( docker0 )Docker启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址称为 Container-IP
同时 Docker 网桥是每个容器的默认网关。
因为在同一宿主机内的容器都接入同一个网桥这样容器之间就能够通过容器的 Container-IP
直接通信。
docker run
的时候没有指定 network
的话默认使用的网桥模式就是 bridge
使用的就是 docker0
。
在宿主机使用 ifconfig
命令就可以看到
docker0
和自己create
的network
的eth0
eth1
eth2
……分别代表网卡一
网卡二
网卡三
……lo
代表127.0.0.1
即localhost
inet addr
用来表示网卡的 IP 地址
网桥 docker0 创建一对对等虚拟设备接口一个叫 veth
另一个叫 eth0
成对匹配。
整个宿主机的网桥模式都是 docker0
类似一个交换机有一堆接口每个接口叫 veth在本地主机和容器内分别创建一个虚拟接口并让他们彼此联通这样一对接口叫 veth pair
。
- 每个容器实例内部也有一块网卡每个接口叫
eth0
。 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