From ba3429505147d1207942194592cf2b764ce2cf6c Mon Sep 17 00:00:00 2001 From: elbaro Date: Wed, 14 Jul 2021 13:12:21 +0900 Subject: [PATCH 1/4] allow multi-words in --buildcmd --- dockerize/dockerize.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerize/dockerize.py b/dockerize/dockerize.py index 1042e58..bb6cab0 100644 --- a/dockerize/dockerize.py +++ b/dockerize/dockerize.py @@ -230,7 +230,7 @@ def copy_files(self): self.copy_file(srcitem, dst) def build_image(self): - cmd = [self.docker['runtime'], self.docker['buildcmd']] + cmd = [self.docker['runtime']] + shlex.split(self.docker['buildcmd']) if 'tag' in self.docker: cmd += ['-t', self.docker['tag']] cmd += [self.targetdir] From 1b026f06dce0cf5a1406cfd0dfc6503de97165da Mon Sep 17 00:00:00 2001 From: elbaro Date: Wed, 14 Jul 2021 13:28:22 +0900 Subject: [PATCH 2/4] env --- dockerize/dockerize.py | 2 ++ dockerize/main.py | 8 +++++++- dockerize/templates/Dockerfile | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dockerize/dockerize.py b/dockerize/dockerize.py index bb6cab0..0cb5368 100644 --- a/dockerize/dockerize.py +++ b/dockerize/dockerize.py @@ -39,11 +39,13 @@ def __init__(self, runtime=None, buildcmd=None, symlinks=SymlinkOptions.PRESERVE, + envs=None, build=True): self.docker = {} self.docker['runtime'] = runtime if runtime else 'docker' self.docker['buildcmd'] = buildcmd if buildcmd else 'build' + self.docker['envs'] = envs if envs else [] if cmd: self.docker['cmd'] = json.dumps(shlex.split(cmd)) diff --git a/dockerize/main.py b/dockerize/main.py index 9a2f1f4..e3935ef 100644 --- a/dockerize/main.py +++ b/dockerize/main.py @@ -46,6 +46,11 @@ def parse_args(): default=[], help='Add file to image at ') + parser.add_argument('--env', + action='append', + default=[], + help='Add ENV={arg} in Dockerfile') + parser.add_argument('--symlinks', '-L', default='copy-unsafe', help='One of preserve, copy-unsafe, ' @@ -114,7 +119,8 @@ def main(): tag=args.tag, targetdir=args.output_dir, build=not args.no_build, - symlinks=args.symlinks) + symlinks=args.symlinks, + envs=args.env) for path in args.paths: app.add_file(path) diff --git a/dockerize/templates/Dockerfile b/dockerize/templates/Dockerfile index e33b102..d1918eb 100644 --- a/dockerize/templates/Dockerfile +++ b/dockerize/templates/Dockerfile @@ -7,3 +7,7 @@ ENTRYPOINT {{docker.entrypoint}} {% if docker.cmd -%} CMD {{docker.cmd}} {% endif -%} + +{% for env in docker.envs %} +ENV {{env}} +{% endfor %} \ No newline at end of file From a4992536a94005ce2f160a6291e67c2afb1fdbfe Mon Sep 17 00:00:00 2001 From: elbaro Date: Wed, 14 Jul 2021 14:13:14 +0900 Subject: [PATCH 3/4] workdir --- dockerize/dockerize.py | 2 + dockerize/main.py | 137 ++++++++++++++++++--------------- dockerize/templates/Dockerfile | 6 +- 3 files changed, 82 insertions(+), 63 deletions(-) diff --git a/dockerize/dockerize.py b/dockerize/dockerize.py index 0cb5368..96340ed 100644 --- a/dockerize/dockerize.py +++ b/dockerize/dockerize.py @@ -40,12 +40,14 @@ def __init__(self, buildcmd=None, symlinks=SymlinkOptions.PRESERVE, envs=None, + workdir=None, build=True): self.docker = {} self.docker['runtime'] = runtime if runtime else 'docker' self.docker['buildcmd'] = buildcmd if buildcmd else 'build' self.docker['envs'] = envs if envs else [] + self.docker['workdir'] = workdir if cmd: self.docker['cmd'] = json.dumps(shlex.split(cmd)) diff --git a/dockerize/main.py b/dockerize/main.py index e3935ef..8b4d5f5 100644 --- a/dockerize/main.py +++ b/dockerize/main.py @@ -28,67 +28,79 @@ def parse_args(): parser = argparse.ArgumentParser(description=__description__) group = parser.add_argument_group('Docker options') - group.add_argument('--tag', '-t', - help='Tag to apply to Docker image') + group.add_argument('--tag', '-t', help='Tag to apply to Docker image') group.add_argument('--cmd', '-c') group.add_argument('--entrypoint', '-e') group = parser.add_argument_group('Output options') - group.add_argument('--no-build', '-n', - action='store_true', - help='Do not build Docker image') + group.add_argument( + '--no-build', '-n', action='store_true', help='Do not build Docker image' + ) group.add_argument('--output-dir', '-o') - parser.add_argument('--add-file', '-a', - metavar=('SRC', 'DST'), - nargs=2, - action='append', - default=[], - help='Add file to image at ') - - parser.add_argument('--env', - action='append', - default=[], - help='Add ENV={arg} in Dockerfile') - - parser.add_argument('--symlinks', '-L', - default='copy-unsafe', - help='One of preserve, copy-unsafe, ' - 'skip-unsafe, copy-all') - parser.add_argument('--user', '-u', - action='append', - default=[], - help='Add user to /etc/passwd in image') - parser.add_argument('--group', '-g', - action='append', - default=[], - help='Add group to /etc/group in image') - - parser.add_argument('--filetools', - action='store_true', - help='Add common file manipulation tools') + parser.add_argument( + '--add-file', + '-a', + metavar=('SRC', 'DST'), + nargs=2, + action='append', + default=[], + help='Add file to image at ', + ) + + parser.add_argument( + '--env', action='append', default=[], help='Add ENV={arg} in Dockerfile' + ) + parser.add_argument( + '--workdir', default=None, help='Add WORKDIR={arg} in Dockerfile' + ) + + parser.add_argument( + '--symlinks', + '-L', + default='copy-unsafe', + help='One of preserve, copy-unsafe, ' 'skip-unsafe, copy-all', + ) + parser.add_argument( + '--user', + '-u', + action='append', + default=[], + help='Add user to /etc/passwd in image', + ) + parser.add_argument( + '--group', + '-g', + action='append', + default=[], + help='Add group to /etc/group in image', + ) + + parser.add_argument( + '--filetools', action='store_true', help='Add common file manipulation tools' + ) group = parser.add_argument_group('Container options') - parser.add_argument('--runtime', '-R', - help='Set container engine for building', - default='docker') - parser.add_argument('--buildcmd', '-B', - help='Set command for building', - default='build') + parser.add_argument( + '--runtime', '-R', help='Set container engine for building', default='docker' + ) + parser.add_argument( + '--buildcmd', '-B', help='Set command for building', default='build' + ) group = parser.add_argument_group('Logging options') - group.add_argument('--verbose', - action='store_const', - const=logging.INFO, - dest='loglevel') - group.add_argument('--debug', - action='store_const', - const=logging.DEBUG, - dest='loglevel') - - parser.add_argument('--version', - action='version', - version='%s version %s' % (__program__, __version__)) + group.add_argument( + '--verbose', action='store_const', const=logging.INFO, dest='loglevel' + ) + group.add_argument( + '--debug', action='store_const', const=logging.DEBUG, dest='loglevel' + ) + + parser.add_argument( + '--version', + action='version', + version='%s version %s' % (__program__, __version__), + ) parser.add_argument('paths', nargs=argparse.REMAINDER) parser.set_defaults(loglevel=logging.WARN) @@ -100,8 +112,7 @@ def main(): logging.basicConfig(level=args.loglevel) try: - args.symlinks = getattr(SymlinkOptions, - args.symlinks.upper().replace('-', '_')) + args.symlinks = getattr(SymlinkOptions, args.symlinks.upper().replace('-', '_')) except AttributeError: LOG.error('%s: invalid symlink mode', args.symlinks) sys.exit(1) @@ -112,15 +123,17 @@ def main(): if len(args.paths) == 1 and not args.entrypoint: args.entrypoint = args.paths[0] - app = Dockerize(cmd=args.cmd, - runtime=args.runtime, - buildcmd=args.buildcmd, - entrypoint=args.entrypoint, - tag=args.tag, - targetdir=args.output_dir, - build=not args.no_build, - symlinks=args.symlinks, - envs=args.env) + app = Dockerize( + cmd=args.cmd, + runtime=args.runtime, + buildcmd=args.buildcmd, + entrypoint=args.entrypoint, + tag=args.tag, + targetdir=args.output_dir, + build=not args.no_build, + symlinks=args.symlinks, + envs=args.env, + ) for path in args.paths: app.add_file(path) diff --git a/dockerize/templates/Dockerfile b/dockerize/templates/Dockerfile index d1918eb..d9cc88a 100644 --- a/dockerize/templates/Dockerfile +++ b/dockerize/templates/Dockerfile @@ -8,6 +8,10 @@ ENTRYPOINT {{docker.entrypoint}} CMD {{docker.cmd}} {% endif -%} +{% if docker.workdir is not none %} +WORKDIR {{docker.workdir}} +{% endif %} + {% for env in docker.envs %} ENV {{env}} -{% endfor %} \ No newline at end of file +{% endfor %} From 146e37f932078a7dcc365f13c5e4a64eda640d52 Mon Sep 17 00:00:00 2001 From: elbaro Date: Wed, 14 Jul 2021 14:30:20 +0900 Subject: [PATCH 4/4] workdir2 --- dockerize/main.py | 142 ++++++++++++++++++++++------------------------ 1 file changed, 67 insertions(+), 75 deletions(-) diff --git a/dockerize/main.py b/dockerize/main.py index 8b4d5f5..cc75652 100644 --- a/dockerize/main.py +++ b/dockerize/main.py @@ -28,79 +28,71 @@ def parse_args(): parser = argparse.ArgumentParser(description=__description__) group = parser.add_argument_group('Docker options') - group.add_argument('--tag', '-t', help='Tag to apply to Docker image') + group.add_argument('--tag', '-t', + help='Tag to apply to Docker image') group.add_argument('--cmd', '-c') group.add_argument('--entrypoint', '-e') group = parser.add_argument_group('Output options') - group.add_argument( - '--no-build', '-n', action='store_true', help='Do not build Docker image' - ) + group.add_argument('--no-build', '-n', + action='store_true', + help='Do not build Docker image') group.add_argument('--output-dir', '-o') - parser.add_argument( - '--add-file', - '-a', - metavar=('SRC', 'DST'), - nargs=2, - action='append', - default=[], - help='Add file to image at ', - ) - - parser.add_argument( - '--env', action='append', default=[], help='Add ENV={arg} in Dockerfile' - ) - parser.add_argument( - '--workdir', default=None, help='Add WORKDIR={arg} in Dockerfile' - ) - - parser.add_argument( - '--symlinks', - '-L', - default='copy-unsafe', - help='One of preserve, copy-unsafe, ' 'skip-unsafe, copy-all', - ) - parser.add_argument( - '--user', - '-u', - action='append', - default=[], - help='Add user to /etc/passwd in image', - ) - parser.add_argument( - '--group', - '-g', - action='append', - default=[], - help='Add group to /etc/group in image', - ) - - parser.add_argument( - '--filetools', action='store_true', help='Add common file manipulation tools' - ) + parser.add_argument('--add-file', '-a', + metavar=('SRC', 'DST'), + nargs=2, + action='append', + default=[], + help='Add file to image at ') + + parser.add_argument('--env', + action='append', + default=[], + help='Add ENV={arg} in Dockerfile') + + parser.add_argument('--workdir', + default=None, + help='Add WORKDIR={arg} in Dockerfile') + + parser.add_argument('--symlinks', '-L', + default='copy-unsafe', + help='One of preserve, copy-unsafe, ' + 'skip-unsafe, copy-all') + parser.add_argument('--user', '-u', + action='append', + default=[], + help='Add user to /etc/passwd in image') + parser.add_argument('--group', '-g', + action='append', + default=[], + help='Add group to /etc/group in image') + + parser.add_argument('--filetools', + action='store_true', + help='Add common file manipulation tools') group = parser.add_argument_group('Container options') - parser.add_argument( - '--runtime', '-R', help='Set container engine for building', default='docker' - ) - parser.add_argument( - '--buildcmd', '-B', help='Set command for building', default='build' - ) + parser.add_argument('--runtime', '-R', + help='Set container engine for building', + default='docker') + parser.add_argument('--buildcmd', '-B', + help='Set command for building', + default='build') group = parser.add_argument_group('Logging options') - group.add_argument( - '--verbose', action='store_const', const=logging.INFO, dest='loglevel' - ) - group.add_argument( - '--debug', action='store_const', const=logging.DEBUG, dest='loglevel' - ) - - parser.add_argument( - '--version', - action='version', - version='%s version %s' % (__program__, __version__), - ) + group.add_argument('--verbose', + action='store_const', + const=logging.INFO, + dest='loglevel') + group.add_argument('--debug', + action='store_const', + const=logging.DEBUG, + dest='loglevel') + + parser.add_argument('--version', + action='version', + version='%s version %s' % (__program__, __version__)) parser.add_argument('paths', nargs=argparse.REMAINDER) parser.set_defaults(loglevel=logging.WARN) @@ -112,7 +104,8 @@ def main(): logging.basicConfig(level=args.loglevel) try: - args.symlinks = getattr(SymlinkOptions, args.symlinks.upper().replace('-', '_')) + args.symlinks = getattr(SymlinkOptions, + args.symlinks.upper().replace('-', '_')) except AttributeError: LOG.error('%s: invalid symlink mode', args.symlinks) sys.exit(1) @@ -123,17 +116,16 @@ def main(): if len(args.paths) == 1 and not args.entrypoint: args.entrypoint = args.paths[0] - app = Dockerize( - cmd=args.cmd, - runtime=args.runtime, - buildcmd=args.buildcmd, - entrypoint=args.entrypoint, - tag=args.tag, - targetdir=args.output_dir, - build=not args.no_build, - symlinks=args.symlinks, - envs=args.env, - ) + app = Dockerize(cmd=args.cmd, + runtime=args.runtime, + buildcmd=args.buildcmd, + entrypoint=args.entrypoint, + tag=args.tag, + targetdir=args.output_dir, + build=not args.no_build, + symlinks=args.symlinks, + envs=args.env, + workdir=args.workdir) for path in args.paths: app.add_file(path)