コード例 #1
0
def container_list():
    form = ClientForm().validate_for_api()
    host = form.host.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    containers = client.containers.list(all)
    container_list = {
        'running_list': [],
        'exited_list': [],
        'all_list': []
    }
    for container in containers:
        container_list['all_list'].append(container.attrs['Name'][1:])
        if container.attrs['State']['Status'] == 'running':
            container_list['running_list'].append(container.attrs['Name'][1:])
        if container.attrs['State']['Status'] == 'exited':
            container_list['exited_list'].append(container.attrs['Name'][1:])
    client.close()
    return jsonify(container_list)
コード例 #2
0
def create_client():
    form = ClientForm().validate_for_api()
    host = form.host.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    info_all = client.info()
    info = {}
    info['Name'] = info_all['Name']
    info['OperatingSystem'] = info_all['OperatingSystem']
    info['DockerRootDir'] = info_all['DockerRootDir']
    info['NCPU'] = info_all['NCPU']
    info['MemTotal'] = round(info_all['MemTotal']/1024/1024/1024, 2)
    info['ServerVersion'] = info_all['ServerVersion']
    info['Containers'] = info_all['Containers']
    info['ContainersRunning'] = info_all['ContainersRunning']
    info['ContainersStopped'] = info_all['ContainersStopped']
    info['Images'] = info_all['Images']
    client.close()
    return jsonify(info)
コード例 #3
0
ファイル: image.py プロジェクト: Minge-B/docker-manager
def delete():
    form = ImageForm().validate_for_api()
    host = form.host.data
    image = form.image.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert, key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),
                                          verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376',
                                     tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    try:
        client.images.remove(image)
    except ImageNotFound:
        client.close()
        return NotFound()
    except APIError:
        client.close()
        return ImageUsed()
    # client.images.remove(image)
    client.close()

    return DeleteSuccess(msg='镜像删除成功')
コード例 #4
0
def list():
    form = ListForm().validate_for_api()
    host = form.host.data
    page = int(form.page.data)
    search = form.search.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    container_list = client.containers.list(all=True)

    containers= []
    for c in container_list:
        container = {}
        container['name'] = c.name
        container['id'] = c.short_id
        container['status'] = c.status
        container['ports'] = str(c.ports).replace('{','').replace('}','').replace(': None','').replace("'HostIp': ",'').replace(", 'HostPort'",'')
        container['created'] = c.attrs['Created'].split('.')[0].replace('T',' ')
        container['restartCount'] = c.attrs['RestartCount']
        container['cmd'] = str(c.attrs['Config']['Cmd'])
        container['image'] = c.attrs['Config']['Image']
        if c.attrs['HostConfig']['Binds']:
            container['volumes'] = str(c.attrs['HostConfig']['Binds']).replace(':rw', '')
        else:
            container['volumes'] = ''
        container['network'] = c.attrs['HostConfig']['NetworkMode']
        #container['portsSet'] = str(c.attrs['HostConfig']['PortBindings']).replace('{', '').replace('}', '').replace("'HostIp': '', 'HostPort': ", '')
        containers.append(container)

    #查询
    if search:
        container_list_new = []
        for c in containers:
            if search in c['name'] or search in c['id']:
                container_list_new.append(c)
        containers = container_list_new

    #分页
    PAGE_NUM = current_app.config['PAGE_NUM']
    start = (page - 1) * PAGE_NUM
    end = page * PAGE_NUM
    data = containers[start:end]
    paginate_result = {
        'data': data,
        'page': page,
        'pages': math.ceil(len(containers)/PAGE_NUM),
        'total': len(containers)
    }

    client.close()

    return jsonify(paginate_result)
コード例 #5
0
ファイル: image.py プロジェクト: Minge-B/docker-manager
def list():
    form = ListForm().validate_for_api()
    host = form.host.data
    page = int(form.page.data)
    search = form.search.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert, key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),
                                          verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376',
                                     tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    images = client.images.list()
    image_list = []
    for i in images:
        for image_tag in i.attrs['RepoTags']:
            image_item = {}
            image_name = ':'.join(image_tag.split(':')[:-1])
            image_tag = image_tag.split(':')[-1]
            image_item['name'] = image_name
            image_item['tag'] = image_tag
            image_item['id'] = i.short_id.split(':')[1]
            image_item['created'] = i.attrs['Created'].split('.')[0].replace(
                'T', ' ')
            if i.attrs['Size'] / 1000000 > 1:
                image_item['size'] = str(round(
                    i.attrs['Size'] / 1000000)) + 'MB'
            else:
                image_item['size'] = str(round(i.attrs['Size'] / 1000)) + 'KB'
            image_item['DockerVersion'] = i.attrs['DockerVersion']
            image_list.append(image_item)
    #查询
    if search:
        image_list_new = []
        for i in image_list:
            if search in i['name'] or search in i['id']:
                image_list_new.append(i)
        image_list = image_list_new
    PAGE_NUM = current_app.config['PAGE_NUM']
    start = (page - 1) * PAGE_NUM
    end = page * PAGE_NUM
    data = image_list[start:end]
    paginate_result = {
        'data': data,
        'page': page,
        'pages': math.ceil(len(image_list) / PAGE_NUM),
        'total': len(image_list)
    }
    client.close()
    return jsonify(paginate_result)
コード例 #6
0
def logs(data):
    host = data.get('host')
    name = data.get('name')
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    c = client.containers.get(name)
    for line in c.logs(stream=True, tail=20, follow=True):
        print(line.decode('utf-8').strip())
        emit(host + name, {'name': name, 'msg': line.decode('utf-8').strip()})
コード例 #7
0
def image_list():
    form = ClientForm().validate_for_api()
    host = form.host.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    images = client.images.list()
    image_list = []
    for image in images:
        image_list += image.attrs['RepoTags']
    client.close()
    return jsonify(image_list)
コード例 #8
0
def shell(ws):
    form = ContainerForm().validate_for_api()
    host = 'www.guojiaxing.red'
    name_or_Id = 'f5ca53929c1d'
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.APIClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.APIClient(base_url='tcp://' + host + ':2375')
    exec_id = client.exec_create(name_or_Id,'/bin/sh',stdin=True,tty=True)['Id']
    client.exec_resize(exec_id, height=100, width=118)
    client.exec_start(exec_id, detach=False, tty=True, stream=True)

    client.close()
コード例 #9
0
def search():
    form = ImageForm().validate_for_api()
    host = form.host.data
    image = form.image.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    images = client.images.search(image)
    for i in images:
        i['tag'] = ''
    client.close()
    return jsonify(images)
コード例 #10
0
def start():
    form = ContainerForm().validate_for_api()
    host = form.host.data
    name_or_Id = form.nameOrId.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    try:
        c = client.containers.get(name_or_Id)
        c.start()
    except Exception:
        client.close()
        return StartFail()

    client.close()
    return Success(msg='容器启动成功')
コード例 #11
0
def pull():
    form = PullForm().validate_for_api()
    host = form.host.data
    image = form.image.data
    tag = form.tag.data
    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    if not tag:
        tag = None
    try:
        client.images.pull(image,tag)
    except Exception:
        client.close()
        return PullFail()
    client.close()
    return Success(msg='镜像拉取成功')
コード例 #12
0
def run():
    form = ImageForm().validate_for_api()
    host = form.host.data
    image = form.image.data
    command = form.command.data
    name = form.name.data
    restart = form.restart.data
    links = form.links.data
    ports = form.ports.data
    volumes = form.volumes.data
    if links:
        links_dick = {}
        for link in links.split(','):
            links_dick[link.split(':')[0]] = link.split(':')[1]
        links = links_dick
    else:
        links = None

    if ports:
        ports_dick = {}
        for port in ports.split(','):
            ports_dick[port.split(':')[1]] = port.split(':')[0]
        ports = ports_dick
    else:
        ports = None

    if volumes:
        volumes_dick = {}
        for volume in volumes.split(','):
            volumes_dick[volume.split(':')[0]] = {'bind': volume.split(':')[1], 'mode': 'rw'}
        volumes = volumes_dick
    else:
        volumes = None

    if restart:
        restart_policy = {"Name": "always"}
    else:
        restart_policy = None

    certification = get_certification(host)
    # 判断是否鉴权
    if certification:
        cert,key = cert_file_path(host)
        tls_config = docker.tls.TLSConfig(client_cert=(cert, key),verify=False)
        client = docker.DockerClient(base_url='tcp://' + host + ':2376', tls=tls_config)
    else:
        client = docker.DockerClient(base_url='tcp://' + host + ':2375')
    try:
        container = client.containers.run(image, command, detach=True, name=name, links=links, ports=ports,
                                          restart_policy=restart_policy, volumes=volumes)
        id = container.short_id
        name = container.attrs['Name'][1:]
        container = {
            "id": id,
            "name": name
        }
        client.close()
        return jsonify(container)
    except Exception:
        client.close()
        return DockerRunFail()