Docker Networking Docker 网络设置

在这篇博文里我们会讨论 在Docker中使用Elasticsearch 时的网络配置。

注:这篇博文会用到Docker Hub中的Elasticsearch 镜像。该镜像的开发和生产与Elastic无关。

你也可以使用你自己的镜像,具体步骤可以参考How to make a Dockerfile for Elasticsearch.(如何为Elasticsearch创建Dockerfile)
https://www.elastic.co/blog/how-to-make-a-dockerfile-for-elasticsearch

可以用不同的方式在Docker中设置网络的方式,默认情况下提供三种网络类型。可以通过docker network ls 查看详情。
在这里插入图片描述

None Network 无网络

不可用的网络,该类型网络不能用于集群运行。

Host Network 主机网络

设置 --net=host ,container将会使用该主机网络,该操作存在风险。能够在container容器内更改主机网络,如果有应用正好以管理员权限在运行,就会导致系统的脆弱性,别人就可以通过Docker容器非法的远程控制主机网络。为了安全考虑一般不建议使用这个方法,虽然这样设置可以让网络情况比一般设置更好。

Bridge Network 桥接网络

桥接网络是Docker中的默认网络类型。

可以用 docker network inspect bridge 命令查看默认的桥接网络详情。

$ docker network inspect bridge
[
  {
     "Name": "bridge",
     "Id": "b38c312777a0f3890034c9b396669842947b80c9051d10a283c9d43937910578",
     "Scope": "local",
     "Driver": "bridge",
     "IPAM": {
     "Driver": "default",
     "Options": null,
     "Config": [
      {
         "Subnet": "172.17.0.0/16"
      }
    ]
  },
  "Containers": {},
  "Options": {
   "com.docker.network.bridge.default_bridge": "true",
   "com.docker.network.bridge.enable_icc": "true",
   "com.docker.network.bridge.enable_ip_masquerade": "true",
   "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
   "com.docker.network.bridge.name": "docker0",
   "com.docker.network.driver.mtu": "1500"
     }
   }
]

实例中桥接网络的名字的docker0.添加容器时,每个容器会自动生成联通到docker bridge docker0的虚拟网络接口,并且分配一个IP地址给这个虚拟接口。

这个bridge会自动在连接到它的网络接口之间发送数据包,同时允许容器与主机、容器之间的通讯。

默认情况下,Docker容器可以通过docker0接口和外界通讯,但是外界不能连接到容器。

外部连接由IP 转发和iptables实现,你可以通过端口映射来实现。

运行Elasticsearch时,你要确保将其发布到可以访问容器外部的IP地址。这一项可以通过设置 network.publish_host 来实现。

对于节点之间的 discovery,你需要通过设置discovery.zen.ping.unicast.hostsdiscovery.zen.minimum_master_nodes来配置Zen Discovery.
示例:

docker run -d -p 9200:9200 -p 9300:9300 elasticsearch:2 \
        elasticsearch \
            -Des.discovery.zen.ping.unicast.hosts=192.168.99.100,192.168.99.101 \
            -Des.discovery.zen.minimum_master_nodes=2 \
            -Des.network.publish_host=192.168.99.100
docker run -d -p 9200:9200 -p 9300:9300 elasticsearch:2 \
        elasticsearch \
            -Des.discovery.zen.ping.unicast.hosts=192.168.99.100,192.168.99.101 \
            -Des.discovery.zen.minimum_master_nodes=2 \
            -Des.network.publish_host=192.168.99.100

By default, a Docker container is configured to use IPv4 only. It is possible to configure IPv4/IPv6 by starting the Docker daemon with the --ipv6 flag.

默认情况下,一个Docker容器只能使用IPv4.但是可以在启动Docker daemon的时候加上 --ipv6标签,就可以配置IPv4/IPv6了。

创建容器时会获取一个连接到本地(link-local)的IP地址,你也可以分配一个全局可路由的IPv6地址给你的容器。

可路由的IPv6地址可以实现不同主机容器之间的交互。这篇文章介绍了更多相关信息:Advanced networking。https://docs.docker.com/v1.5/articles/networking/#ipv6

Overlay Network 叠加网络

Docker最近发布的几个版本里介绍了一种新的网络方法叫叠加网络,适用于多主机的网络环境。

使用叠加网络要求设置一个键值存储,这样节点可以发现并加入到集群中,Docker目前支持Consul,etcd,和ZooKeeper.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值