系列文章目录
本系列主要分为以下六大部分,正在更新中,尽请期待!
- 『 云原生·生之门』
- 『 云原生·前置知识』
- 『 云原生·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 --networkhost 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 容器编排,欢迎关注本专栏!
版权归原作者 abcccccccccccccccode 所有, 如有侵权,请联系我们删除。