Skip to content

Instantly share code, notes, and snippets.

@rail44
Created June 3, 2014 08:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rail44/ac3f3f32ad82172ab255 to your computer and use it in GitHub Desktop.
Save rail44/ac3f3f32ad82172ab255 to your computer and use it in GitHub Desktop.
Load Docker image from registry to daemon.
#!/usr/bin/env python3
import os
import json
from io import BytesIO
import tarfile
from tarfile import TarInfo
import docker
import sys
reg_dir = os.environ.get('DOCKER_REGISTRY_DIR', '/tmp/registry')
c = docker.Client(os.environ.get('DOCKER_HOST', 'unix://var/run/docker.sock'))
tar_io = BytesIO()
tar = tarfile.open(mode='w|', fileobj=tar_io)
os.chdir(reg_dir)
os.chdir('./repositories/library/{0}'.format(sys.argv[1]))
latest = open('./tag_latest').read()
repositories = TarInfo('repositories')
repositories_io = BytesIO()
repositories.size = repositories_io.write(json.dumps({"app-base": {"latest": latest}}).encode())
repositories_io.seek(0)
tar.addfile(repositories, repositories_io)
os.chdir(reg_dir)
os.chdir('./images')
ids = [i['Id'] for i in c.images(all=True)]
os.chdir(latest)
ancestry = json.load(open('ancestry'))
os.chdir('../')
for image_id in ancestry:
if image_id not in ids:
tar.add(image_id)
tar.add('{0}/json'.format(image_id))
tar.add('{0}/layer'.format(image_id), '{0}/layer.tar'.format(image_id))
tar.close()
tar_io.seek(0)
c.load_image(tar_io)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment