run-docker 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env python3
  2. import argparse
  3. import os
  4. import common
  5. container_name = kwargs['repo_short_id']
  6. container_hostname = kwargs['repo_short_id']
  7. image_name = kwargs['repo_short_id']
  8. target_dir = '/root/{}'.format(kwargs['repo_short_id'])
  9. docker = ['sudo', 'docker']
  10. def create(args):
  11. self.sh.run_cmd(docker + ['build', '-t', image_name, '.', LF])
  12. # --privileged for KVM:
  13. # https://stackoverflow.com/questions/48422001/launching-qemu-kvm-from-inside-docker-container
  14. self.sh.run_cmd(
  15. docker +
  16. [
  17. 'create', LF,
  18. '--hostname', container_hostname, LF,
  19. '-i', LF,
  20. '--name', container_name, LF,
  21. '--net', 'host', LF,
  22. '--privileged', LF,
  23. '-t', LF,
  24. '-w', target_dir, LF,
  25. '-v', '{}:{}'.format(os.getcwd(), target_dir), LF,
  26. image_name,
  27. ]
  28. )
  29. def destroy(args):
  30. stop(args)
  31. self.sh.run_cmd(docker + ['rm', container_name, LF])
  32. self.sh.run_cmd(docker + ['rmi', image_name, LF])
  33. def sh(args):
  34. start(args)
  35. if args:
  36. sh_args = args
  37. else:
  38. sh_args = ['bash']
  39. self.sh.run_cmd(
  40. docker + ['exec', '-i', '-t', container_name] +
  41. sh_args +
  42. [LF],
  43. )
  44. def start(args):
  45. self.sh.run_cmd(docker + ['start', container_name, LF])
  46. def stop(args):
  47. self.sh.run_cmd(docker + ['stop', container_name, LF])
  48. cmd_action_map = {
  49. 'create': lambda args: create(args),
  50. 'DESTROY': lambda args: destroy(args),
  51. 'sh': lambda args: sh(args),
  52. 'start': lambda args: start(args),
  53. 'stop': lambda args: stop(args),
  54. }
  55. parser = argparse.ArgumentParser()
  56. parser.add_argument('cmd', choices=cmd_action_map)
  57. parser.add_argument('args', nargs='*')
  58. self.add_dry_run_argument(parser)
  59. args = parser.parse_args()
  60. self.setup_dry_run_arguments(args)
  61. cmd_action_map[kwargs['cmd']](kwargs['args'])