zoukankan      html  css  js  c++  java
  • docker入门4-docker stack

    stack介绍

    stack是一组共享依赖,可以被编排并具备扩展能力的关联service。举例来说就是在swarm那章描述docker层次架构时,说stack就是一个完整的服务--它可以由基于flask框架的web service和redis数据库service构成。

    这个stack中的service的web部分由多个container组成,它们共享依赖

    这个stack还可以加入其它service--比如nginx,所以stack具备被编排的能力。

    当需要更大的处理需求时,在数据库能承受的情况下,可以扩展swarm的机器数量,重新部署这个stack就能获得更大的处理能力,stack就具备扩展能力

    给stack添加新service

    整个stack只有一个名为web的service,现在添加docker可视化监控软件和redis数据库。

    docker-compose.yml

    version: "3"
    services:
      web:
        image: cchenyang/get-started:part2
        deploy:
          replicas: 3
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
          restart_policy:
            # immediately restart containers if one fails
            condition: on-failure
        # map port 8001 on the host to web's port 8001
        ports:
          - "8001:8001"
        networks:
          - webnet
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
        networks:
          - webnet
      redis:
        image: redis
        ports:
          - "6379:6379"
        volumes:
          - "/home/docker/data:/data"
        deploy:
          placement:
            constraints: [node.role == manager]
        command: redis-server --appendonly yes
        networks:
          - webnet
    networks:
      webnet:
    

    这里新添加了两个service--visualizer和redis。

    配置项解析

    volumes是将docker外界的文件映射到docker中。"/var/run/docker.sock:/var/run/docker.sock"就是将机器自身的docker.sock文件映射放到visualizer整个service的container的指定目录下。docker container只能通过这种映射的方式读写container外的文件。redis这个service中的volumes也是同理,这个redis配置的持久化文件保存目录是/data,通过映射,将/data文件映射到外部机器的/home/docker/data文件夹下,实现持久化存储。

    placement下的constraints限制visualizer和redis只能在manager下运行。

    注意这里的command,web和visualizer这两个服务,开启container就会运行。通过docker container ls就可以发现,web的container的command是python app.py,visulizer的command是npm start,唯独redis不是什么启动命令,而是执行的sh文件。通过https://docs.docker.com/samples/找到它的构建命令,发现只是在做设置,冰没有启动redis。所以在部署的时候,需要再添加启动的command。数据库的确应该在配置好外部文件映射后才启动。

    重新部署stack

    docker stack deploy -c docker-compose.yml getstartedlab重新执行一遍。

    系列导航

    docker入门1-docker container
    docker入门2-docker service
    docker入门3-docker swarm

  • 相关阅读:
    2015-12-25-(菜单栏的效果)
    2015-12-23-(实现左边题目,右边内容的效果)
    2015-12-23-( dispaly:table的用法)
    2015-12-21(box-sizing:border-box)
    闭包
    js中this的用法
    jQuery或Angular实现弹出框单击显示,双击隐藏
    jQuery 点击任意处隐藏,除某个元素外
    导航栏滚动到顶部后固定
    h5 audio标签在手机上不能自动播放????
  • 原文地址:https://www.cnblogs.com/agichen/p/10426925.html
Copyright © 2011-2022 走看看