Docker网络

网络模式
(1)查看docker 三种默认网络

>> docker network ls
 - NETWORK ID     NAME            DRIVER    SCOPE
 - 35165d8bbc4b   bridge          bridge    local
 - 1c78982c24cf   harbor_harbor   bridge    local
 - 139f534c87d0   host            host      local
 - 49e16aa0520e   none            null      local

网络模式

  • bridge: 为每一个容器分配,设置ip等,并将容器连接到一个docker0虚拟网桥,默认为该模式(无需映射)
  • host: 容器将不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口
  • none: 容器有独立的Network namespace,但并没有对其进行任何设置,如分配ip
  • container:新创建的容器不会创建自己的网卡和配置自己的ip,而是和一个指定的容器共享ip

bridge桥接网络模式

  • 在该模式中,Docker守护进程创建了一个虚拟以太网桥 docker0 ,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包
  • 默认情况下,守护进程会创建一对对等细腻设备接口 vethpair ,将其中一个接口设置为容器的eth0端口(容器的网卡),另外一个接口防止在宿主机的命名空间中,以类似vethxxx 这样的名字命名,从而将宿主机上的所有容器连接到中国内部网络上
    比如我运行一个基于 buysbox 镜像构建的容器 mybox01 ,查看 ip addr

busybox:被称为嵌入式瑞士军刀,整合了很多小的 unix 下的通用功能到一个小的可执行问价中

(1)拉取busybox镜像

docker pull busybox

(2)创建bbox01容器

docker run -it --name=mybox01 busybox

结果如下:
在这里插入图片描述
宿主机结果如下:
在这里插入图片描述

关于 bridge 网络模式的使用,只需要在创建容器时通过参数 --net bridge 或者 --network bridge 指定即可,当然这也是创建容器默认的网络模式,也就是说这个参数是可以省略的

图解bridge之间的联系:
在这里插入图片描述
host主机模式

  • host网络模式需要在创建容器时通过参数 --net host 或者 -network host 指定
  • 采用host网络模式的Docker container,可以直接使用宿主机的IP地址与外界进行通信,若宿主机的eth0是一个公有ip,那么容器也拥有这个公有ip,同时容器内服务的端口也可以使用宿主机的端口,无需额外进行NAT转换;
  • host网络模式可以让容器共享主机网络栈.这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性
    在这里插入图片描述
    使用host网络模式创建mybox02容器
docker run -it --name=mybox02 --network host busybox

在这里插入图片描述
宿主机
在这里插入图片描述

综上:host网络模式直接使用宿主机的网卡

none自定义网络模式

  • none网络模式是指禁用网络功能,只有lo(local)接口,代表127.0.0.1,即localhost本地环回接口,在创建容器时通过参数–netnone 或者 --network none指定
  • none网络模式即不为Docker container创建任何的网络环境,容器内部就只能使用loopback网络设备,不会再有其他的网络资源,可以说none模式为Docker container 做了极少的网络设定.

使用none网络模式创建mybox03容器

docker run -it --name=mybox03 --network none busybox

结果如下:
在这里插入图片描述
container网络模式

  • container网络模式是Docker中一种较为特别的网络模式.在创建容器时通过参数 --net container:已运行的容器名称(ID) 或者 --network container:已运行的容器名称ID指定
  • 处于这个模式下的Docker容器会共享一个网络栈,这样两个容器之间是有localhost高效快速通信
    在这里插入图片描述

Container
网络模式即新创建的容器不会创建自己的网卡,配置自己的ip,而是和一个指定的容器共享IP,端口范围等,同样两个容器移除了网络方面相同之外,其它文件系统,进程列表等还是隔离的

使用container网络模式创建mybox04容器

docker run -it --name=mybox04 --network container:mybox01  busybox

mybox04结果如下:
在这里插入图片描述
mybox01结果如下:
在这里插入图片描述
**link网络模式 **

  • docker run --link 可以用来连接连个容器,使得源容器和接收器之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量
  • 这种方式官方已不推荐,并且在未来版本可以被移除.

官方警告信息: https://docs.docker.com/network/links/

在这里插入图片描述
自定义网络

  • 虽然Docker提供的默认网络使用比较简单,但是为了保证各容器中的应用安全性,在实际开发中更推荐自定义的网络进行容器管理,以及启用容器名称到ip地址的自动DNS解析.

  • 从Docker1.10版本开始,docker daemon 实现了一个内嵌的DNS server,使容器可以直接通过容器名称进行通信,方法很简单,只要在创建容器时使用 --name 为容器命名即可

  • 但是使用Docker DNS有个限制: 只能在 user-defined网络中使用,也就是说,默认的bridge网络是无法使用DNS,所以我们就需要自定义网络

(1)创建网络

>>> docker network create --help 
Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
      --config-from string   The network from which to copy the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR format that represents a network segment

创建一个基于 brige 网络模式的自定义网络模式 custom_network 命令如下:

docker network create custom_network

docker network ls

在这里插入图片描述
分别创建mybox06与mybox07容器

docker run -it --name=mybox06 --net custom_network busybox
docker run -it --name=mybox07 --net custom_network busybox

测试
进入 docker exec -it mybox06 sh
在这里插入图片描述
进入 docker exec -it mybox07 sh
在这里插入图片描述
(2)连接网络
通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式
例如: docker network connect bridge mybox01

(3)断开网络
通过docker network disconnect 网络名称 容器名称
例如: docker network disconnect custom_network mybox07

(4)移除网络
通过 docker network rm 网络名称
例如: docker network rm custom_network

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值