dpmrb 0.1.0 → 0.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d251b5232b12841efab78a0f74f65056ae375e39a08445338d9265b6d83d75e
4
- data.tar.gz: ce4fd73830d32e9d8384c151a9f8a9c1d80c0adece695b94ccd52f12abcf5627
3
+ metadata.gz: d408ee6f24c0e503159587c35ef634821cba4143ee0a4bde49c0497636cde125
4
+ data.tar.gz: 1de01b1572bcc96575e7f2716ac78fefc5e38f87da9ed59e25a8d27117861e79
5
5
  SHA512:
6
- metadata.gz: 95386af7e0176db7a926b5cbea3e3e1822d7d7ef4ce31dfc35446b7d59aeb50f060f27542f7ca34bc0bb0a5ae2d86de03fe81f0b36f75ed0bc5c014eeb775dd8
7
- data.tar.gz: 235b12ac3c8c62bdafaad7a6c3632c319a4396fbcd98feb36cc102611c6b8bc0e63b5436c63ce47472835d4efaf149bf85b12ad8653ed83733315af13ea06d44
6
+ metadata.gz: 14f44aa24ca13e24032199766ddfc0ee90e25e8ffd873cba6d53ecffbc751def9a01cedd4c9e52457b64a44ccff48d65da6e30e20d9cbd3e1d23595708a760ed
7
+ data.tar.gz: 0cf758ea38f95aea2cd0ce13d3ca300f0936d5c751b1fc957b993395d3f020ecef5850f78ad39c9135f587dd88b03b993cfe612f2819a3e700ebc5703702e0bf
data/Gemfile.lock CHANGED
@@ -1,17 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dpmrb (0.1.0)
5
- activesupport (~> 7.x)
4
+ dpmrb (0.2.1)
5
+ activesupport (~> 6.x)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (7.0.3.1)
10
+ activesupport (6.1.6.1)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (>= 1.6, < 2)
13
13
  minitest (>= 5.1)
14
14
  tzinfo (~> 2.0)
15
+ zeitwerk (~> 2.3)
15
16
  ast (2.4.2)
16
17
  concurrent-ruby (1.1.10)
17
18
  i18n (1.12.0)
@@ -47,9 +48,11 @@ GEM
47
48
  tzinfo (2.0.5)
48
49
  concurrent-ruby (~> 1.0)
49
50
  unicode-display_width (2.2.0)
51
+ zeitwerk (2.6.0)
50
52
 
51
53
  PLATFORMS
52
54
  arm64-darwin-21
55
+ ruby
53
56
 
54
57
  DEPENDENCIES
55
58
  dpmrb!
data/README.en-US.md ADDED
@@ -0,0 +1,41 @@
1
+ [简体中文](README.md) | [English](README.en-US.md)
2
+
3
+ # DPM
4
+
5
+ Docker Package Manager, makes using your containers as easy as package managers (`apt`, `yml`, `brew`).
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ gem install dpmrb
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```bash
16
+ dpm help # Show help
17
+ dpm list # docker ps --filter "name=dpm-"
18
+ dpm start mysql # docker run --name=dpm-mysql -d --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes ...
19
+ dpm stop mysql # docker stop dpm-mysql
20
+ dpm status mysql # docker ps --filter "name=dpm-mysql"
21
+ dpm start elasticsearch:7.10.2 # docker run --name=dpm-elasticsearch-7.10.2 -d --rm -p 9200:9200 -e discovery.type=single-node ...
22
+ dpm start mysql:5.7 # docker run --name=dpm-mysql-5.7 -d --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes ...
23
+ ```
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/songhuangcn/dpm. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/songhuangcn/dpm/blob/main/CODE_OF_CONDUCT.md).
34
+
35
+ ## License
36
+
37
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
38
+
39
+ ## Code of Conduct
40
+
41
+ Everyone interacting in the DPM project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/songhuangcn/dpm/blob/main/CODE_OF_CONDUCT.md).
data/README.md CHANGED
@@ -1,16 +1,16 @@
1
- [English](README.md) | [简体中文](README.zh-CN.md)
1
+ [简体中文](README.md) | [English](README.en-US.md)
2
2
 
3
3
  # DPM
4
4
 
5
- Docker Package Manager, makes using your containers as easy as package managers (`apt`, `yml`, `brew`).
5
+ Docker Package Manager, 让你的容器用起来跟包管理器(`apt`, `yml`, `brew`)一样简单。
6
6
 
7
- ## Installation
7
+ ## 安装
8
8
 
9
9
  ```bash
10
10
  gem install dpmrb
11
11
  ```
12
12
 
13
- ## Usage
13
+ ## 使用
14
14
 
15
15
  ```bash
16
16
  dpm help # Show help
@@ -22,20 +22,82 @@ dpm start elasticsearch:7.10.2 # docker run --name=dpm-elasticsearch-7.10.2 -d -
22
22
  dpm start mysql:5.7 # docker run --name=dpm-mysql-5.7 -d --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes ...
23
23
  ```
24
24
 
25
- ## Development
25
+ ## 为项目添加新包
26
26
 
27
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
27
+ DPM [Homebrew](https://brew.sh/) 一样,需要完善更多的包配置,欢迎为 `packages` 目录添加你需要的包配置。
28
28
 
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
29
+ ### 配置级别
30
30
 
31
- ## Contributing
31
+ 容器配置都是通用的 YAML 格式,有三个级别:
32
32
 
33
- Bug reports and pull requests are welcome on GitHub at https://github.com/songhuangcn/dpm. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/songhuangcn/dpm/blob/main/CODE_OF_CONDUCT.md).
33
+ 1. 默认级别:`packages/default.yml`
34
+ 1. 包级别:`packages/PACKAGE/default.yml`
35
+ 1. 版本级别:`packages/PACKAGE/tag-TAG.yml`
34
36
 
35
- ## License
37
+ 配置是合并机制,如果一个包没有自定义配置,他就会根据默认级别配置跑起来。
36
38
 
37
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
39
+ ### 配置示例
38
40
 
39
- ## Code of Conduct
41
+ 例如有配置如下:
40
42
 
41
- Everyone interacting in the Dpm project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/songhuangcn/dpm/blob/main/CODE_OF_CONDUCT.md).
43
+ 1. `packages/default.yml`:
44
+ ```yml
45
+ run_options:
46
+ rm: true
47
+ d: true
48
+ ```
49
+ 1. `packages/mysql/default.yml`:
50
+ ```yml
51
+ run_options:
52
+ e: "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
53
+ p: "3306:3306"
54
+ ```
55
+ 1. `packages/mysql/tag-5.7.yml`:
56
+ ```yml
57
+ run_options:
58
+ p: "3307:3307"
59
+ ```
60
+
61
+ 则最终这些包配置的启动命令为:
62
+
63
+ - `mysql:5.7` 的配置:
64
+ ```bash
65
+ docker run --rm -d -p 3307:3307 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
66
+ ```
67
+ - `mysql` 的配置:
68
+ ```bash
69
+ docker run --rm -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql
70
+ ```
71
+ - `not-exist-pkg` 的配置:
72
+ ```bash
73
+ docker run --rm -d not-exist-pkg
74
+ ```
75
+
76
+ ### 其他配置
77
+
78
+ 有一些其他配置项,例如 `image`:
79
+
80
+ `packages/elasticsearch/default.yml`
81
+ ```yml
82
+ image: "docker.elastic.co/elasticsearch/elasticsearch"
83
+ ```
84
+
85
+ 则 `elasticsearch` 包的镜像将不在按约定自动计算,而是变成了:
86
+
87
+ ```bash
88
+ docker.elastic.co/elasticsearch/elasticsearch
89
+ ```
90
+
91
+ 还有一些配置,例如:`args`,这个是传入到容器的参数,例如有配置文件 `packages/mysql/default.yml`:
92
+
93
+ ```yml
94
+ args:
95
+ character-set-server: "utf8mb4"
96
+ collation-server: "utf8mb4_unicode_ci"
97
+ ```
98
+
99
+ 则所有版本的 `mysql` 包将会多这两个启动参数:
100
+
101
+ ```bash
102
+ docker run mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
103
+ ```
data/bin/dpm CHANGED
@@ -3,8 +3,8 @@
3
3
  require_relative "../lib/dpm"
4
4
 
5
5
  begin
6
- DPM::Runner.call!(ARGV)
6
+ DPM.call!(ARGV)
7
7
  rescue => exception
8
- puts "Errors: #{exception.message}"
8
+ puts "Fatal error: #{exception.message}"
9
9
  exit 1
10
10
  end
@@ -1,7 +1,8 @@
1
+ base:
2
+ {}
1
3
  run_options:
2
4
  name: "<%= container_name %>"
3
5
  d: true
4
6
  rm: true
5
- image: ""
6
- command: ""
7
- args: {}
7
+ run_args:
8
+ {}
data/dpm.gemspec CHANGED
@@ -4,7 +4,7 @@ require_relative "lib/dpm/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "dpmrb"
7
- spec.version = Dpm::VERSION
7
+ spec.version = DPM::VERSION
8
8
  spec.authors = ["Song Huang"]
9
9
  spec.email = ["songhuangcn@gmail.com"]
10
10
 
@@ -30,6 +30,5 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.post_install_message = "Please start with `dpm help`"
32
32
 
33
- spec.add_dependency "activesupport", "~> 7.x"
34
-
33
+ spec.add_dependency "activesupport", "~> 6.x"
35
34
  end
@@ -0,0 +1,88 @@
1
+ require "optparse"
2
+
3
+ module DPM
4
+ class Options
5
+ PACKAGE_COMMANDS = %w[tags status start stop restart].freeze
6
+ PACKAGE_REGEX = /\A[\w.\-:]+\z/.freeze
7
+ UNPACKAGE_COMMANDS = %w[list packages].freeze
8
+
9
+ attr_accessor :argv, :dry_run, :parser, :command, :package
10
+
11
+ def initialize(argv)
12
+ self.argv = argv
13
+ self.dry_run = false
14
+ end
15
+
16
+ def self.parse!(argv)
17
+ new(argv).parse!
18
+ end
19
+
20
+ def parse!
21
+ OptionParser.new do |parser|
22
+ self.parser = parser
23
+
24
+ parser.banner = "Usage: dpm [options] [COMMAND] [PACKAGE]"
25
+ parser.separator ""
26
+ parser.separator "Specific options:"
27
+
28
+ parser.on("-d", "--dry-run", "Don't actually run anything, just print") do |v|
29
+ self.dry_run = v
30
+ end
31
+
32
+ parser.separator ""
33
+ parser.separator "Common options:"
34
+
35
+ parser.on_tail("-h", "--help", "Show the help") do
36
+ puts help_text
37
+ exit
38
+ end
39
+
40
+ parser.on_tail("-v", "--version", "Show the version") do
41
+ puts VERSION
42
+ exit
43
+ end
44
+
45
+ parser.parse!(argv)
46
+ end
47
+
48
+ process_args!
49
+ self
50
+ end
51
+
52
+ def help_text
53
+ <<~EOF
54
+ #{parser}
55
+ COMMAND:
56
+ help Show the help
57
+ version Show the version
58
+ packages List supported packages
59
+ list List running packages
60
+ tags PACKAGE List supported tags of a package
61
+ status PACKAGE Get the status of a package
62
+ start PACKAGE Start a package
63
+ stop PACKAGE Stop a package
64
+ restart PACKAGE Restart a package
65
+
66
+ See more at https://github.com/songhuangcn/dpm
67
+ EOF
68
+ end
69
+
70
+ def process_args!
71
+ self.command, self.package = argv
72
+
73
+ case command
74
+ when "help"
75
+ puts help_text
76
+ exit
77
+ when "version"
78
+ puts VERSION
79
+ exit
80
+ when *PACKAGE_COMMANDS
81
+ raise Error, "Command `#{command}` need a package" if package.blank?
82
+ raise Error, "Package invalid, valid regex: #{PACKAGE_REGEX}" if !PACKAGE_REGEX.match?(package)
83
+ else
84
+ raise Error, "Unknown command `#{command}`, see `dpm help`" unless UNPACKAGE_COMMANDS.include?(command)
85
+ end
86
+ end
87
+ end
88
+ end
data/lib/dpm/runner.rb CHANGED
@@ -5,81 +5,71 @@ require "erb"
5
5
 
6
6
  module DPM
7
7
  class Runner
8
- PACKAGE_COMMANDS = %w[status start stop restart].freeze
9
- PACKAGE_REGEX = /\A[\w.\-:]+\z/.freeze
10
8
  CONTAINER_NAME_PREFIX = "dpm-"
11
9
  BASH_COLOR_GRAY = "\033[0;37m"
12
10
  BASH_COLOR_NONE = "\033[0m"
11
+ DOCKER_COMMANDS = %w[list status start stop restart].freeze
13
12
 
14
- attr_reader :command, :package
13
+ attr_accessor :options
15
14
 
16
- def self.call!(argv)
17
- new(argv).call!
15
+ def self.call!(options)
16
+ new(options).call!
18
17
  end
19
18
 
20
- def initialize(argv)
21
- @command, @package = argv
22
- validate_argv!
19
+ def initialize(options)
20
+ self.options = options
23
21
  end
24
22
 
25
23
  def call!
26
- if docker_command
27
- puts bash_color(docker_command)
28
- puts ""
29
- puts `#{docker_command}`
30
- else
31
- puts help_text
24
+ case options.command
25
+ when *DOCKER_COMMANDS
26
+ call_docker!
27
+ when "packages"
28
+ call_packages!
29
+ when "tags"
30
+ call_tags!
32
31
  end
33
32
  end
34
33
 
35
34
  private
36
35
 
37
- def validate_argv!
38
- if PACKAGE_COMMANDS.include?(command) && !PACKAGE_REGEX.match?(package)
39
- raise Error, "`package` invalid, valid regex: #{PACKAGE_REGEX}"
40
- end
41
- end
42
-
43
- def bash_color(text)
44
- "#{BASH_COLOR_GRAY}#{text}#{BASH_COLOR_NONE}"
45
- end
46
-
47
- def docker_command
48
- case command
36
+ def call_docker!
37
+ docker_command = case options.command
49
38
  when "list"
50
39
  %(docker ps --filter "name=#{CONTAINER_NAME_PREFIX}")
51
40
  when "status"
52
- %(docker ps --filter "name=#{container_name}")
41
+ %(docker ps --filter "name=^/#{container_name}$")
53
42
  when "start"
54
43
  "docker run #{docker_run_params}"
55
44
  when "stop"
56
45
  "docker stop #{container_name}"
57
46
  when "restart"
58
- "dpm stop #{package} && dpm start #{package}"
47
+ "dpm stop #{options.package} && dpm start #{options.package}"
48
+ else
49
+ raise "Not implemented command: `#{command}`"
50
+ end
51
+ if options.dry_run
52
+ puts "Dry run:"
53
+ puts bash_color(docker_command)
54
+ else
55
+ puts bash_color(docker_command)
56
+ puts ""
57
+ puts `#{docker_command}`
59
58
  end
60
59
  end
61
60
 
62
- def help_text
63
- <<~EOF
64
- Usage: dpm command [PACKAGE]
65
-
66
- Docker Package Manager
61
+ def call_packages!
62
+ packages = Dir.glob(File.join(ROOT, "packages", "*.yml")).map { |file| File.basename(file, ".yml") }
63
+ puts packages
64
+ end
67
65
 
68
- dpm help:
69
- Show the help
70
- dpm list:
71
- List running packages
72
- dpm status PACKAGE:
73
- Get the status of the package
74
- dpm start PACKAGE:
75
- Start the package
76
- dpm stop PACKAGE:
77
- Stop the package
78
- dpm restart PACKAGE:
79
- Restart the package
66
+ def call_tags!
67
+ tags = package_config_yaml.keys.reject { |key| key.start_with?(".") }
68
+ puts tags
69
+ end
80
70
 
81
- See more at https://github.com/songhuangcn/dpm
82
- EOF
71
+ def bash_color(text)
72
+ "#{BASH_COLOR_GRAY}#{text}#{BASH_COLOR_NONE}"
83
73
  end
84
74
 
85
75
  def docker_run_params
@@ -87,15 +77,15 @@ module DPM
87
77
  end
88
78
 
89
79
  def config_run_options
90
- process_options(manager_config["run_options"])
80
+ process_options(package_config["run_options"])
91
81
  end
92
82
 
93
83
  def config_command
94
- manager_config["command"]
84
+ package_config["base"]["command"]
95
85
  end
96
86
 
97
87
  def config_args
98
- process_options(manager_config["args"])
88
+ process_options(package_config["run_args"])
99
89
  end
100
90
 
101
91
  def process_options(hash)
@@ -110,57 +100,71 @@ module DPM
110
100
  option_prefix = "--"
111
101
  value_joiner = "="
112
102
  end
113
- full_value = "#{value_joiner}#{value}" if value != true
114
103
 
115
- "#{option_prefix}#{key}#{full_value}"
104
+ if value == true
105
+ "#{option_prefix}#{key}"
106
+ elsif value.is_a?(Array)
107
+ value.map { |v| "#{option_prefix}#{key}#{value_joiner}#{v}" }.join(" ")
108
+ else
109
+ "#{option_prefix}#{key}#{value_joiner}#{value}"
110
+ end
116
111
  end
117
112
  hash_arr.join(" ")
118
113
  end
119
114
 
120
115
  def docker_image
121
- image_tag ? "#{image_name}:#{image_tag}" : image_name
116
+ "#{image_name}:#{image_tag}"
122
117
  end
123
118
 
124
119
  def image_name
125
- @image_name ||= manager_config["image_name"] || package_name
120
+ @image_name ||= package_config["image_name"] || package_name
126
121
  end
127
122
 
128
123
  def image_tag
129
- @image_tag ||= manager_config["image_tag"] || package_tag
124
+ @image_tag ||= package_config["image_tag"] || package_tag
130
125
  end
131
126
 
132
- def manager_config
133
- @manager_config ||= begin
134
- default_options = load_yaml(File.join(ROOT, "packages", "default.yml"))
135
- image_options = load_yaml(File.join(ROOT, "packages", package_name, "default.yml"))
136
- tag_options = load_yaml(File.join(ROOT, "packages", package_name, "tag-#{package_tag}.yml"))
137
-
138
- default_options \
139
- .deep_merge(image_options) \
140
- .deep_merge(tag_options)
127
+ def package_config
128
+ @package_config ||= begin
129
+ version = package_tag.dup
130
+ version_config = loop do
131
+ raise Error, "Package tag `#{package_tag}` not support" unless version
132
+ break package_config_yaml[version] if package_config_yaml[version]
133
+ version = version.sub!(/\.\d+\z/, "")
134
+ end
135
+ default_config.deep_merge(version_config)
141
136
  end
142
137
  end
143
138
 
139
+ def package_config_yaml
140
+ @package_config_yaml ||= load_yaml(File.join(ROOT, "packages", "#{package_name}.yml"))
141
+ rescue Errno::ENOENT
142
+ raise Error, "Package `#{package_name}` not support"
143
+ end
144
+
145
+ def default_config
146
+ @default_config ||= load_yaml(File.join(ROOT, "config", "package.yml"))
147
+ end
148
+
144
149
  def package_name
145
- @package_name ||= package.split(":")[0]
150
+ @package_name ||= options.package.split(":")[0]
146
151
  end
147
152
 
148
153
  def package_tag
149
- @package_tag ||= package.split(":")[1]
154
+ @package_tag ||= options.package.split(":")[1] || "latest"
150
155
  end
151
156
 
152
157
  def container_name
153
- @container_name ||= "#{CONTAINER_NAME_PREFIX}#{package.tr(":", "-")}"
158
+ @container_name ||= "#{CONTAINER_NAME_PREFIX}#{options.package.tr(":", "-")}"
154
159
  end
155
160
 
156
161
  def load_yaml(file_path)
157
162
  text = File.read(file_path)
158
163
  data = ERB.new(text).result(binding)
159
- YAML.safe_load(data).tap do |yaml|
164
+ yaml = YAML.safe_load(data, aliases: true).tap do |yaml|
160
165
  raise Error, "Config need to be a hash yaml: #{file_path}" unless yaml.is_a?(Hash)
161
166
  end
162
- rescue Errno::ENOENT
163
- {}
167
+ yaml.transform_keys!(&:to_s)
164
168
  end
165
169
  end
166
170
  end
data/lib/dpm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Dpm
4
- VERSION = "0.1.0"
3
+ module DPM
4
+ VERSION = "0.2.1"
5
5
  end
data/lib/dpm.rb CHANGED
@@ -5,9 +5,17 @@ require "active_support/core_ext"
5
5
 
6
6
  require_relative "dpm/version"
7
7
  require_relative "dpm/errors"
8
+ require_relative "dpm/options"
8
9
  require_relative "dpm/runner"
9
10
 
10
11
  module DPM
11
12
  ROOT = File.expand_path("..", __dir__).freeze
12
13
  HOME = File.expand_path("~/.dpm").freeze
14
+
15
+ def self.call!(argv)
16
+ options = Options.parse!(argv)
17
+ Runner.call!(options)
18
+ rescue Error => exception
19
+ puts "Error: #{exception.message}"
20
+ end
13
21
  end
@@ -0,0 +1,35 @@
1
+ .base: &base
2
+ {}
3
+ .run_options: &run_options
4
+ p:
5
+ - "9200:9200"
6
+ - "9300:9300"
7
+ v: "<%= DPM::HOME %>/data/<%= package_name %>/<%= package_tag || 'default' %>:/usr/share/elasticsearch/data"
8
+ .run_args: &run_args
9
+ {}
10
+
11
+ latest:
12
+ base:
13
+ <<: *base
14
+ run_options:
15
+ <<: *run_options
16
+ run_args:
17
+ <<: *run_args
18
+
19
+ 8:
20
+ base:
21
+ <<: *base
22
+ run_options:
23
+ <<: *run_options
24
+ run_args:
25
+ <<: *run_args
26
+
27
+ 7:
28
+ base:
29
+ <<: *base
30
+ image_name: "docker.elastic.co/elasticsearch/elasticsearch"
31
+ run_options:
32
+ <<: *run_options
33
+ e: "discovery.type=single-node"
34
+ run_args:
35
+ <<: *run_args
@@ -0,0 +1,35 @@
1
+ .base: &base
2
+ {}
3
+ .run_options: &run_options
4
+ p: "3306:3306"
5
+ e: "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
6
+ v: "<%= DPM::HOME %>/data/<%= package_name %>/<%= package_tag || 'default' %>:/var/lib/mysql"
7
+ .run_args: &run_args
8
+ character-set-server: "utf8mb4"
9
+ collation-server: "utf8mb4_unicode_ci"
10
+
11
+ latest:
12
+ base:
13
+ <<: *base
14
+ run_options:
15
+ <<: *run_options
16
+ run_args:
17
+ <<: *run_args
18
+
19
+ 8:
20
+ base:
21
+ <<: *base
22
+ run_options:
23
+ <<: *run_options
24
+ p: "3306:3306"
25
+ run_args:
26
+ <<: *run_args
27
+
28
+ 5:
29
+ base:
30
+ <<: *base
31
+ run_options:
32
+ <<: *run_options
33
+ p: "3307:3307"
34
+ run_args:
35
+ <<: *run_args
@@ -0,0 +1,22 @@
1
+ .base: &base
2
+ {}
3
+ .run_options: &run_options
4
+ p: "80:80"
5
+ .run_args: &run_args
6
+ {}
7
+
8
+ latest:
9
+ base:
10
+ <<: *base
11
+ run_options:
12
+ <<: *run_options
13
+ run_args:
14
+ <<: *run_args
15
+
16
+ 1:
17
+ base:
18
+ <<: *base
19
+ run_options:
20
+ <<: *run_options
21
+ run_args:
22
+ <<: *run_args
@@ -0,0 +1,56 @@
1
+ .base: &base
2
+ {}
3
+ .run_options: &run_options
4
+ p: "5432:5432"
5
+ e: "POSTGRES_PASSWORD=mysecretpassword"
6
+ v: "<%= DPM::HOME %>/data/<%= package_name %>/<%= package_tag || 'default' %>:/var/lib/postgressql/data"
7
+ .run_args: &run_args
8
+ {}
9
+
10
+ latest:
11
+ base:
12
+ <<: *base
13
+ run_options:
14
+ <<: *run_options
15
+ run_args:
16
+ <<: *run_args
17
+
18
+ 14:
19
+ base:
20
+ <<: *base
21
+ run_options:
22
+ <<: *run_options
23
+ run_args:
24
+ <<: *run_args
25
+
26
+ 13:
27
+ base:
28
+ <<: *base
29
+ run_options:
30
+ <<: *run_options
31
+ run_args:
32
+ <<: *run_args
33
+
34
+ 12:
35
+ base:
36
+ <<: *base
37
+ run_options:
38
+ <<: *run_options
39
+ run_args:
40
+ <<: *run_args
41
+
42
+ 11:
43
+ base:
44
+ <<: *base
45
+ run_options:
46
+ <<: *run_options
47
+ run_args:
48
+ <<: *run_args
49
+
50
+ 10:
51
+ base:
52
+ <<: *base
53
+ run_options:
54
+ <<: *run_options
55
+ run_args:
56
+ <<: *run_args
@@ -0,0 +1,38 @@
1
+ .base: &base
2
+ {}
3
+ .run_options: &run_options
4
+ p: "6379:6379"
5
+ .run_args: &run_args
6
+ {}
7
+
8
+ latest:
9
+ base:
10
+ <<: *base
11
+ run_options:
12
+ <<: *run_options
13
+ run_args:
14
+ <<: *run_args
15
+
16
+ 7:
17
+ base:
18
+ <<: *base
19
+ run_options:
20
+ <<: *run_options
21
+ run_args:
22
+ <<: *run_args
23
+
24
+ 6:
25
+ base:
26
+ <<: *base
27
+ run_options:
28
+ <<: *run_options
29
+ run_args:
30
+ <<: *run_args
31
+
32
+ 5:
33
+ base:
34
+ <<: *base
35
+ run_options:
36
+ <<: *run_options
37
+ run_args:
38
+ <<: *run_args
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dpmrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Song Huang
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-13 00:00:00.000000000 Z
11
+ date: 2022-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 7.x
19
+ version: 6.x
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 7.x
26
+ version: 6.x
27
27
  description: Makes using your containers as easy as package managers (`apt`, `yml`,
28
28
  `brew`).
29
29
  email:
@@ -39,22 +39,22 @@ files:
39
39
  - Gemfile
40
40
  - Gemfile.lock
41
41
  - LICENSE.txt
42
+ - README.en-US.md
42
43
  - README.md
43
- - README.zh-CN.md
44
44
  - Rakefile
45
45
  - bin/dpm
46
+ - config/package.yml
46
47
  - dpm.gemspec
47
48
  - lib/dpm.rb
48
49
  - lib/dpm/errors.rb
50
+ - lib/dpm/options.rb
49
51
  - lib/dpm/runner.rb
50
52
  - lib/dpm/version.rb
51
- - packages/default.yml
52
- - packages/elasticsearch/default.yml
53
- - packages/mysql/default.yml
54
- - packages/mysql/tag-5.7.yml
55
- - packages/nginx/default.yml
56
- - packages/redis/default.yml
57
- - sig/dpm.rbs
53
+ - packages/elasticsearch.yml
54
+ - packages/mysql.yml
55
+ - packages/nginx.yml
56
+ - packages/postgres.yml
57
+ - packages/redis.yml
58
58
  homepage: https://github.com/songhuangcn/dpm
59
59
  licenses:
60
60
  - MIT
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  version: '0'
78
78
  requirements: []
79
79
  rubygems_version: 3.3.20
80
- signing_key:
80
+ signing_key:
81
81
  specification_version: 4
82
82
  summary: Docker Package Manager.
83
83
  test_files: []
data/README.zh-CN.md DELETED
@@ -1,103 +0,0 @@
1
- [English](README.md) | [简体中文](README.zh-CN.md)
2
-
3
- # DPM
4
-
5
- Docker Package Manager, 让你的容器用起来跟包管理器(`apt`, `yml`, `brew`)一样简单。
6
-
7
- ## 安装
8
-
9
- ```bash
10
- gem install dpmrb
11
- ```
12
-
13
- ## 使用
14
-
15
- ```bash
16
- dpm help # Show help
17
- dpm list # docker ps --filter "name=dpm-"
18
- dpm start mysql # docker run --name=dpm-mysql -d --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes ...
19
- dpm stop mysql # docker stop dpm-mysql
20
- dpm status mysql # docker ps --filter "name=dpm-mysql"
21
- dpm start elasticsearch:7.10.2 # docker run --name=dpm-elasticsearch-7.10.2 -d --rm -p 9200:9200 -e discovery.type=single-node ...
22
- dpm start mysql:5.7 # docker run --name=dpm-mysql-5.7 -d --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes ...
23
- ```
24
-
25
- ## 为项目添加新包
26
-
27
- DPM 跟 [Homebrew](https://brew.sh/) 一样,需要完善更多的包配置,欢迎为 `packages` 目录添加你需要的包配置。
28
-
29
- ### 配置级别
30
-
31
- 容器配置都是通用的 YAML 格式,有三个级别:
32
-
33
- 1. 默认级别:`packages/default.yml`
34
- 1. 包级别:`packages/PACKAGE/default.yml`
35
- 1. 版本级别:`packages/PACKAGE/tag-TAG.yml`
36
-
37
- 配置是合并机制,如果一个包没有自定义配置,他就会根据默认级别配置跑起来。
38
-
39
- ### 配置示例
40
-
41
- 例如有配置如下:
42
-
43
- 1. `packages/default.yml`:
44
- ```yml
45
- run_options:
46
- rm: true
47
- d: true
48
- ```
49
- 1. `packages/mysql/default.yml`:
50
- ```yml
51
- run_options:
52
- e: "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
53
- p: "3306:3306"
54
- ```
55
- 1. `packages/mysql/tag-5.7.yml`:
56
- ```yml
57
- run_options:
58
- p: "3307:3307"
59
- ```
60
-
61
- 则最终这些包配置的启动命令为:
62
-
63
- - `mysql:5.7` 的配置:
64
- ```bash
65
- docker run --rm -d -p 3307:3307 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
66
- ```
67
- - `mysql` 的配置:
68
- ```bash
69
- docker run --rm -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql
70
- ```
71
- - `not-exist-pkg` 的配置:
72
- ```bash
73
- docker run --rm -d not-exist-pkg
74
- ```
75
-
76
- ### 其他配置
77
-
78
- 有一些其他配置项,例如 `image`:
79
-
80
- `packages/elasticsearch/default.yml`
81
- ```yml
82
- image: "docker.elastic.co/elasticsearch/elasticsearch"
83
- ```
84
-
85
- 则 `elasticsearch` 包的镜像将不在按约定自动计算,而是变成了:
86
-
87
- ```bash
88
- docker.elastic.co/elasticsearch/elasticsearch
89
- ```
90
-
91
- 还有一些配置,例如:`args`,这个是传入到容器的参数,例如有配置文件 `packages/mysql/default.yml`:
92
-
93
- ```yml
94
- args:
95
- character-set-server: "utf8mb4"
96
- collation-server: "utf8mb4_unicode_ci"
97
- ```
98
-
99
- 则所有版本的 `mysql` 包将会多这两个启动参数:
100
-
101
- ```bash
102
- docker run mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
103
- ```
@@ -1,5 +0,0 @@
1
- image_name: "docker.elastic.co/elasticsearch/elasticsearch"
2
- run_options:
3
- p: "9200:9200"
4
- e: "discovery.type=single-node"
5
- v: "<%= DPM::HOME %>/data/<%= package_name %>/<%= package_tag || 'default' %>:/usr/share/elasticsearch/data"
@@ -1,7 +0,0 @@
1
- run_options:
2
- p: "3306:3306"
3
- e: "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
4
- v: "<%= DPM::HOME %>/data/<%= package_name %>/<%= package_tag || 'default' %>:/var/lib/mysql"
5
- args:
6
- character-set-server: "utf8mb4"
7
- collation-server: "utf8mb4_unicode_ci"
@@ -1,2 +0,0 @@
1
- run_options:
2
- v: "<%= DPM::HOME %>/data/mysql-5.7:/var/lib/mysql"
@@ -1,2 +0,0 @@
1
- run_options:
2
- p: "80:80"
@@ -1,2 +0,0 @@
1
- run_options:
2
- p: "6379:6379"
data/sig/dpm.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Dpm
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end