Docker网络

目录

docker网络连接原理

测试通信

宿主机与容器

外围物理机的实验

docker网络类型

制作加强版nginx镜像

bridge类型

host类型

none类型

网络命令大全

基础命令

创建网络

容器网络相关

docker网络连接原理

前言:

  • 我们只要安装了docker那么就会有一个网卡(docker0)其网卡用的是桥接模式(桥接物理网卡),所用的技术为evth-pair技术;
  • docker0在第一次开启docker时就出现了;这个docker0网卡ip一般为172.17.0.1(子网掩码:255.255.0.0)
  • evth-pair技术就是一对虚拟设备接口,他们都是成对出现的,正因为有这个特性,evth-pair充当着一个桥梁,连接着各种虚拟网络设备(docker0网卡与容器) 
  • docker0通过evth-pair技术与容器进行互联,从而可以与容器之间进行通信,只要启动一个容器就会通过docker0网桥
  • 我们每启动一个docker容器,docker就会给docker容器分配一个ip和veth的网卡;这个网卡一共为一对2个,一个在容器内部,一个在linux虚拟机外部,只要对应的容器删除,那么对应网桥的一对veth就会消失
  • 在这里docker0就作为网关功能,而里面的容器就相当于内网环境的各个设备,里面的容器要想访问外部设备必须经过docker0网关(同网段的其他设备可以访问docker0网关,但不可访问里面的容器)

测试通信

宿主机与容器

  • docker内同一网络下两个容器之间可以互相ping通
  • linux宿主机可以ping通各个网络下的docker容器

外围物理机的实验

  • 本linux虚拟机同网段的其他机器(不是172.17.0.n类型的地址)ping docker0网关后发现可以ping通
  • 本linux虚拟机同网段的其他机器,ping下docker容器(与docker网关处于同一网段)发现ping不通

docker网络类型

查看docker网络类型:docker network ls

结果:我们发现docker有三种网络类型

制作加强版nginx镜像

制作Dockerfile:vi Dockerfile

FROM nginx:latest
RUN apt-get update
RUN apt-get install -y iproute2
RUN apt-get install -y net-tools
RUN apt-get install -y iputils-ping
EXPOSE 80

在Dockerfile所在目录下制作镜像:docker build -t nginxadd .

结果:这个nginx镜像有了ip addr,ping等网络功能

bridge类型

前言:他是网络类型的基本类型,不设置网络类型的话默认为bridge

该网络类型可以创建自定义网络

命令:docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynet

linux下执行:ip addr

我们发现linux内容器外多了一个网卡该网卡类似于docker0,这个网络里面的容器可以相互访问,不同网络的容器之间不可以相互访问(但是容器之间的所有不同网关可以被所有的容器访问)

host类型

前言:

  • host网络只能有1个,而且是默认创建的那个;其不可以自定义网络
  • 连接host网络的容器没有IP地址,在容器中也没必要做端口映射,因为连接host网络的容器就作为主机的一个应用存在
  • 通过在linux主机中直接访问容器中暴露的端口就可以访问到容器内部
  • 因为连上host网络,那么容器就作为主机的一个应用;那么由于主机可以访问任意网络下的所有容器,那么连上host网络的容器就可以访问主机上任意网络下的所有容器

执行:docker run -d --name nginx4 --network host nginxadd

nginx暴露了80端口,因此直接访问主机的80端口得到如下

进入容器执行ip addr发现里面的网卡全是主机的网卡,本身并没有新增奇怪的网卡(6bd为host网络容器id号)

none类型

前言:

  • none网络就是没有网络,根本没打算让容器联网
  • 使用了none网络类型后也可以断连该网络后连接其他网络

将容器添加到none:docker run -d --name nginx1 -p 8080:80 --network none nginxadd

进入容器执行:ip addr

结果:就发现一个回环地址,根本没有ip,没有网络

网络命令大全

基础命令

查看docker网络类型:docker network ls

查看网络信息:docker inspect 网络id

删除网络:docker network rm 网络id

注意:

  • 基本的3个网络类型不能被删除,可以删除的仅为自己创建的网络
  • 当有容器使用该网络时,网络也不能删除

创建网络

创建网络:docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 自己起的网络类型名 

属性说明

  • --driver:网络类型(默认bridge,因此可省略)
  • --subnet:子网
  • --gateway:网关

注意:创建后的网络可以用docker network ls方式查看 

容器网络相关

创建容器指定对应网络:docker run -d -p 8080:80 --name=容器名 --network 网络类型 镜像名

将容器连入网络:docker network connect 网络名 容器名

将容器断开网络:docker network disconnect 网络名 容器名

注意:

  • --network表示要指定使用的网络类型
  • 一个容器可以同时连接多个网络,一个网络可以有多个容器
  • 一个容器不能被连接或断连host网络

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值