mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-22 18:00:35 +00:00
55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
from bootstrapvz.common.tools import log_check_call
|
|
import logging
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class Image(object):
|
|
|
|
def __init__(self, image_id, docker_env):
|
|
self.image_id = image_id
|
|
self.docker_env = docker_env
|
|
|
|
def __enter__(self):
|
|
self.container = Container(self.image_id, self.docker_env)
|
|
self.container.create()
|
|
try:
|
|
self.container.start()
|
|
except:
|
|
self.container.destroy()
|
|
raise
|
|
return self.container
|
|
|
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
try:
|
|
self.container.stop()
|
|
self.container.destroy()
|
|
except Exception as e:
|
|
log.exception(e)
|
|
|
|
|
|
class Container(object):
|
|
|
|
def __init__(self, image_id, docker_env):
|
|
self.image_id = image_id
|
|
self.docker_env = docker_env
|
|
|
|
def create(self):
|
|
log.debug('Creating container')
|
|
[self.container_id] = log_check_call(['docker', 'create', '--tty=true', self.image_id], env=self.docker_env)
|
|
|
|
def start(self):
|
|
log.debug('Starting container')
|
|
log_check_call(['docker', 'start', self.container_id], env=self.docker_env)
|
|
|
|
def run(self, command):
|
|
log.debug('Running command in container')
|
|
return log_check_call(['docker', 'exec', self.container_id] + command, env=self.docker_env)
|
|
|
|
def stop(self):
|
|
log.debug('Stopping container')
|
|
log_check_call(['docker', 'stop', self.container_id], env=self.docker_env)
|
|
|
|
def destroy(self):
|
|
log.debug('Deleting container')
|
|
log_check_call(['docker', 'rm', self.container_id], env=self.docker_env)
|
|
del self.container_id
|