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)
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)
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='镜像删除成功')
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)
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)
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()})
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)
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()
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)
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='容器启动成功')
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='镜像拉取成功')
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()