docker_daemon: add pull_images option

This commit is contained in:
Johan Euphrosine 2014-10-31 05:32:15 -07:00
parent 880e13f0d8
commit f3a9a1b1ec
3 changed files with 58 additions and 0 deletions

View file

@ -22,3 +22,4 @@ def resolve_tasks(taskset, manifest):
taskset.add(tasks.AddDockerBinary) taskset.add(tasks.AddDockerBinary)
taskset.add(tasks.AddDockerInit) taskset.add(tasks.AddDockerInit)
taskset.add(tasks.EnableMemoryCgroup) taskset.add(tasks.EnableMemoryCgroup)
taskset.add(tasks.PullDockerImages)

View file

@ -0,0 +1,43 @@
import os
import subprocess
import time
import logging
def pull(info, images, retries=10):
if len(images) == 0:
return
bin_docker = os.path.join(info.root, 'usr/bin/docker')
graph_dir = os.path.join(info.root, 'var/lib/docker')
socket = 'unix://' + os.path.join(info.workspace, 'docker.sock')
pidfile = os.path.join(info.workspace, 'docker.pid')
try:
daemon = subprocess.Popen([bin_docker, '-d', '--graph', graph_dir, '-H', socket, '-p', pidfile])
for _ in range(retries):
if subprocess.call([bin_docker, '-H', socket, 'version']) == 0:
break
time.sleep(1)
for img in images:
if img.endswith('.tar.gz') or img.endswith('.tgz'):
cmd = [bin_docker, '-H', socket, 'load', '-i', img]
logging.debug(' '.join(cmd))
if subprocess.call(cmd) != 0:
msg = 'error loading docker image {img}.'.format(img=img)
raise Exception(msg)
continue
cmd = [bin_docker, '-H', socket, 'pull', img]
logging.debug('running: %s', ' '.join(cmd))
if subprocess.call(cmd) != 0:
msg = 'error pulling docker image {img}.'.format(img=img)
raise Exception(msg)
finally:
daemon.terminate()
if __name__ == '__main__':
class Info(object):
root = '/tmp/bootstrap-vz/root'
workspace = '/tmp/bootstrap-vz/workspace'
pull_images = ['/usr/local/google/home/proppy/bootstrap-vz/busybox.tar.gz', 'golang:1.3']
pull(Info(), pull_images)

View file

@ -3,6 +3,7 @@ from bootstrapvz.common import phases
from bootstrapvz.common.tasks import boot from bootstrapvz.common.tasks import boot
from bootstrapvz.common.tasks import initd from bootstrapvz.common.tasks import initd
from bootstrapvz.providers.gce.tasks import boot as gceboot from bootstrapvz.providers.gce.tasks import boot as gceboot
from bootstrapvz.plugins.docker_daemon.pull import pull
import os import os
import os.path import os.path
import shutil import shutil
@ -65,3 +66,16 @@ class EnableMemoryCgroup(Task):
from bootstrapvz.common.tools import sed_i from bootstrapvz.common.tools import sed_i
grub_config = os.path.join(info.root, 'etc/default/grub') grub_config = os.path.join(info.root, 'etc/default/grub')
sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1 cgroup_enable=memory"') sed_i(grub_config, r'^(GRUB_CMDLINE_LINUX*=".*)"\s*$', r'\1 cgroup_enable=memory"')
class PullDockerImages(Task):
description = 'Pull docker images'
phase = phases.system_modification
predecessors = [AddDockerBinary]
@classmethod
def run(cls, info):
pull_images = info.manifest.plugins['docker_daemon'].get('pull_images', [])
if len(pull_images) == 0:
return
pull_images_retries = info.manifest.plugins['docker_daemon'].get('pull_images_retries', 10)
pull(info, pull_images, pull_images_retries)