def pull(name, tag='latest', **kwargs) -> Image: logger.info('Pulling image %s' % (name, ) if not tag else 'Pulling image %s:%s' % (name, tag)) image = get_client().images.pull(name, tag=tag, **kwargs) if type(image) == list(): return image[0] return image
def build(fp, tag, logs=False, remove=True, timeout=300, pull_image=True, **kwargs): logger.info('Building image %s from %s' % (tag, fp)) try: image, log = get_client().images.build(path=fp, tag=tag, rm=remove, timeout=timeout, pull=pull_image, **kwargs) if logs: return (image, log) else: return image except BuildError: logger.error('Build for image from %s failed' % (fp, ))
def prune() -> dict: return get_client().containers.prune()
def rm(*container_names, timeout=30): for name in container_names: container = get_client().containers.get(name) container.stop(timeout=timeout) container.remove()
def stop(*container_names, timeout=30) -> None: [get_client().containers.get(name).stop(timeout=timeout) for name in container_names]
def restart(*container_names, timeout=30) -> None: [get_client().containers.get(name).restart(timeout=timeout) for name in container_names]
def exec_inside(name, command, sudo=False, user='******', detach=True, stream=True) -> tuple: return get_client().containers.get(name).exec_run(cmd=command, privileged=sudo, user=user, stream=stream, detach=detach)
def list(raw=False) -> list: if raw: return get_client().containers.list() else: return [container.name for container in get_client().containers.list()]
def get(name): return get_client().containers.get(name)
def list_all(name=True, raw=False, **kwargs) -> list: if name: return [image.name for image in get_client().images.list(**kwargs)] elif raw: return get_client().images.list()
def prune() -> dict: return get_client().images.prune()
def rm(*image_names, **kwargs) -> list: [ get_client().images.remove(image=name, **kwargs) for name in image_names ]
def load(fp) -> list: with open(fp, 'rb') as f: images = get_client().images.load(f) return images
def save(name, fp, chunk_size=2097152, named=True) -> None: logger.info('Saving image %s to file %s' % (name, fp)) with open(fp, 'wb') as f: for e in get_client().images.get(name).save(chunk_size=chunk_size, named=named): f.write(e)
def resume(*container_names) -> None: [get_client().containers.get(name).unpause() for name in container_names]
def run(image_name, name, detach=True, **kwargs) -> Container: logger.info('Run a container with name %s from image %s' % (name, image_name)) try: container = get_client().containers.run(image_name, name=name, detach=detach, **kwargs) if container.status !=
def status(name) -> str: return get_client().containers.get(name).status()
def create(image_name, name, detach=True, **kwargs): logger.info('Create a container with name %s from image %s' % (name, image_name)) container = get_client().containers.create(image_name, name=name, detach=detach, **kwargs)
def stats(*container_names) -> list: return [get_client().containers.get(name).stats(stream=True, decode=True) for name in container_names]
def start(*container_names) -> None: logger.info('Starting containers: ' % (name, image_name)) [get_client().containers.get(name).start() for name in container_names]
def export(name, fp, chunk_size=2097152) -> None: bits, status = get_client().containers.get(name).export(chunk_size=chunk_size) with open(fp, 'wb') as f: for chunk in bits: f.write(chunk)
def get(name) -> Image: try: return get_client().images.get(name) except ImageNotFound: logger.error('Image %s not found..' % (name, ))