如何调用docker swarm service的API来创建及更新服务

平衡的推进,先作一个原型吧。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json

#定义docker swarm的管理节点ip,端口号,API版本,服务名, 服务URL
#在后期集成到自动化部署时,需要精简数据结构,完善data, 增加精准判断及空间回收
#API更多用途参考: https://docs.docker.com/engine/api/v1.29/
docker_swarm_ip_port = "ip:port"
docker_swarm_api_version = "v1.29"
docker_swarm_service_name = "tomcatbv"

get_service_url = "http://%s/%s/services/%s" %(docker_swarm_ip_port, docker_swarm_api_version, docker_swarm_service_name)

data = {
  "Name": "tomcatbv",
  "TaskTemplate": {
    "ContainerSpec": {
      "Image": "harbor_op/project_name/tomcat:20170620demo",
    },
    "Placement": {},
    "RestartPolicy": {
      "Condition": "on-failure",
      "Delay": 10000000000,
      "MaxAttempts": 10
    }
  },
  "Mode": {
    "Replicated": {
      "Replicas": 1
    }
  },
  "UpdateConfig": {
    "Parallelism": 2,
    "FailureAction": "pause",
  },
  "RollbackConfig": {
    "Parallelism": 1,
  },
  "Labels": {
    "foo": "bar"
  }
}

#创建docker swarm service服务
def create_service():
    url = "http://%s/%s/services/create" %(docker_swarm_ip_port, docker_swarm_api_version)
    data_json = json.dumps(data)
    r = requests.post(url, data=data_json)
    print r.text
    if r.status_code == 201:
        print "created ok"
    else:
        print "create error"
        sys.exit()

#更新docker swarm service服务
def update_service(version_index):
    url = "http://%s/%s/services/%s/update?version=%s" %(docker_swarm_ip_port, docker_swarm_api_version, docker_swarm_service_name, version_index)
    data_json = json.dumps(data)
    r = requests.post(url, data=data_json)
    print version_index, r.text, r.status_code
    if r.status_code == 200:
        print "updated ok"
    else:
        print "update error"
        sys.exit()

def main():
    get_service_url = "http://%s/%s/services/%s" %(docker_swarm_ip_port, docker_swarm_api_version, docker_swarm_service_name)
    r = requests.get(get_service_url)
    print get_service_url, r.status_code, r.text
    if r.status_code != 200:
        create_service()
    else:
        version_index = eval(r.text)["Version"]["Index"]
        update_service(version_index)

if __name__ == "__main__":
    main()

时间: 2024-10-04 09:55:23

如何调用docker swarm service的API来创建及更新服务的相关文章

Docker Swarm(七)Scale 扩(缩)容服务

扩(缩)容服务 扩容服务 Service还提供了复制(类似kubernetes里的副本)功能.可以通过 docker service scale 命令来设置服务中容器的副本数: docker service scale masl=4 和创建服务一样,增加scale数之后,将会创建新的容器,这些新启动的容器也会经历从准备到运行的过程,过一分钟左右,服务应该就会启动完成,这时候可以再来看一下 masl 服务中的容器 可以看到,之前masl容器在manager-node和node1节点上各有一个实例,

Docker Swarm(六)Label 节点标签与服务约束

前言 多节点 Swarm 集群下,可能节点的配置不同(比如 CPU.内存等),部署着不同类型的服务(比如 Web服务.Job服务等),当这些服务以 Service 或者 Stack 的形式部署到集群,默认情况下会随机分配到各个节点. 场景1:不同类型的服务对服务器需求的资源是不同的,为了更合理的利用服务器资源,我们可能希望某些服务能够部署到指定的服务器上. 场景2:Swarm 集群中的节点跨机房,为了内部服务间通信更快,我们可能希望关联比较密切的服务能够部署到同一机房的节点上. 以上场景要如何做

Docker swarm 获取service的container信息

我们可以通过docker service create创建服务,例如: docker service create --name mysql mysql:latest 服务创建好后,如何来获取该service包含的容器信息呢?比如获取刚才创建的mysql服务的容器.我们可以通过docker service ps命令来获取, 命令行方式 ~# docker service ps mysql ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR P

Docker系列(十四):Docker Swarm集群

一.Swarm简介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm和Kubernetes比较类似,但是更加轻便,具有的功能也较kubernetes更少一些. Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Do

Docker实践(六):Docker Swarm

环境说明: 主机名 操作系统版本 IP地址 docker版本 说明 manager Ubuntu 16.04.5 172.27.9.71 18.09.2 manager管理主机 work01 Ubuntu 16.04.5 172.27.9.75 18.09.2 worker主机01 work02 Ubuntu 16.04.5 172.27.9.76 18.09.2 worker主机02 本文所有测试都在Vmware虚拟机(版本为12.5.2)上完成ubuntu安装详见:Ubuntu16.04.5

Docker Swarm集群初探

前言 相信Docker技术大家都有所了解,单个Docker能发挥的作用毕竟有限,也不便于管理,所以Docker得组集群来使用才能发挥强大的技术优势.既然要组集群那就涉及诸如Docker的资源调度.管理等等一系列问题.目前涉及Docker集群的三个主要的技术无外乎Swarm.Kubernetes.Mesos三种.从本文开始作者将会一一实践这几种主要的Docker集群技术,话不多说,现在开始. 注意:作者的kubernetes相关实践在此 环境准备 Mac OS X 10.13.2 Docker 1

使用Docker Swarm搭建分布式爬虫集群

在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更新? 有时候爬虫只需要在一个服务器上面运行,有时候需要在200个服务器上面运行.你是怎么快速切换的呢?一个服务器一个服务器登录上去开关?或者聪明一点,在Redis里面设置一个可以修改的标记,只有标记对应的服务器上面的爬虫运行? A爬虫已经在所有服务器上面部署了,现在又做了一个B爬虫,你是不是又得依次

docker swarm英文文档学习-8-在集群中部署服务

Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运行服务容器的镜像名称和标记有多少容器参与服务是否有任何端口暴露给集群之外的客户端当Docker启动时,服务是否应该自动启动重启服务时发生的特定行为(例如是否使用滚动重启)服务可以运行的节点的特征(例如资源约束和位置首选项)有关群模式的概述,请参见 Swarm mode key concepts.有关

Docker Swarm群集配置实战

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合. 从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要