博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker-swarm
阅读量:5130 次
发布时间:2019-06-13

本文共 4559 字,大约阅读时间需要 15 分钟。

部署集群

在群集模式下运行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 lsID            NAME      REPLICAS  IMAGE                                                                               COMMANDl7791tpuwkco  registry  1/1       registry:2@sha256:1152291c7f93a4ea2ddc95e46d142c31e743b6dd70e194af9e6ebe530f782c17

第二步

创建示例应用程序

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

为项目创建一个目录:

$ mkdir stackdemo$ cd stackdemo

第三步  

创建一个app.py项目

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

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

flaskredis

创建一个名为Dockerfile:

FROM python:3.4-alpineADD . /codeWORKDIR /codeRUN pip install -r requirements.txtCMD ["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/tcpstackdemo_web_1     python app.py                    Up      0.0.0.0:8000->8000/tcp

将应用程序关闭:

$ docker-compose down --volumesStopping stackdemo_web_1 ... doneStopping stackdemo_redis_1 ... doneRemoving stackdemo_web_1 ... doneRemoving stackdemo_redis_1 ... doneRemoving network stackdemo_default

第四步

将生成的图像推送到注册表

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

$ docker-compose pushPushing web (127.0.0.1:5000/stackdemo:latest)...The push refers to a repository [127.0.0.1:5000/stackdemo]5b5a49501a76: Pushedbe44185ce609: Pushedbd7330a79bcf: Pushedc9fc143a069a: Pushed011b303988d2: Pushedlatest: digest: sha256:a81840ebf5ac24b42c1c676cbda3b2cb144580ee347c07e1bc80e35e5ca76507 size: 1372

现在你已经部署好了

最后  

创建堆栈docker stack deploy:

$ docker stack deploy --compose-file docker-compose.yml stackdemoIgnoring unsupported options: buildCreating network stackdemo_defaultCreating service stackdemo_webCreating service stackdemo_redis

检查它是否正在运行

$ docker stack services stackdemoID            NAME             MODE        REPLICAS  IMAGEorvjk2263y1p  stackdemo_redis  replicated  1/1       redis:3.2-alpine@sha256:f1ed3708f538b537eb9c2a7dd50dc90a706f7debd7e1196c9264edeea521a86ds1nf0xy8t1un  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 stackdemoRemoving service stackdemo_webRemoving service stackdemo_redisRemoving network stackdemo_default

 

$ docker service rm registry

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

$ docker swarm leave --force

Node left the swarm.

 

  

  

  

  

  

  

  

  

  

  

  

  

转载于:https://www.cnblogs.com/flash55/p/9113565.html

你可能感兴趣的文章
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
VMware Tools安装
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
zoj 2286 Sum of Divisors
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
OpenCV之响应鼠标(三):响应鼠标信息
查看>>
Android 画图之 Matrix(一)
查看>>
List<T>列表通用过滤模块设计
查看>>
【模板】最小生成树
查看>>
设计模式之结构型模式
查看>>