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
    评论
Docker 提供了各种网络管理选项,用于在容器之间建立网络连接和通信。以下是一些常见的 Docker 网络管理概念和功能: 1. Docker 网络驱动程序(Network Drivers):Docker 支持多种网络驱动程序,用于创建和管理容器之间的网络。默认情况下,Docker 使用 `bridge` 驱动程序。 2. 网络模式(Network Modes):Docker 提供了几种网络模式,用于定义容器如何与主机和其他容器通信。常见的网络模式包括 `bridge`、`host`、`overlay` 和 `none`。 3. 网络创建(Network Creation):可以使用 Docker 命令或 Docker Compose 文件来创建自定义网络。创建自定义网络可以为容器提供隔离的网络环境,并根据需要配置网络参数。 4. 容器连接(Container Networking):可以使用 Docker 命令或 Docker Compose 文件将容器连接到特定网络。这样可以使容器能够通过网络与其他容器或主机进行通信。 5. 网络别名(Network Aliases):Docker 允许为容器分配多个网络别名,这样容器可以通过多个名称进行访问。这对于容器之间的相互通信和服务发现非常有用。 6. 跨主机网络(Multi-Host Networking):Docker 提供了 `overlay` 和 `macvlan` 网络驱动程序,允许在多个 Docker 主机之间创建跨主机网络。这样可以在分布式环境中轻松地管理容器之间的通信。 以上只是 Docker 网络管理的一些基本概念和功能。具体使用方法和配置选项可以参考 Docker 官方文档或其他相关资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值