indocker 0.0.2 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +42 -6
  3. data/bin/indocker +1 -1
  4. data/indocker.gemspec +4 -0
  5. data/lib/indocker/application_initializer.rb +1 -12
  6. data/lib/indocker/cli.rb +10 -0
  7. data/lib/indocker/configs/config.rb +93 -22
  8. data/lib/indocker/configs/config_factory.rb +17 -16
  9. data/lib/indocker/configs/config_initializer.rb +9 -0
  10. data/lib/indocker/container/container_builder.rb +29 -0
  11. data/lib/indocker/{directives → container}/container_directives_runner.rb +8 -0
  12. data/lib/indocker/container/container_dsl.rb +26 -3
  13. data/lib/indocker/container/container_inspector.rb +26 -0
  14. data/lib/indocker/container/container_manager.rb +43 -32
  15. data/lib/indocker/container/container_metadata.rb +31 -26
  16. data/lib/indocker/container/container_metadata_factory.rb +5 -2
  17. data/lib/indocker/directives/base.rb +6 -10
  18. data/lib/indocker/directives/container_directives/base.rb +4 -0
  19. data/lib/indocker/directives/container_directives/cmd.rb +7 -0
  20. data/lib/indocker/directives/container_directives/env.rb +7 -0
  21. data/lib/indocker/directives/container_directives/env_file.rb +3 -3
  22. data/lib/indocker/directives/container_directives/from.rb +4 -2
  23. data/lib/indocker/directives/container_directives/ports.rb +11 -4
  24. data/lib/indocker/directives/container_directives/volume.rb +23 -0
  25. data/lib/indocker/directives/{docker_directives → image_directives}/base.rb +13 -1
  26. data/lib/indocker/directives/{docker_directives → image_directives}/cmd.rb +5 -1
  27. data/lib/indocker/directives/image_directives/copy.rb +32 -0
  28. data/lib/indocker/directives/{prepare_directives → image_directives}/docker_cp.rb +5 -1
  29. data/lib/indocker/directives/{docker_directives → image_directives}/entrypoint.rb +5 -1
  30. data/lib/indocker/directives/image_directives/env.rb +9 -0
  31. data/lib/indocker/directives/image_directives/env_file.rb +19 -0
  32. data/lib/indocker/directives/image_directives/expose.rb +9 -0
  33. data/lib/indocker/directives/image_directives/from.rb +36 -0
  34. data/lib/indocker/directives/image_directives/registry.rb +30 -0
  35. data/lib/indocker/directives/image_directives/run.rb +17 -0
  36. data/lib/indocker/directives/image_directives/workdir.rb +9 -0
  37. data/lib/indocker/directives/partial.rb +9 -1
  38. data/lib/indocker/docker_api/container_config.rb +121 -0
  39. data/lib/indocker/{docker_api.rb → docker_api/docker_api.rb} +79 -52
  40. data/lib/indocker/dsl_context.rb +4 -0
  41. data/lib/indocker/envs/env_metadata.rb +4 -0
  42. data/lib/indocker/errors.rb +5 -1
  43. data/lib/indocker/git/git_api.rb +32 -0
  44. data/lib/indocker/git/git_helper.rb +34 -0
  45. data/lib/indocker/git/git_service.rb +21 -0
  46. data/lib/indocker/handlers/{run_container.rb → container_run.rb} +4 -13
  47. data/lib/indocker/handlers/container_stop.rb +17 -0
  48. data/lib/indocker/handlers/performable.rb +22 -0
  49. data/lib/indocker/image/image_builder.rb +22 -7
  50. data/lib/indocker/image/image_dependencies_manager.rb +13 -9
  51. data/lib/indocker/image/image_directives_runner.rb +99 -0
  52. data/lib/indocker/image/image_dockerfile_builder.rb +24 -0
  53. data/lib/indocker/image/image_dsl.rb +38 -18
  54. data/lib/indocker/image/image_evaluator.rb +1 -1
  55. data/lib/indocker/image/image_helper.rb +9 -0
  56. data/lib/indocker/image/image_metadata.rb +9 -9
  57. data/lib/indocker/image/image_metadata_factory.rb +11 -10
  58. data/lib/indocker/image/image_metadata_repository.rb +8 -9
  59. data/lib/indocker/registry/registry_api.rb +46 -0
  60. data/lib/indocker/registry/registry_helper.rb +20 -0
  61. data/lib/indocker/registry/registry_service.rb +28 -0
  62. data/lib/indocker/utils/logger_factory.rb +1 -0
  63. data/lib/indocker/utils/registry_authenticator.rb +5 -5
  64. data/lib/indocker/utils/tar_helper.rb +5 -5
  65. data/lib/indocker/version.rb +1 -1
  66. data/lib/indocker/volumes/volume_metadata.rb +9 -0
  67. data/lib/indocker/volumes/volume_metadata_factory.rb +9 -0
  68. data/lib/indocker/volumes/volume_metadata_repository.rb +34 -0
  69. data/lib/indocker.rb +56 -27
  70. data/spec/example/.indocker/config.rb +14 -7
  71. data/spec/fixtures/spec.env +2 -0
  72. data/spec/indocker/configs/config_spec.rb +52 -1
  73. data/spec/indocker/container/container_builder_spec.rb +67 -0
  74. data/spec/indocker/container/container_manager_spec.rb +177 -129
  75. data/spec/indocker/docker_api/container_config_spec.rb +64 -0
  76. data/spec/indocker/{utils → docker_api}/docker_api_spec.rb +38 -13
  77. data/spec/indocker/handlers/container_run_spec.rb +60 -0
  78. data/spec/indocker/image/image_builder_spec.rb +64 -26
  79. data/spec/indocker/image/image_directives_runner_spec.rb +141 -0
  80. data/spec/indocker/image/image_dockerfile_builder_spec.rb +25 -0
  81. data/spec/indocker/image/image_evaluator_spec.rb +29 -9
  82. data/spec/spec_helper.rb +38 -16
  83. metadata +108 -32
  84. data/lib/indocker/directives/docker_directives/copy.rb +0 -27
  85. data/lib/indocker/directives/docker_directives/env.rb +0 -5
  86. data/lib/indocker/directives/docker_directives/from.rb +0 -30
  87. data/lib/indocker/directives/docker_directives/run.rb +0 -5
  88. data/lib/indocker/directives/docker_directives/workdir.rb +0 -5
  89. data/lib/indocker/directives/image_directives_runner.rb +0 -120
  90. data/lib/indocker/directives/prepare_directives/base.rb +0 -6
  91. data/lib/indocker/envs/manager.rb +0 -30
  92. data/lib/indocker/handlers/base.rb +0 -13
  93. data/spec/indocker/directives/image_directives_runner_spec.rb +0 -121
  94. data/spec/indocker/handlers/run_container_spec.rb +0 -107
  95. data/spec/tmp/indocker_list_container_files/deeper/example3.txt +0 -1
  96. data/spec/tmp/indocker_list_container_files/deeper/example4.txt +0 -1
  97. data/spec/tmp/indocker_list_container_files/example1.txt +0 -1
  98. data/spec/tmp/indocker_list_container_files/example2.txt +0 -1
@@ -19,44 +19,64 @@ class Indocker::ImageDSL
19
19
  def partial(name, opts = {})
20
20
  @directives << Indocker::Directives::Partial.new(name, @context, opts)
21
21
  end
22
+
23
+ def expose(port)
24
+ @directives << Indocker::ImageDirectives::Expose.new(port)
25
+ end
22
26
 
23
27
  def from(*args)
24
- @directives << Indocker::DockerDirectives::From.new(*args)
28
+ first_from_directive = @directives.detect {|c| c.instance_of?(Indocker::ImageDirectives::From)}
29
+ raise Indocker::Errors::DirectiveAlreadyInUse, first_from_directive if first_from_directive
30
+
31
+ @directives << Indocker::ImageDirectives::From.new(*args)
32
+ end
33
+
34
+ def use(item)
35
+ case item
36
+ when Indocker::Registry::RegistryHelper
37
+ first_from_directive = @directives.detect {|c| c.instance_of?(Indocker::ImageDirectives::Registry)}
38
+ raise Indocker::Errors::DirectiveAlreadyInUse, first_from_directive if first_from_directive
39
+
40
+ @directives << Indocker::ImageDirectives::Registry.new(
41
+ repo: repo,
42
+ tag: tag,
43
+ registry: item.registry,
44
+ push: item.push
45
+ )
46
+ end
25
47
  end
26
48
 
27
49
  def workdir(*args)
28
- @directives << Indocker::DockerDirectives::Workdir.new(*args)
50
+ @directives << Indocker::ImageDirectives::Workdir.new(*args)
29
51
  end
30
52
 
31
53
  def run(*args)
32
- @directives << Indocker::DockerDirectives::Run.new(*args)
54
+ @directives << Indocker::ImageDirectives::Run.new(*args)
33
55
  end
34
56
 
35
57
  def cmd(*args)
36
- @directives << Indocker::DockerDirectives::Cmd.new(*args)
58
+ @directives << Indocker::ImageDirectives::Cmd.new(*args)
37
59
  end
38
60
 
39
- def copy(copy_actions)
40
- @directives << Indocker::DockerDirectives::Copy.new(
41
- context: @context,
42
- copy_actions: copy_actions
43
- )
44
- end
45
-
46
- def copy_compile(copy_actions)
47
- @directives << Indocker::DockerDirectives::Copy.new(
48
- context: @context,
61
+ def copy(copy_actions = {}, compile = false)
62
+ @directives << Indocker::ImageDirectives::Copy.new(
63
+ compile: compile,
49
64
  copy_actions: copy_actions,
50
- compile: true
65
+ locals: @context.storage,
66
+ build_dir: @context.build_dir
51
67
  )
52
68
  end
53
69
 
54
70
  def entrypoint(*args)
55
- @directives << Indocker::DockerDirectives::Entrypoint.new(*args)
71
+ @directives << Indocker::ImageDirectives::Entrypoint.new(*args)
56
72
  end
57
73
 
58
74
  def env(*args)
59
- @directives << Indocker::DockerDirectives::Env.new(args)
75
+ @directives << Indocker::ImageDirectives::Env.new(args)
76
+ end
77
+
78
+ def env_file(*paths)
79
+ @directives.concat paths.map {|p| Indocker::ImageDirectives::EnvFile.new(p)}
60
80
  end
61
81
 
62
82
  def before_build(&block)
@@ -64,6 +84,6 @@ class Indocker::ImageDSL
64
84
  end
65
85
 
66
86
  def docker_cp(container_name, &block)
67
- @directives << Indocker::PrepareDirectives::DockerCp.new(container_name, @context.build_dir, &block)
87
+ @directives << Indocker::ImageDirectives::DockerCp.new(container_name, @context.build_dir, &block)
68
88
  end
69
89
  end
@@ -11,7 +11,7 @@ class Indocker::ImageEvaluator
11
11
 
12
12
  image_dsl.directives
13
13
  .map do |directive|
14
- next directive if !directive.partial?
14
+ next directive if !directive.partial_directive?
15
15
 
16
16
  partial = partial_metadata_repository.find_by_name(directive.name)
17
17
  evaluate(directive.context, &partial.definition)
@@ -0,0 +1,9 @@
1
+ module Indocker::ImageHelper
2
+ DEFAULT_TAG = 'latest'
3
+
4
+ def full_name(repo, tag = nil)
5
+ tag ||= DEFAULT_TAG
6
+
7
+ "#{repo}:#{tag}"
8
+ end
9
+ end
@@ -1,7 +1,7 @@
1
1
  class Indocker::ImageMetadata
2
- DEFAULT_TAG = 'latest'
2
+ include Indocker::ImageHelper
3
3
 
4
- attr_reader :repo, :tag, :directives, :build_dir
4
+ attr_reader :repo, :tag, :directives, :build_dir
5
5
 
6
6
  def initialize(repo:, tag:, directives:, build_dir:)
7
7
  @repo = repo
@@ -11,23 +11,23 @@ class Indocker::ImageMetadata
11
11
  end
12
12
 
13
13
  def full_name
14
- "#{repo}:#{tag}"
15
- end
16
-
17
- def full_name_with_registry
18
- "#{Indocker.config.registry}/#{local_full_name}"
14
+ super(@repo, @tag)
19
15
  end
20
16
 
21
17
  def prepare_directives
22
18
  directives.select {|d| d.prepare_directive?}
23
19
  end
24
20
 
21
+ def after_build_directives
22
+ directives.select {|d| d.after_build_directive?}
23
+ end
24
+
25
25
  def build_directives
26
26
  directives.select {|d| d.build_directive?}
27
27
  end
28
28
 
29
29
  def docker_cp_directives
30
- directives.select {|d| d.is_a?(Indocker::PrepareDirectives::DockerCp)}
30
+ directives.select {|d| d.is_a?(Indocker::ImageDirectives::DockerCp)}
31
31
  end
32
32
 
33
33
  def from_repo
@@ -45,6 +45,6 @@ class Indocker::ImageMetadata
45
45
  private
46
46
 
47
47
  def from_directive
48
- @directives.detect {|c| c.instance_of?(Indocker::DockerDirectives::From)}
48
+ @directives.detect {|c| c.instance_of?(Indocker::ImageDirectives::From)}
49
49
  end
50
50
  end
@@ -1,4 +1,5 @@
1
1
  class Indocker::ImageMetadataFactory
2
+ include Indocker::ImageHelper
2
3
  include SmartIoC::Iocify
3
4
 
4
5
  bean :image_metadata_factory
@@ -6,25 +7,25 @@ class Indocker::ImageMetadataFactory
6
7
  inject :image_evaluator
7
8
  inject :docker_api
8
9
  inject :config
10
+ inject :git_helper
11
+ inject :registry_service
9
12
 
10
- def create(repo, tag: Indocker::ImageMetadata::DEFAULT_TAG, &definition)
13
+ def create(repo, tag: Indocker::ImageHelper::DEFAULT_TAG, &definition)
11
14
  context = Indocker::DSLContext.new(
12
- build_dir: build_dir(repo),
13
- root_dir: config.root
15
+ build_dir: config.build_dir.join(repo.to_s),
16
+ git: git_helper,
17
+ repo: repo,
18
+ tag: tag,
19
+ registry: registry_service
14
20
  )
21
+
15
22
  directives = image_evaluator.evaluate(context, &definition)
16
23
 
17
24
  Indocker::ImageMetadata.new(
18
25
  repo: repo.intern,
19
26
  tag: tag.intern,
20
27
  directives: directives,
21
- build_dir: build_dir(repo)
28
+ build_dir: config.build_dir.join(repo.to_s)
22
29
  )
23
30
  end
24
-
25
- private
26
-
27
- def build_dir(name)
28
- Pathname.new File.join(config.root, Indocker::BUILD_DIR, name.to_s)
29
- end
30
31
  end
@@ -1,5 +1,6 @@
1
1
  class Indocker::ImageMetadataRepository
2
2
  include SmartIoC::Iocify
3
+ include Indocker::ImageHelper
3
4
 
4
5
  bean :image_metadata_repository
5
6
 
@@ -7,13 +8,17 @@ class Indocker::ImageMetadataRepository
7
8
  all.push(image_metadata)
8
9
  end
9
10
 
10
- def find_by_repo(repo, tag: Indocker::ImageMetadata::DEFAULT_TAG)
11
- image_metadata = all.detect { |im| im.repo == repo.intern and im.tag == tag.intern }
12
- raise Indocker::Errors::ImageIsNotDefined, "#{repo}:#{tag}" if image_metadata.nil?
11
+ def find_by_full_name(image_metadata_full_name)
12
+ image_metadata = all.detect { |image_metadata| image_metadata.full_name == image_metadata_full_name }
13
+ raise Indocker::Errors::ImageIsNotDefined, image_metadata_full_name if image_metadata.nil?
13
14
 
14
15
  image_metadata
15
16
  end
16
17
 
18
+ def find_by_repo(repo, tag: nil)
19
+ find_by_full_name(full_name(repo, tag))
20
+ end
21
+
17
22
  def clear
18
23
  @all = []
19
24
  end
@@ -21,10 +26,4 @@ class Indocker::ImageMetadataRepository
21
26
  def all
22
27
  @all ||= []
23
28
  end
24
-
25
- def method_missing(method, **args)
26
- tag = args[:tag] || Indocker::ImageMetadata::DEFAULT_TAG
27
-
28
- find_by_repo(method, tag: tag)
29
- end
30
29
  end
@@ -0,0 +1,46 @@
1
+ require 'docker_registry2'
2
+
3
+ class Indocker::Registry::RegistryAPIBuilder
4
+ include SmartIoC::Iocify
5
+
6
+ bean :registry_api
7
+
8
+ inject :config
9
+
10
+ def get(registry_name)
11
+ registry = config.docker.send(registry_name)
12
+
13
+ Indocker::Registry::RegistryAPI.new(
14
+ serveraddress: registry.serveraddress,
15
+ username: registry.username,
16
+ password: registry.password
17
+ )
18
+ end
19
+ end
20
+
21
+ class Indocker::Registry::RegistryAPI
22
+ def initialize(serveraddress:, username:, password:)
23
+ @serveraddress = serveraddress
24
+ @username = username
25
+ @password = password
26
+ end
27
+
28
+ def rmtag(repo, tag: nil)
29
+ tag ||= 'latest'
30
+
31
+ registry.rmtag(repo, tag)
32
+ end
33
+
34
+ private
35
+
36
+ def registry
37
+ @registry ||= DockerRegistry2.connect(@serveraddress, connection_options)
38
+ end
39
+
40
+ def connection_options
41
+ {
42
+ username: @username,
43
+ password: @password
44
+ }.delete_if {|_, value| value.to_s.empty?}
45
+ end
46
+ end
@@ -0,0 +1,20 @@
1
+ module Indocker::Registry
2
+ class RegistryHelper
3
+ include Indocker::ImageHelper
4
+
5
+ attr_reader :push, :registry
6
+
7
+ def initialize(registry:, push: false)
8
+ @registry = registry
9
+ @push = push
10
+ end
11
+
12
+ def to_s
13
+ registry
14
+ end
15
+
16
+ def get(repository, tag: nil)
17
+ "#{registry}/#{full_name(repository, tag)}"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ class Indocker::Registry::RegistryService
2
+ include SmartIoC::Iocify
3
+
4
+ bean :registry_service
5
+
6
+ inject :config
7
+
8
+ def method_missing(method, *args)
9
+ if !config.docker.respond_to?(method)
10
+ raise ArgumentError, "Registry #{method} is not defined. Add it to config.docker section"
11
+ end
12
+
13
+ registry_config = config.docker.send(method)
14
+
15
+ Indocker::Registry::RegistryHelper.new(
16
+ registry: registry_config.serveraddress,
17
+ push: args.first[:push]
18
+ )
19
+ end
20
+
21
+ def get(registry)
22
+ if !config.docker.respond_to?(method)
23
+ raise ArgumentError, "Registry #{method} is not defined. Add it to config.docker section"
24
+ end
25
+
26
+ config.docker.send(method).serveraddress
27
+ end
28
+ end
@@ -4,6 +4,7 @@ class Indocker::LoggerFactory
4
4
  bean :logger, factory_method: :build
5
5
 
6
6
  def build
7
+ STDOUT.sync = true
7
8
  Indocker::Logger.new(STDOUT)
8
9
  end
9
10
  end
@@ -6,12 +6,12 @@ class Indocker::RegistryAvaliabilityChecker
6
6
  inject :config
7
7
  inject :docker_api
8
8
 
9
- def authenticate!
9
+ def authenticate!(serveraddress:, username:, email:, password:)
10
10
  docker_api.authenticate!(
11
- serveraddress: config.docker.registry,
12
- username: config.docker.username,
13
- email: config.docker.email,
14
- password: config.docker.password
11
+ serveraddress: serveraddress,
12
+ username: username,
13
+ email: email,
14
+ password: password
15
15
  )
16
16
  rescue Docker::Error::AuthenticationError
17
17
  raise Indocker::Errors::DockerRegistryAuthenticationError
@@ -19,18 +19,18 @@ class Indocker::TarHelper
19
19
  tarfile_full_name = tarfile.full_name
20
20
  end
21
21
 
22
- destination_file = File.join destination, tarfile_full_name
22
+ destination_file = File.join(destination, tarfile_full_name)
23
23
 
24
24
  if tarfile.directory?
25
25
  FileUtils.mkdir_p destination_file
26
26
  else
27
27
  files_list.push(tarfile_full_name)
28
28
 
29
- destination_directory = File.dirname(destination_file)
30
- FileUtils.mkdir_p destination_directory unless File.directory?(destination_directory)
31
- File.open destination_file, "wb" do |f|
32
- f.print tarfile.read
29
+ if !File.directory?(destination)
30
+ FileUtils.mkdir_p destination
33
31
  end
32
+
33
+ File.open(destination_file, "wb") {|f| f.print tarfile.read}
34
34
  end
35
35
  end
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Indocker
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.0.5'.freeze
3
3
  end
@@ -0,0 +1,9 @@
1
+ module Indocker::Volumes
2
+ class VolumeMetadata
3
+ attr_reader :name
4
+
5
+ def initialize(name)
6
+ @name = name
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class Indocker::Volumes::VolumeMetadataFactory
2
+ include SmartIoC::Iocify
3
+
4
+ bean :volume_metadata_factory
5
+
6
+ def create(name)
7
+ Indocker::Volumes::VolumeMetadata.new(name.to_s)
8
+ end
9
+ end
@@ -0,0 +1,34 @@
1
+ class Indocker::Volumes::VolumeMetadataRepository
2
+ include SmartIoC::Iocify
3
+
4
+ bean :volume_metadata_repository
5
+
6
+ def put(volume_metadata)
7
+ if all.any? {|n| n.name == volume_metadata.name}
8
+ raise Indocker::Errors::VolumeAlreadyDefined, volume_metadata.name
9
+ end
10
+
11
+ all.push(volume_metadata)
12
+ end
13
+
14
+ def find_by_name(name)
15
+ volume_metadata = all.detect {|volume| volume.name == name.to_s}
16
+ raise Indocker::Errors::VolumeIsNotDefined unless volume_metadata
17
+
18
+ volume_metadata
19
+ end
20
+
21
+ def clear
22
+ @all = []
23
+ end
24
+
25
+ def all
26
+ @all ||= []
27
+ end
28
+
29
+ def method_missing(method)
30
+ find_by_name(method)
31
+ rescue
32
+ super
33
+ end
34
+ end
data/lib/indocker.rb CHANGED
@@ -1,24 +1,27 @@
1
1
  require 'smart_ioc'
2
- require 'docker-api'
3
- require 'logger'
2
+
3
+ require 'byebug' # TODO: remove after release
4
4
 
5
5
  SmartIoC.find_package_beans(:indocker, __dir__)
6
6
  SmartIoC.set_load_proc do |location|
7
7
  require(location)
8
8
  end
9
9
 
10
- Docker.options = { read_timeout: 600, write_timeout: 600 }
11
-
12
10
  require 'indocker/version'
13
11
 
12
+ require 'indocker/image/image_helper'
13
+
14
14
  require 'indocker/errors'
15
15
  require 'indocker/cli'
16
- require 'indocker/docker_api'
17
16
  require 'indocker/dsl_context'
18
17
 
18
+ require 'indocker/docker_api/docker_api'
19
+ require 'indocker/docker_api/container_config'
20
+
19
21
  require 'indocker/configs/config'
20
22
  require 'indocker/configs/config_factory'
21
23
  require 'indocker/configs/locator'
24
+ require 'indocker/configs/config_initializer'
22
25
 
23
26
  require 'indocker/utils/logger'
24
27
  require 'indocker/utils/logger_factory'
@@ -29,15 +32,19 @@ require 'indocker/utils/registry_authenticator'
29
32
  require 'indocker/utils/render_util'
30
33
  require 'indocker/utils/render_namespace'
31
34
 
32
- require 'indocker/handlers/base'
33
- require 'indocker/handlers/run_container'
35
+ require 'indocker/handlers/performable'
36
+ require 'indocker/handlers/container_run'
37
+ require 'indocker/handlers/container_stop'
34
38
 
35
39
  require 'indocker/utils/ioc_container'
36
40
 
37
41
  require 'indocker/envs/env_metadata'
38
- require 'indocker/envs/manager'
39
42
  require 'indocker/envs/loader'
40
43
 
44
+ require 'indocker/registry/registry_helper'
45
+ require 'indocker/registry/registry_service'
46
+ require 'indocker/registry/registry_api'
47
+
41
48
  require 'indocker/image/image_metadata'
42
49
  require 'indocker/image/image_metadata_factory'
43
50
  require 'indocker/image/image_dsl'
@@ -45,6 +52,8 @@ require 'indocker/image/image_metadata_repository'
45
52
  require 'indocker/image/image_builder'
46
53
  require 'indocker/image/image_dependencies_manager'
47
54
  require 'indocker/image/image_evaluator'
55
+ require 'indocker/image/image_dockerfile_builder'
56
+ require 'indocker/image/image_directives_runner'
48
57
 
49
58
  require 'indocker/container/container_metadata'
50
59
  require 'indocker/container/container_metadata_repository'
@@ -52,12 +61,12 @@ require 'indocker/container/container_metadata_factory'
52
61
  require 'indocker/container/container_manager'
53
62
  require 'indocker/container/container_evaluator'
54
63
  require 'indocker/container/container_dsl'
64
+ require 'indocker/container/container_builder'
65
+ require 'indocker/container/container_directives_runner'
55
66
 
56
67
  require 'indocker/partial/partial_metadata'
57
68
  require 'indocker/partial/partial_metadata_repository'
58
69
 
59
- require 'indocker/directives/image_directives_runner'
60
- require 'indocker/directives/container_directives_runner'
61
70
  require 'indocker/directives/base'
62
71
  require 'indocker/directives/partial'
63
72
 
@@ -65,30 +74,40 @@ require 'indocker/networks/network_metadata'
65
74
  require 'indocker/networks/network_metadata_factory'
66
75
  require 'indocker/networks/network_metadata_repository'
67
76
 
68
- require 'indocker/directives/docker_directives/base'
69
- require 'indocker/directives/docker_directives/cmd'
70
- require 'indocker/directives/docker_directives/entrypoint'
71
- require 'indocker/directives/docker_directives/env'
72
- require 'indocker/directives/docker_directives/copy'
73
- require 'indocker/directives/docker_directives/from'
74
- require 'indocker/directives/docker_directives/run'
75
- require 'indocker/directives/docker_directives/workdir'
76
-
77
- require 'indocker/directives/prepare_directives/base'
78
- require 'indocker/directives/prepare_directives/docker_cp'
77
+ require 'indocker/volumes/volume_metadata'
78
+ require 'indocker/volumes/volume_metadata_factory'
79
+ require 'indocker/volumes/volume_metadata_repository'
80
+
81
+ require 'indocker/directives/image_directives/base'
82
+ require 'indocker/directives/image_directives/cmd'
83
+ require 'indocker/directives/image_directives/entrypoint'
84
+ require 'indocker/directives/image_directives/env'
85
+ require 'indocker/directives/image_directives/copy'
86
+ require 'indocker/directives/image_directives/from'
87
+ require 'indocker/directives/image_directives/run'
88
+ require 'indocker/directives/image_directives/workdir'
89
+ require 'indocker/directives/image_directives/expose'
90
+ require 'indocker/directives/image_directives/env_file'
91
+ require 'indocker/directives/image_directives/docker_cp'
92
+ require 'indocker/directives/image_directives/registry'
79
93
 
80
94
  require 'indocker/directives/container_directives/base'
81
95
  require 'indocker/directives/container_directives/from'
82
96
  require 'indocker/directives/container_directives/network'
83
- require 'indocker/directives/container_directives/env_file'
84
97
  require 'indocker/directives/container_directives/ports'
85
98
  require 'indocker/directives/container_directives/expose'
86
99
  require 'indocker/directives/container_directives/depends_on'
87
100
  require 'indocker/directives/container_directives/ready'
101
+ require 'indocker/directives/container_directives/cmd'
102
+ require 'indocker/directives/container_directives/volume'
103
+ require 'indocker/directives/container_directives/env_file'
104
+ require 'indocker/directives/container_directives/env'
105
+
106
+
107
+ require 'indocker/git/git_helper'
88
108
 
89
109
  module Indocker
90
110
  DOCKERFILE_NAME = 'Dockerfile'
91
- BUILD_DIR = 'tmp/build'
92
111
 
93
112
  class << self
94
113
  def define_image(name, &definition)
@@ -97,9 +116,9 @@ module Indocker
97
116
  )
98
117
  end
99
118
 
100
- def define_container(name, &definition)
119
+ def define_container(name, attach: false, &definition)
101
120
  ioc.container_metadata_repository.put(
102
- ioc.container_metadata_factory.create(name, &definition)
121
+ ioc.container_metadata_factory.create(name, attach: attach, &definition)
103
122
  )
104
123
  end
105
124
 
@@ -115,12 +134,22 @@ module Indocker
115
134
  )
116
135
  end
117
136
 
137
+ def define_volume(name)
138
+ ioc.volume_metadata_repository.put(
139
+ ioc.volume_metadata_factory.create(name)
140
+ )
141
+ end
142
+
118
143
  def setup(&block)
119
144
  ioc.config.set(&block)
120
145
  end
121
146
 
122
- def root(dir = nil)
123
- ioc.config.root(dir)
147
+ def cache_dir(dir = nil)
148
+ ioc.config.git.cache_dir(Pathname.new(dir))
149
+ end
150
+
151
+ def build_dir(dir = nil)
152
+ ioc.config.build_dir(Pathname.new(dir))
124
153
  end
125
154
  end
126
155
  end
@@ -1,21 +1,28 @@
1
1
  Idocker.setup do
2
- namespace 'indocker_example'
3
- root File.dirname(__dir__)
2
+ namespace 'indocker_example'
4
3
 
5
4
  load_env_file '.indocker/env_files'
6
5
  load_docker_items [
7
6
  '.indocker/images_and_containers.rb'
8
7
  ]
9
8
 
9
+ docker do
10
+ registry :indocker do
11
+ serveraddress: 'localhost:1000'
12
+ end
13
+ end
14
+
10
15
  git do
11
- repository 'https://github.com/droidlabs/indocker'
12
- tag 'latest'
13
- branch 'master'
14
- workdir 'some/path'
16
+ cache_dir '/tmp/indocker'
17
+
18
+ repo :indocker do
19
+ repository 'https://github.com/droidlabs/indocker'
20
+ branch 'master'
21
+ end
15
22
  end
16
23
 
17
24
  docker do
18
- registry 'localhost:5000'
25
+ registry 'localhost:1000'
19
26
  skip_push true
20
27
  end
21
28
 
@@ -0,0 +1,2 @@
1
+ RUBY_ENV=development
2
+ RAILS_ENV=development