zoukankan      html  css  js  c++  java
  • docker-swarm

    部署集群

    在群集模式下运行Docker引擎时,可以使用docker stack deploy将全部应用程序堆栈部署到群集。该deploy命令以Compose文件的形式接受堆栈描述。
    该docker stack deploy命令支持任何版本为“3.0”或更高版本的Compose文件。如果您的版本较旧,请参阅升级指南。
    1.13.0或更高版本的Docker引擎,以群集模式运行。如果您不熟悉swarm模式,则可能需要阅读 Swarm模式的关键概念 和如何使用服务。
    注意:如果你想在本地开发环境中尝试一些东西,你可以用你的引擎进入群集模式docker swarm init。
    如果您已经运行了多节点群,请记住必须从管理器节点运行所有 命令docker stack和docker service命令。
    Docker撰写版本1.10或更高版本。

    第一步

    设置一个Docker注册表

    在你的群上启动注册表作为服务:

    $ docker service create --name registry --publish published=5000,target=5000 registry:2  # name 根据自己喜欢而定
    

    检查其状态docker service ls:你会发现你注册成功的registry

    $ docker service ls
    ID            NAME      REPLICAS  IMAGE                                                                               COMMAND
    l7791tpuwkco  registry  1/1       registry:2@sha256:1152291c7f93a4ea2ddc95e46d142c31e743b6dd70e194af9e6ebe530f782c17
    

    第二步

    创建示例应用程序
    本指南中使用的应用程序基于“ Docker Compose入门指南”中的命中计数器应用程序 。它由一个Python应用程序组成,它在Redis实例中维护一个计数器,并在您访问计数器时增加计数器。

    为项目创建一个目录:

    $ mkdir stackdemo
    $ cd stackdemo
    

    第三步  

    创建一个app.py项目

    from flask import Flask
    from redis import Redis
    app = Flask(__name__)
    redis = Redis(host='redis', port=6379)
    @app.route('/')
    def hello():
        count = redis.incr('hits')
        return 'Hello World! I have been seen {} times.
    '.format(count)
    
    if __name__ == "__main__":
        app.run(host="0.0.0.0", port=8000, debug=True)
    

    创建一个名为requirements.txt并粘贴这两行的文件:

    flask
    redis
    

    创建一个名为Dockerfile:

    FROM python:3.4-alpine
    ADD . /code
    WORKDIR /code
    RUN pip install -r requirements.txt
    CMD ["python", "app.py"]
    

    创建一个名为docker-compose.yml

    version: '3'
    services:
      web:
        image: 127.0.0.1:5000/stackdemo
        build: .
        ports:
          - "8000:8000"
      redis:
        image: redis:alpine
    

    注意:Web应用程序的图像是使用上面定义的Dockerfile构建的。它也被标记为127.0.0.1:5000- 之前创建的注册表的地址。将应用程序分发给群体时,这非常重要。

    若是在本地,直接去除build, image换成自己的镜像,详情见下本地示例

    第三步

    开始与应用程序docker-compose up。这会构建Web应用程序图像,如果您尚未拥有它,请拉取Redis映像,然后创建两个容器。

    $ docker-compose up -d
    # -d 启动后在后台运行
    

    检查应用程序是否正在运行docker-compose ps:

    $ docker-compose ps
    
          Name                     Command               State           Ports
    -----------------------------------------------------------------------------------
    stackdemo_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
    stackdemo_web_1     python app.py                    Up      0.0.0.0:8000->8000/tcp
    

    将应用程序关闭:

    $ docker-compose down --volumes
    
    Stopping stackdemo_web_1 ... done
    Stopping stackdemo_redis_1 ... done
    Removing stackdemo_web_1 ... done
    Removing stackdemo_redis_1 ... done
    Removing network stackdemo_default
    

    第四步

    将生成的图像推送到注册表
    要在整个群体中分发Web应用程序的图像,需要将它推送到之前设置的注册表。使用Compose

    $ docker-compose push
    
    Pushing web (127.0.0.1:5000/stackdemo:latest)...
    The push refers to a repository [127.0.0.1:5000/stackdemo]
    5b5a49501a76: Pushed
    be44185ce609: Pushed
    bd7330a79bcf: Pushed
    c9fc143a069a: Pushed
    011b303988d2: Pushed
    latest: digest: sha256:a81840ebf5ac24b42c1c676cbda3b2cb144580ee347c07e1bc80e35e5ca76507 size: 1372
    

    现在你已经部署好了

    最后  

    创建堆栈docker stack deploy:

    $ docker stack deploy --compose-file docker-compose.yml stackdemo
    
    Ignoring unsupported options: build
    
    Creating network stackdemo_default
    Creating service stackdemo_web
    Creating service stackdemo_redis
    

    检查它是否正在运行

    $ docker stack services stackdemo
    
    ID            NAME             MODE        REPLICAS  IMAGE
    orvjk2263y1p  stackdemo_redis  replicated  1/1       redis:3.2-alpine@sha256:f1ed3708f538b537eb9c2a7dd50dc90a706f7debd7e1196c9264edeea521a86d
    s1nf0xy8t1un  stackdemo_web    replicated  1/1       127.0.0.1:5000/stackdemo@sha256:adb070e0805d04ba2f92c724298370b7a4eb19860222120d43e0f6351ddbc26f
    

    一旦它的运行,你应该看到1/1在REPLICAS两种服务。如果您有多节点群,这可能需要一些时间,因为需要拉取图像。

    看到这恭喜你,成功部署了docker-swarm

    如果此时你也测试成功,想用自己的本地代码测试部署,发现出现了问题,那么别急

    首先然后将你的Web做成image, 在docker-compose.yml文件中修改

    然后docker-compose.yml

    version: '3'
    services:
      nginx:
        image: nginx:alpine
        ports:
          - "8880:443"
        volumes:
          - ./src:/src
          - ./config/nginx:/etc/nginx/conf.d
          - ./config/ssl:/usr/share/nginx/ssl
        depends_on:
          - web
      web:
        image: 127.0.0.1:5000/stackdemo:20180530
        command: "python3 /src/manage.py runserver 0.0.0.0:8802"
        depends_on:
          - db
        volumes:
          - ./src:/src
      db:
        image: postgres:latest
    

    此时的web image 是你本地测试好的image 镜像,一定是在docker-compose 测试成功后

    最后

    docker-compose push 
    docker stack deploy --compose-file docker-compose.yml stackdemo
    

    稍作等待即可

    使用完了然后删除

     docker stack rm stackdemo
    
    Removing service stackdemo_web
    Removing service stackdemo_redis
    Removing network stackdemo_default
    

     

    $ docker service rm registry

    如果只是在本地计算机上进行测试,并希望将Docker Engine从群集模式中移出,请使用docker swarm leave:

    $ docker swarm leave --force

    Node left the swarm.

     

      

      

      

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    换行的展示
    jsp页面的导出功能
    怎么设置回车键为提交功能?
    HBuilder使用心得
    js和jQuery
    前端常用技术总结--java程序员
    对压缩文件加密
    删除表中一个字段的SQL语句
    用NPOI操作EXCEL-锁定列CreateFreezePane()
    MVC 点击下载文档
  • 原文地址:https://www.cnblogs.com/flash55/p/9113565.html
Copyright © 2011-2022 走看看