zoukankan      html  css  js  c++  java
  • Docker Get Started III

    3. Services

    介绍

    在本部分,我们伸缩我们的应用,并且完成负载均衡功能。为了完成这个,我们必须在前面提到的层级结构中上移一层:service。

    • stack
    • service
    • container

    什么是服务?

    在一个分布式应用中,应用的不同功能部分被称为服务。例如如果你想像一个视频分享网站,它可能包含存储数据在数据库的服务,视频转码的后台服务以及前段用户上传视频的服务。

    在docker情景中,简单来说__服务就是生产环境中运行的容器__。一个服务仅仅运行一个镜像,但是它组织镜像如何运行,使用哪个端口,运行多少个副本等等。伸缩一个服务,仅仅需要指定更多的计算资源到每个进程中的服务,从而改变容器实例的数量。

    在docker平台上,很容易定义、运行和伸缩服务,通过使用docker-compose.yml文件。

    docker-compose.ymls文件

    一个docker-compose.yml文件是一个YAML文件,用来定义生产环境中容器的运行方式。

    新建一个docker-compose.yml文件:

    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: dockerjie/get-started:part2
        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文件描述了:

    • 从什么地方去拉取需要的镜像文件
    • 运行含有5个实例的镜像作为一个web服务,限制每个实例使用的cpu比例和内存大小
    • 重启策略:如果容器fail,立即重启该容器。
    • 端口映射:宿主机的4000端口到容器的80端口
    • 构建web服务的容器们共享80端口,通过一个被称为webnet的负载均衡的网络。
    • 使用默认配置定义webnet网络。

    运行可负载均衡的app

    在使用docker stack deploy命令之前,先运行:

    docker swarm init
    

    image.png | left | 681x102

    现在运行app

    docker stack deploy -c docker-compose.yml getstartedlab
    

    这个服务stack正在一个宿主机上运行我们部署的镜像的5个容器实例。

    查看服务列表:

    docker service ls
    

    image.png | left | 681x39

    上面的输出是关于web服务的信息,分别是服务ID,服务名字,模式,副本的数量,镜像以及暴露的端口信息。

    运行服务里面的单个容器叫做task。每一个task有一个递增的数字ID。

    列出服务包含的tasks。

    docker service ps getstarted_web
    

    image.png | left | 681x60

    同样的查看容器列表也能观察到web服务包m含的task:

    docker container ls
    

    image.png | left | 681x65

    测试效果:

    image.png | left | 681x192

    image.png | left | 681x171

    可以看到每次访问对应的hostname都不相同,因此部署的web服务已经具有负载均衡的能力。

    扩容on-the-fly

    修改docker-compose.yml文件中的replicas的值,重新运行:

    docker stack deploy -c docker-compose.yml getstartedlab
    

    image.png | left | 681x49

    docker执行一个in-place的更新,没必要停止stack或者停止任何容器。

    现在重新查看容器列表:

    docker container ls -q
    

    image.png | left | 681x203

    同样的,如果我们扩容了,除了容器增加了,服务包含的task也会相应的增加。

    停止app和swarm

    • 停止app
    docker stack  rm getstartedlab
    

    image.png | left | 636x108

    • 停止swarm
    docker swarm leave --force
    

    image.png | left | 576x76

    使用Docker很容易构建app和扩缩容。

    docker stack ls                                            # List stacks or apps
    docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
    docker service ls                 # List running services associated with an app
    docker service ps <service>                  # List tasks associated with an app
    docker inspect <task or container>                   # Inspect task or container
    docker container ls -q                                      # List container IDs
    docker stack rm <appname>                             # Tear down an application
    docker swarm leave --force      # Take down a single node swarm from the manager
    
  • 相关阅读:
    深度学习三巨头Hinton,Bengio,LeCunn共摘本年度ACM图灵奖(ACM A.M. Turing Award)
    【我为之而活的三种激情】by 伯特兰·罗素
    遥感高光谱分类文献阅读:Going Deeper with Contextual CNN for Hyperspectral Image Classification
    遥感高光谱分类文献阅读:Exploring Hierarchical Convolutional Features for Hyperspectral Image Classification
    大乘百法明门论笔记
    太宰治【人间失格】
    论文笔记:Accurate Causal Inference on Discrete Data
    因果推断(Causal Inference)概要
    阿毗达摩基本概念
    我们必须知道,我们终将知道。
  • 原文地址:https://www.cnblogs.com/Spground/p/9791236.html
Copyright © 2011-2022 走看看