设为首页 收藏本站
查看: 753|回复: 0

[经验分享] docker集群部署:第3部分:服务

[复制链接]

尚未签到

发表于 2018-5-26 11:12:23 | 显示全部楼层 |阅读模式
  docker集群部署:第3部分:服务


  • 介绍
    在第3部分中,我们将扩展应用程序并实现负载平衡。
  • 关于服务
    在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务,后面的视频转码服务用户上传东西,为前端服务等等。
    服务实际上只是“生产中的容器”。服务只运行一个镜像,但它定义镜像运行的方式 - 应该使用哪个端口,容器应该运行多少个实例,以便服务具有所需的容量,以及等等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多的计算资源。
    幸运的是,使用Docker平台定义,运行和扩展服务非常简单 - 只需编写一个docker-compose.yml文件即可。
  • docker-compose.yml文件
    docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为方式。
    #cat docker-compose.yml
    version: "3"
    services:
    web:
    #replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
    replicas: 5
    resources:
    limits:
    cpus: "0.1"
    memory: 50M
    restart_policy:
    condition: on-failure
    ports:
    - "80:80"
    networks:
    - webnet
    networks:
    webnet:
      说明:我在vmware虚拟机测试时,使用的是如下脚本:

    version: "3"
    services:
    web:
    image: friendlyhello:latest
    deploy:
    replicas: 5
    restart_policy:
    condition: on-failure
    ports:
    - "80:80"
    networks:
    - webnet
    networks:
    webnet:
      这个docker-compose.yml文件告诉Docker执行以下操作:
    (1)从注册表中取出我们在第2部分:容器中上传的镜像。
    (2)运行该镜像的5个实例作为一个服务调用web,限制每个使用,最多10%的CPU(跨所有核心)和50MB的RAM。(我未使用)
    (3)如果一个失败,立即重新启动容器。
    (4)指示Web容器通过称为webnet的负载均衡网络共享端口80。 (在内部,容器本身将在临时端口上发布到网站的端口80)。
    (5)定义webnet网络使用默认设置(这是一个负载均衡覆盖网络)。

  • 运行新的负载均衡应用程序
    在我们使用docker stack deploy命令之前,我们先运行:
    #docker swarm init
      注意:
    (1)我们将在第4部分中介绍该命令的含义。如果不运行docker swarm init,则会显示“此节点不是swarm manager”的错误。
    (2)#docker swarm init --advertise-addr 10.0.0.38:2377中--advertise-addr的作用:
    如果未指定,Docker将检查系统是否是单个IP地址,如是单个ip,docker将该IP地址与侦听端口(默认2377)一起使用。如果系统有多个IP地址,则 --advertise-addr必须指定正确的地址,以便进行管理器间通信和覆盖网络。

    现在让我们来运行它。你必须给你的应用程序起个名称。在这里,它被命名为getstartedlab。
    #docker stack deploy -c docker-compose.yml getstartedlab
      我们的单个服务堆栈在一台主机上运行了5个部署映像的容器实例。让我们来查看下。

    在我们的应用程序中获取一项服务的服务ID:
    #docker service ls (或docker ps)
      将看到Web服务的输出,并以你的应用程序名称作为前缀。如果你将其命名为与此示例中所示的相同,则名称将为getstartedlab_web。还列出了服务ID以及实例数量,镜像名称和暴露端口。
    在服务中运行的单个容器称为任务。任务会被赋予唯一的数字增加的ID,可以在docker-compose.yml中定义的实例数量。列出你的服务的任务:

    #docker service ps getstartedlab_web
    ID                  NAME                  IMAGE                  NODE                DESIRED STATE       CURRENT STATE         ERROR               PORTS
    pyjg9hjmiubl        getstartedlab_web.1   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    l4dze4ykna53        getstartedlab_web.2   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    wv49dwr41uyt        getstartedlab_web.3   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    eten7ue4sace        getstartedlab_web.4   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    djtvjvv0012q        getstartedlab_web.5   friendlyhello:latest   swarm1              Running             Running 2 hours ago
      如果你只列出系统上的所有容器,也会显示任务,但不会被服务过滤:

    #``docker container ls -q
    552750f13021
    f0709bdbbca2
    913c2ead1b86
    9b3874094b67
    c51e8021f0ee
    feddb2fff6c5
      你可以连续多次运行curl -4 http:// localhost,或者在浏览器中转到该URL并点击几次刷新。
    无论哪种方式,你将看到容器ID更改,演示负载均衡;在每个请求中,以循环方式选择5个任务中的一个来响应。容器ID将匹配您以前的命令(docker container ls -q)的输出。

  • 缩放应用程序
    你可以通过更改docker-compose.yml中的实例值,保存更改并重新运行docker stack deploy命令来扩展应用程序:
    如将 replicas(实例): 5 更改为3
    #docker stack deploy -c docker-compose.yml getstartedlab
    Updating service getstartedlab_web (id: f4pqg1x8eznhxu6bb897t6l3v)``
    Docker会立即更新,不需要拆除原有集群或杀死任何容器。
      现在,重新运行docker container ls -q来查看重新配置的已部署实例。

    #docker container ls -q
    abc6e8347046
    99e75109a749
    03ddf96a5934
  • 关闭应用服务堆栈(stack)
    #docker stack rm getstartedlab    ##stack 堆
    Removing service getstartedlab_web
    Removing network getstartedlab_default
    Removing network getstartedlab_webnet
  • 删除集群(swarm)
    #docker swarm leave --force

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481294-1-1.html 上篇帖子: docker集群部署:第2部分:容器 下篇帖子: docker集群部署:第4部分:群集
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表