Docker容器网络

原文地址:https://docs.docker.com/engine/userguide/networking/dockernetworks/

Docker容器网络

网络提供了容器间的完全的隔离,因此控制应用运行的网络很重要。
容器网络(Docker Container networks)就提供了这种控制。

默认网络

安装Docker时,它默认会创建三种网络:bridge、none、host。
使用docker network ls可查看主机上的这三种网络。

host:表示容器使用与主机相同的网络。

none:表示容器未选择网络接口,将在后面自己指定网络。

bridge:网桥类型,名称默认是docker0。在创建容器时,默认使用docker0网络,除非你明确指定--net=<NETWORK>参数使用其它网络。
在Docker创建容器时,你可使用参数--net指定使用哪个网络。
在容器中使用ifconfig可以看到它使用的网络类型。

docker network inspect bridge将可以查看有哪些容器使用的bridge网络。

bridge网络中的容器可以根据IP相互访问,如想通过容器名访问,只能通过创建容器时使用--link选项来实现。
通过端口映射,容器通过访问主机端口实现容器间的间接访问。

自定义网络

Docker提供了默认网络驱动(network dirvers)用于自定义网络,更好地隔离容器。
- bridge network
- overlay network
- network plugin
- remote network

可以创建多个网络,将容器添加到一个或多个网络中。容器不可跨网络访问,它只能与其所在网络中的其它成员相互访问。

bridge只适合在单个主机中使用,而overlay是允许跨主机容器间访问的容器网络(Container Network)。

注意:自定义的网络中 linking将不可用。

bridge网络

与overlay网络相比,bridge网络相对较小,它只适合于在单个主机上的小范围网络。

# 创建网格b0
docker network create --driver bridge b0
# 或:docker network create -d bridge b0
# 查看b0的网络信息
docker network inspect b0
# 查看网络列表
docker network ls
# 创建容器时使用网桥
docker run --net=b0 -itd --name=container3 busybox
# 再次查看b0的网络信息
docker network inspect b0

默认网络dokcer0与自定义的bridge网络,虽然都属于bridge网络,但是它们还有有一定的不同:
自定义bridge网络中不支持容器之间link

overlay网络

overlay网络驱动允许构建跨主机构建的容器网络,依赖于一个有效的健值存储服务。
它由Docker的livkv项目实现,目前支持Connsul、Etcd、ZooKeeper等分布式存储服务。
在创建网络之前,必须先安装这些服务。

创建ovelay网络必须的准备条件如下
- key-value store(Engine支持Consul、Etcd和ZooKeeper等分布式存储的key-value store)
- 集群中所有主机已经连接到key-value store
- swarm集群中每个主机都配置了下面的daemon参数
- –cluster-store
- –cluster-store-opt
- –cluster-advertise

在创建overlay网络时,它将自动在集群中每台主机上创建overlay网络。
集群中运行容器时要通过--net参数明确指定使用创建的overlay网络。

## 准备集群环境 ##
# 1. 创建服务发现主机,运行consul容器,映射主机8500端口
docker-machine create -d virtualbox keystore
eval $(docker-machine env keystore)
docker run -d -p "8500:8500" -h "consul" progrium/consul -server -bootstrap
# 2. 创建集群:指定主机发现服务地址,集群存储地址
docker-machine create -d virtualbox \
    --swarm --swarm-master \
    --swarm-discovery="consul://$(docker-machine ip keystore):8500" \
    --engine-opt="cluster-store=consul://$(docker-machine ip keystore):8500" \
    --engine-opt="cluster-advertise=eth1:2376" \
  manager

docker-machine create -d virtualbox \
    --swarm \
    --swarm-discovery="consul://$(docker-machine ip keystore):8500" \
    --engine-opt="cluster-store=consul://$(docker-machine ip keystore):8500" \
    --engine-opt="cluster-advertise=eth1:2376" \
  node1
# 3. 检查集群
docker-machine ls

## 创建overlay网络 ##
# 在swarm集群中任意主机上创建overlay网络,它会集群中已有主机上创建mynet网络(`--driver`可简写为`-d`)
docker network create --driver overlay --subnet=10.0.9.0/24 mynet
# 在每个主机中新容器时指定网络名称
docker run -itd --net=mynet busybox
# 集群环境中想要在单个节点上创建网络,网络名称需要带有主机名称(例如主机node0)
docker network create node0/bridge2 -b bridge

## 移除网络 ##
# 移除集群中的网络
docker network rm mynet
# 移除节点中的网络
docker network rm node0/bridge2
# 查看网络列表变化
docker network ls
# 注意:查看集群与查看单个主机的网络会有差别。
#    集群下网络名称是<node-name>/<network-name>,而主机下网络名称没有<node-name>
#    而且集群下的overlay网络名称前,无<node-name>!

一旦创建连接,overlay网络中的所有容器(不论在哪台主机上)可以相互访问。

更多内容请参考:https://docs.docker.com/swarm/networking/

自定义网络插件(自定义网络驱动)

自定义网络驱动就是一样像Docker daemon一样运行主机上的进程,使用plugin API,所有插件都遵循相同的约束和安装规则。
一旦安装自定义网络驱动,可以像内置驱动一样使用。

# 以使用weave为例
docker network create --driver weave mynet

更多内容请参考:https://docs.docker.com/engine/extend/plugins_network/

Docker的内嵌DNS服务器

请参考:https://docs.docker.com/engine/userguide/networking/configure-dns/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值