0
点赞
收藏
分享

微信扫一扫

linux系统docker网络介绍

程序员知识圈 03-13 21:01 阅读 1

网络介绍

docker网络

网络情况

docker不启动,默认网络情况

ens33

lo

virbr0
在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡:它还有一个固定的默认IP地址192.168.122.1),是做虚拟机网桥的使用的,其作用是为连接其上的虚机网卡提供NAT访问外网的功能。
Linux安装,勾选安装系统的时候附带了libvirt服务才会生成的一个东西,如果不需要可以直接将libvirtd服务卸载:yum remove libvirt-libs.x86_64

docker启动,网络情况

会产生一个名为docker 0的虚拟网桥
docker 0

ens33

lo

virbr0

查看docker网络模式命令
docker network ls

默认创建的三大网络模式
NETWORK ID     NAME      DRIVER    SCOPE
f98ee673f4a2   bridge    bridge    local       
8b6c4b94e6fa   host      host      local       
5b5fdfb0fbad   none      null      local  

bridge:桥接网络模式
host:主机网络
none:无网络模式

常用基本命令

all命令

docker network --help       //查看所有docker network命令

查看网络

docker network ls

创建新的网络

docker network create 网络名字

查看网络源数据

docker network inspect 网络名字

删除网络

docker network rm 网络名字

docker网络作用

docker网络管理和容器之间调用规划

容器间的通信和互联以及端口映射

容器ip变动时,可以通过服务名直接网络通信而不受到影响

docker网络模式

bridge

为每一个容器分配、设置IP等,并将容器连接到一个docker 0虚拟网桥,默认为该模式。

使用--network bridge指定,默认docker 0

Docker服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了 docker0接口的iP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个iP地址。称为Container-iP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-iP直接通信。

docker run的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig,就可以看到docker O和自己create的network,o代表127.0.0.1.即localhost, inet addr用来表示网卡的ip地址

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

每个容器实例内部也有一块网卡,每个接口叫eth0

docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

在这里插入图片描述

host

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

使用--network host指定

直接使用宿主机ip地址与外界进行通信,不需要额外进行NAT转换

容器将不会获得一个独立的network namespace,而是和宿主机共用一个network namespace,容器将不会虚拟出自己的网卡而是使用宿主机的ip和端口

docker启动时,指定--network=host,还指定了-p映射端口,那么会产生一个警告,-p的参数也不会起作用,端口号会以主机端口号为主,重复时递增。
可以使用:docker run -d --network host ,不在使用-p指定映射端口

host模式和宿主机共用ip,不会拥有自己的网关和地址

浏览器访问时,主机ip+主机默认端口访问容器页面:http://宿主机ip:默认端口/

在这里插入图片描述

none

none:没有网络

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

使用--network none指定

禁用网络功能,只有lo标识,就是127.0.0.1标识本地回环
在none模式下,并不为Docker容器进行任何网络配置。只有一个lo,这个Docker容器没有网卡、IP、路由等信息,需要为Docker容器添加网卡、配置IP等。

docker run -d -p 8080:8080 --network none

container

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

使用--network container:NAME或者容器id指定

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的ip,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

两个容器会共用同一个ip,映射ip会冲突

容器1:docker run -it --name 容器名称 镜像名 /bin/bash
容器2:docker run -it --network container:容器名称 镜像名 /bin/bash

停止容器1后,容器2的网卡只剩lo网卡

在这里插入图片描述

自定义网络模式

不使用自定义网络,bridge网络模式下,容器内ip可以互相通信,但是服务名不可以互相通信
容器内按照ip使用ping可以使用
容器内按照服务名使用ping不可以使用

多台容器通信建议使用自定义网络
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都可以使用)
自定义桥接网络,自定义网络默认使用的是桥接网络bridge

新建自定义网络
docker network create 新建网络名

新建容器加入上一步新建的自定义网络
docker run -d -p 8081:8080 --network 新建网络名 镜像名

测试
容器内按照服务名使用ping可以使用

容器实例内默认网络ip生产规则

docker容器内部的ip是有可能会发生变化的

启动镜像==》查看ip
停止镜像
重新启动新的镜像==》查看ip
没固定ip的情况下,新启动的镜像ip与之前的镜像ip相同
举报

相关推荐

0 条评论