Class: Indocker::ContainerManager
- Inherits:
-
Object
- Object
- Indocker::ContainerManager
- Includes:
- SmartIoC::Iocify
- Defined in:
- lib/indocker/container/container_manager.rb
Constant Summary collapse
- KEEP_CONTAINER_RUNNING_COMMAND =
%w(tail -F -n0 /etc/hosts)
Instance Method Summary collapse
- #copy(name:, copy_from:, copy_to:) ⇒ Object
- #create(name) ⇒ Object
- #delete(name) ⇒ Object
- #start(name) ⇒ Object
- #stop(name) ⇒ Object
Instance Method Details
#copy(name:, copy_from:, copy_to:) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/indocker/container/container_manager.rb', line 83 def copy(name:, copy_from:, copy_to:) = .get_by_name(name) container_id = docker_api.create_container( repo: .repo, tag: .tag, command: KEEP_CONTAINER_RUNNING_COMMAND ) if !docker_api.container_exists?(name) tar_snapshot = File.join(config.root, 'tmp', "#{name.to_s}.tar") docker_api.copy_from_container(name: container_id, path: copy_from) do |tar_archive| File.open(tar_snapshot, 'w') {|f| f.write(tar_archive)} end files_list = tar_helper.untar( io: File.open(tar_snapshot, 'r'), destination: copy_to, ignore_wrap_directory: File.basename(copy_from) == '.' ) FileUtils.rm_rf(tar_snapshot) docker_api.stop_container(container_id) docker_api.delete_container(container_id) files_list end |
#create(name) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/indocker/container/container_manager.rb', line 17 def create(name) = .get_by_name(name) = .env_files .map {|path| envs_loader.parse(config.root.join(path))} .inject(Indocker::Envs::EnvMetadata.new) {|sum, env| sum += env} container_id = docker_api.create_container( name: name, repo: .repo, tag: .tag, exposed_ports: .exposed_ports, port_bindings: .port_bindings, env: .to_array ) logger.info "Successfully created container :#{name}" container_id end |
#delete(name) ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/indocker/container/container_manager.rb', line 75 def delete(name) container_id = docker_api.delete_container(name) logger.info "Successfully deleted container :#{name}" container_id end |
#start(name) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/indocker/container/container_manager.rb', line 38 def start(name) = .get_by_name(name) container_directives_runner.run_all( .before_start_directives ) .container_dependencies.each do |dependency| create(dependency) unless docker_api.container_exists?(dependency) unless docker_api.get_container_state(dependency) == Indocker::ContainerMetadata::States::RUNNING start(dependency) end end container_id = docker_api.start_container(name) logger.info "Successfully started container :#{name}" container_directives_runner.run_all( .after_start_directives ) container_id rescue Docker::Error::ClientError => e logger.error "The following error occured when starting :#{name} container" logger.error e. end |
#stop(name) ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/indocker/container/container_manager.rb', line 67 def stop(name) container_id = docker_api.stop_container(name) logger.info "Successfully stopped container :#{name}" container_id end |