• Docker-服务(4)


         服务定义

      在分布式应用程序中,应用程序的不同部分称为“服务”。例如,如果您想象一个视频共享站点,它可能包括一个用于在数据库中存储应用程序数据的服务,一个用户在上传内容后在后台进行视频转码的服务,一个用于前端的服务,等等。

      服务实际上只是“生产中的容器”。服务只运行一个镜像,但它定义了镜像运行的方式 - 它应该使用哪些端口,应该运行多少个容器副本,服务所需的容量等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。

      幸运的是,使用Docker平台定义,运行和扩展服务非常容易 - 只需编写一个docker-compose.yml文件即可。

    前提条件

        已经完成了前面一章的内容,分享镜像到了Docker Hup。

    1. 安装Docker Compose

    curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
    chmod +x /usr/local/bin/docker-compose
    

      

    2. 编写docker-compose.yml

     注意修改image: scottcho/flask:v1

    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: scottcho/flask:v1
        deploy:
          replicas: 5
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
          restart_policy:
            condition: on-failure
        ports:
          - "4000:80"
        networks:
          - webnet
    networks:
      webnet:
    

      

    docker-compose.yml文件告诉Docker执行以下操作:

    • 我们的镜像从版本库。

    • 将该映像的5个实例作为调用的服务运行web,限制每个实例使用,最多10%的CPU(跨所有内核)和50MB的RAM。

    • 如果一个失败,立即重启容器。

    • 将主机上的端口4000映射到web端口80。

    • 指示web容器通过称为负载平衡的网络共享端口80 webnet(在内部,容器本身web在短暂的端口发布到 80端口。)

    • webnet使用默认设置(负载平衡的覆盖网络)定义网络。

    3. 运行新的负载均衡应用

    在我们docker stack deploy首先运行命令之前,这个命令意味着该机器作为集群的管理节点

    docker swarm init

    创建服务

    docker stack deploy -c docker-compose.yml getstartedlab
    

     

    查看服务

    我们的单个服务堆栈在一台主机上运行已部署映像的5个容器实例。我们来查看下吧。

    在我们的应用程序中获取一项服务的服务ID:

    [root@docker ~]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    g744u428v194        getstartedlab_web   replicated          5/5                 scottcho/flask:v1   *:4000->80/tcp
    

    查看任务

    在服务中运行的单个容器称为任务任务被赋予以数字递增的唯一ID,最多为replicas您定义 的数量docker-compose.yml列出您的服务任务:

    [root@docker ~]# docker service ps getstartedlab_web
    ID                  NAME                  IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    kjtlmtaict0c        getstartedlab_web.1   scottcho/flask:v1   docker              Running             Running 16 minutes ago                       
    z3uulg9o5zdx        getstartedlab_web.2   scottcho/flask:v1   docker              Running             Running 16 minutes ago                       
    6nrmivw0jwki        getstartedlab_web.3   scottcho/flask:v1   docker              Running             Running 16 minutes ago                       
    om6dv5bu0h9u        getstartedlab_web.4   scottcho/flask:v1   docker              Running             Running 16 minutes ago                       
    klgv8zjienz4        getstartedlab_web.5   scottcho/flask:v1   docker              Running             Running 16 minutes ago         
    

      

    查看负载均衡是否生效

         访问:http://localhost:4000,不断的刷新页面,可以看见机器名不断的在发生变化。达到了负载均衡的作用。

    4. 拓展应用程序

         您可以通过更改replicasdocker-compose.yml,保存更改并重新运行docker stack deploy命令来扩展应用程序

    docker stack deploy -c docker-compose.yml getstartedlab
    

      

    5. 关闭应用程序和退出群

    关闭服务

    docker stack rm getstartedla

     节点退出集群

    docker swarm leave --force
    

      

     

  • 相关阅读:
    [LeetCode]Binary Tree Inorder Traversal
    [LeetCode]Binary Tree Preorder Traversal
    [LeetCode]Number of 1 Bits
    [LeetCode]Best Time to Buy and Sell Stock IV
    第四章 线程
    第三章 进程描述和控制
    第二章 操作系统概述
    第一章 计算机系统概述
    Qt创建对话框的三种方法
    strdup函数
  • 原文地址:https://www.cnblogs.com/zydev/p/10309893.html
Copyright © 2020-2023  润新知