资讯专栏INFORMATION COLUMN

docker 1.12 的服务自动发现

ygyooo / 2256人阅读

摘要:介绍的集群的自动发现有两种方式与本文使用的是的方式准备安装以上版本初始化集群创建一个名为的网络开放端口初始化集群部份可看我之前的博客使用搭建多主机集群创建网络查看当前的网络也是一个网络可以跨主机通信本教程会创建一个新的创建网络

介绍

docker 1.12 的swarm 集群的自动发现有两种方式, virtual IP address (VIP) 与 DNS round-robin, 本文使用的是VIP的方式

准备

安装docker 1.12 以上版本

初始化swarm集群

创建一个名为docker-net 的overlay网络

开放7946 TCP/UDP , 4789 UDP 端口

初始化swarm集群部份可看我之前的博客使用docker 1.12 搭建多主机docker swarm集群

创建overlay网络

查看当前的网络

[root@swarm-manager ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
376f5b337bfc        bridge              bridge              local                                    
166bd71f7d0e        host                host                local               
9gr6bfff1rv9        ingress             overlay             swarm               

ingress 也是一个overlay网络, 可以跨主机通信, 本教程会创建一个新的

创建网络

docker network create 
  --driver overlay 
  --opt encrypted  ## 是否使用加密
  my-network

查看

[root@swarm-manager ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
376f5b337bfc        bridge              bridge              local                                    
166bd71f7d0e        host                host                local               
9gr6bfff1rv9        ingress             overlay             swarm       
aoqs3p835s5g        docker-net          overlay             swarm        
在swarm上用overlay 网络创建一个服务
docker service create 
  --replicas 3 
  --name my-web  # 服务名为my-web 
  --network docker-net 
  daocloud.io/nginx:alpine # 使用国内的镜像, alpine版的体积很小,下载会快点

查看服务

# 本次只起了一个manager节点, 所以容器都跑在这台机器上了
[root@swarm-manager ~]# docker service ps my-web
ID                         NAME          IMAGE                     NODE           DESIRED STATE  CURRENT STATE            ERROR
bavjn0xhxi35nx6n9kn33yfga  my-web.1      daocloud.io/nginx:alpine  swarm-manager  Running        Running 31 minutes ago   
cibuo8zqp78z1xb8cu3v4pkmj  my-web.2      daocloud.io/nginx:alpine  swarm-manager  Running        Running 31 minutes ago   
0pkg1eoa0onku71cbp1hqtcv5  my-web.3      daocloud.io/nginx:alpine  swarm-manager  Running        Running 31 minutes ago   

在一个网络上有哪些容器可以在network inspect的Containers节点看到

[root@swarm-manager ~]# docker network inspect docker-net
[
    {
        "Name": "docker-net",
        "Id": "aoqs3p835s5glx69hi46ou2dw",
        ....
        "Containers": {
            "1c87aae81449b448983924017fc4037b7b1e9e1eaa03bc55745b0167ab4e495b": {
                "Name": "my-web.1.bavjn0xhxi35nx6n9kn33yfga",
                "EndpointID": "2ab6c7e698ce69ec318a211dd0386533de1a0d8f2070bd4ee6cdc43cb94dcd0a",
                "MacAddress": "02:42:0a:00:09:03",
                "IPv4Address": "10.0.9.3/24",
                "IPv6Address": ""
            },
            .....
        },
        .....
    }
]

查看服务使用的vip

[root@swarm-manager ~]#  docker service inspect --format="{{.Endpoint.VirtualIPs}}"   my-web
[{aoqs3p835s5glx69hi46ou2dw 10.0.9.2/24}]
演示使用服务名访问nginx

先创建一个同样使用docker-net的overlay网络 的服务

docker service create 
  --name my-busybox 
  --network docker-net 
  busybox 
  sleep 3000

等待服务启动后, 用docker exec 连接进busybox的容器里

[root@swarm-manager ~]# docker service ps my-busybox
ID                         NAME              IMAGE    NODE           DESIRED STATE  CURRENT STATE                ERROR
7ftv4wj1g3vu8g7mfghx8du65  my-busybox.1      busybox  swarm-manager  Running        Running about a minute ago   
[root@swarm-manager ~]# docker exec -ti my-busybox.1.7ftv4wj1g3vu8g7mfghx8du65 sh

在busybox容器. 向DNS查询nginx服务的vip

[root@swarm-manager ~]# docker exec -ti my-busybox.1.7ftv4wj1g3vu8g7mfghx8du65 sh 
/ # nslookup my-web
Server:    127.0.0.11
Address 1: 127.0.0.11

Name:      my-web
Address 1: 10.0.9.2 10.0.9.2 # 和在外面看到的一样

在busybox容器. 向DNS查询nginx服务所有容器的ip地址

/ # nslookup tasks.my-web
Server:    127.0.0.11
Address 1: 127.0.0.11

Name:      tasks.my-web
Address 1: 10.0.9.5 my-web.3.0pkg1eoa0onku71cbp1hqtcv5.docker-net
Address 2: 10.0.9.4 my-web.2.cibuo8zqp78z1xb8cu3v4pkmj.docker-net
Address 3: 10.0.9.3 my-web.1.bavjn0xhxi35nx6n9kn33yfga.docker-net

在busybox容器, 通过服务名访问nginx

/ # wget -O- my-web
Connecting to my-web (10.0.9.2:80)



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

.....
结语

通过实验可以看出, 在swarm集群中使用overlay网络时, 不同服务之间可以使用服务名(docker service name)互相访问

我的博客: docker 1.12 的服务自动发现

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26704.html

相关文章

  • 基于 Docker 1.12 Swarm 集群管理开发实践

    摘要:由于没有了中心化的负载均衡器,集群不会因某台机器异常而导致整个服务对外不可用,很好的避免了单点问题,同时也带了可扩展性。 Mesos/Marathon 折腾久了,我们一直希望有机会深入到 Swarm 内部一探究竟。 另外, Mesos 这一套东西虽然是久经企业级考验的, 但是安装、部署和使用相对复杂,上手有门槛。同时,在今年的 DockerCon 上,内置了Swarm 功能的 Dock...

    My_Oh_My 评论0 收藏0
  • Docker 1.12哪些特性使它更像 kubernetes?

    摘要:本文涵盖了中的六大新特性内置命令服务发现自愈功能安全负载均衡滚动升级,相关的使用文档和视频链接也都包含在里面。同时,内部负载均衡要求一个可用的容器。现在开箱即用的负载均衡,上公开暴露的端口在所有节点都是可以访问的。 Docker 1.12版本最近刚刚发布,这篇文章对它的新特性进行了概述和对比描述。本文涵盖了 Docker 1.12 中的六大新特性:内置 swarm命令、服务发现、自愈功...

    chaos_G 评论0 收藏0
  • 数人云CTO解读Docker 1.12和金融业容器化

    摘要:月日数人云在上海举办金融沙龙,邀请上交所和近二十家来自银行保险证券的技术专家一同探讨容器技术在金融业中的最佳实践。数人云肖德时在会上将传统金融行业通过容器可以解决的四大问题做了逐一解读。如何动态的分配,就是刚才上交所介绍的一些治理的方法。 7月29日数人云在上海举办金融沙龙,邀请上交所和近二十家来自银行、保险、证券的IT技术专家一同探讨容器技术在金融业中的最佳实践。数人云CTO肖德时在...

    Gemini 评论0 收藏0
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包

    摘要:与分布式应用捆绑包分布式应用捆绑包,或者简称,是一种多服务可分发镜像格式。而当中新推出的分布式应用捆绑包,或者简称,则属于一种新的概念,其专门面向多套容器的迁移需求。利用创建一个分布式应用捆绑包添加了一条新的命令。 在本文中数人云将带大家了解如何利用Docker Compose创建一套分布式应用捆绑包,并将其作为Docker Stack在Docker Swarm Mode中进行部署。 ...

    TigerChain 评论0 收藏0
  • 代码级干货 | 进阶Docker 1.12,全新分布式应用捆绑包

    摘要:利用分布式应用捆绑包简称部署服务相较于利用大量参数创建网络及服务,这里我们选择使用一个文件。 在Docker 1.12版本中,全新的Swarm捆绑包相较于原有编排及调度机制做出了巨大改进。它不再需要运行一组独立的Swarm容器,这部分容器已经被直接捆绑在Docker Engine当中,故障转移策略更为可靠,服务发现机制实现内置,新的网络功能极为顺畅……看起来很棒是不是? 数人云这...

    2i18ns 评论0 收藏0

发表评论

0条评论

ygyooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<