def build_image(name): """Build a Docker image of specified name. Output from image building process will be printed to stdout. """ if not name: raise ValueError('must provide a Docker image name') image_dir = os.path.join(IMAGE_DIR, name) if not os.path.isdir(image_dir): raise Exception('image directory does not exist: %s' % image_dir) tag = docker.docker_image(name, default_version='latest') docker_bin = which.which('docker') # Verify that Docker is working. try: subprocess.check_output([docker_bin, '--version']) except subprocess.CalledProcessError: raise Exception('Docker server is unresponsive. Run `docker ps` and ' 'check that Docker is running') # We obtain a context archive and build from that. Going through the # archive creation is important: it normalizes things like file owners # and mtimes to increase the chances that image generation is # deterministic. fd, context_path = tempfile.mkstemp() os.close(fd) try: docker.create_context_tar(GECKO, image_dir, context_path, name) docker.build_from_context(docker_bin, context_path, name, tag) finally: os.unlink(context_path) print('Successfully built %s and tagged with %s' % (name, tag)) if tag.endswith(':latest'): print('*' * 50) print('WARNING: no VERSION file found in image directory.') print('Image is not suitable for deploying/pushing.') print('Create an image suitable for deploying/pushing by creating') print('a VERSION file in the image directory.') print('*' * 50)
def build_image(name): """Build a Docker image of specified name. Output from image building process will be printed to stdout. """ if not name: raise ValueError('must provide a Docker image name') image_dir = os.path.join(docker.IMAGE_DIR, name) if not os.path.isdir(image_dir): raise Exception('image directory does not exist: %s' % image_dir) tag = docker.docker_image(name, by_tag=True) docker_bin = which.which('docker') # Verify that Docker is working. try: subprocess.check_output([docker_bin, '--version']) except subprocess.CalledProcessError: raise Exception('Docker server is unresponsive. Run `docker ps` and ' 'check that Docker is running') # We obtain a context archive and build from that. Going through the # archive creation is important: it normalizes things like file owners # and mtimes to increase the chances that image generation is # deterministic. fd, context_path = tempfile.mkstemp() os.close(fd) try: docker.create_context_tar(GECKO, image_dir, context_path, name) docker.build_from_context(docker_bin, context_path, name, tag) finally: os.unlink(context_path) print('Successfully built %s and tagged with %s' % (name, tag)) if tag.endswith(':latest'): print('*' * 50) print('WARNING: no VERSION file found in image directory.') print('Image is not suitable for deploying/pushing.') print('Create an image suitable for deploying/pushing by creating') print('a VERSION file in the image directory.') print('*' * 50)