docker-dev 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +19 -0
- data/helpers.rake +33 -0
- data/lib/docker/container.rb +114 -0
- data/lib/docker/equality.rb +11 -0
- data/lib/docker/helpers.rb +12 -0
- data/lib/docker/id.rb +33 -0
- data/lib/docker/image.rb +38 -0
- data/lib/docker/inspect.rb +45 -0
- data/lib/docker/interactive.rb +14 -0
- data/lib/docker/path.rb +19 -0
- data/lib/docker/postgres.rb +15 -0
- data/lib/docker/rails/console.rb +30 -0
- data/lib/docker/rails/server.rb +53 -0
- data/lib/docker/rails.rb +54 -0
- data/lib/docker/rake.rb +10 -0
- data/lib/docker/repository.rb +22 -0
- data/lib/docker/ruby.rb +27 -0
- data/lib/docker/tag.rb +11 -0
- data/lib/docker-dev.rb +1 -0
- data/lib/docker.rb +124 -0
- data/rakefile +6 -0
- data/test/app_cleanup_test.rb +27 -0
- data/test/app_run_test.rb +38 -0
- data/test/app_stop_test.rb +34 -0
- data/test/docker_build_test.rb +28 -0
- data/test/docker_container_test.rb +115 -0
- data/test/docker_image_test.rb +26 -0
- data/test/docker_inspect_test.rb +39 -0
- data/test/docker_postgres_test.rb +22 -0
- data/test/docker_rails_test.rb +40 -0
- data/test/docker_ruby_test.rb +24 -0
- data/test/docker_test.rb +119 -0
- data/test/test_helper.rb +97 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b790b0f51b1657492a1aa2ab4f6528f6b3d2ab48
|
4
|
+
data.tar.gz: a8a10e13b6483b0b41f7a8cc87f61e68807e616f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 38f16ae99fcc1296a1768d2b6f34be5b17996e481dace95dfbdcbdc5aa5e2959c95548292c77ebad000905a23ec8a78089d35d399c1b5022016417fdb4d0b1c6
|
7
|
+
data.tar.gz: c16ed1806dc1b618c3744acba0455695a46e560b50563fb1bcfa1a44e2b0cb9a6719bae1ddb7c2d9cdb09e9add7e5c85b6d9631d53f8a00d354ed8aeb4ffbe98
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 John Hager
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
###To Build an App
|
2
|
+
_This should be done everytime you change the Gemfile or do something
|
3
|
+
that would force you to restart the Rails Sever_
|
4
|
+
```
|
5
|
+
rake docker:build /path/to/app
|
6
|
+
```
|
7
|
+
|
8
|
+
###To Run an App
|
9
|
+
_After the app has be built, you can run it with:_
|
10
|
+
```
|
11
|
+
rake docker:run /path/to/app
|
12
|
+
```
|
13
|
+
|
14
|
+
###To Stop all Running Containers and then Remove all Containers
|
15
|
+
_Be careful, because this will remove all your Docker Containers,
|
16
|
+
not just the ones run from the commands above_
|
17
|
+
```
|
18
|
+
rake docker:cleanup
|
19
|
+
```
|
data/helpers.rake
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'lib/docker'
|
2
|
+
|
3
|
+
include Docker::Helpers
|
4
|
+
|
5
|
+
def get_args(num_args)
|
6
|
+
# See this link for explanation of this black magic:
|
7
|
+
# http://itshouldbeuseful.wordpress.com/2011/11/07/passing-parameters-to-a-rake-task/
|
8
|
+
args = ARGV.last(num_args)
|
9
|
+
yield(args)
|
10
|
+
args.each { |arg| task arg.to_sym {} }
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_docker_app_image(type, app_path)
|
14
|
+
full_path_and_name(app_path) do |path, name|
|
15
|
+
`docker build -t jphager2/#{type}-#{name} #{path}`
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# You Can't overwrite rake tasks (yet)
|
20
|
+
# Paths Can't be relative (try to source them)
|
21
|
+
namespace :docker do
|
22
|
+
desc "Stop all running docker containers and then remove them"
|
23
|
+
task :cleanup do
|
24
|
+
Docker.containers.each { |c| c.remove! }
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Remove all nameless docker images (repositories, tags)"
|
28
|
+
task :nameless do
|
29
|
+
Docker.images(:repository).select {|r| r.id == "<none>"}.each do |r|
|
30
|
+
r.remove_image!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module Docker
|
2
|
+
class Container
|
3
|
+
include Docker::Equality
|
4
|
+
|
5
|
+
attr_reader :id, :removal_instructions
|
6
|
+
def initialize(id)
|
7
|
+
@id = Docker::ID(id)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.run(image, flags = "", command = "", path = nil)
|
11
|
+
path = Docker::PATH(path)
|
12
|
+
flags = "#{flags} -e DOCKER_TYPE=#{self}"
|
13
|
+
flags = "#{flags} -e LOCAL_PATH=#{path.path}" if path
|
14
|
+
|
15
|
+
id = Docker::ID(`docker run #{flags} #{image} #{command}`)
|
16
|
+
|
17
|
+
# Nasty hack to return a removed container if the --rm flag
|
18
|
+
# is passed and the container alread exited
|
19
|
+
return new(nil).disable! unless id || flags !~ /--rm/
|
20
|
+
|
21
|
+
id ||= Docker.containers(:stopped).first.id
|
22
|
+
|
23
|
+
new(id)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.load_from(container)
|
27
|
+
new(container.id) if container.from_a?(self)
|
28
|
+
end
|
29
|
+
|
30
|
+
def logs
|
31
|
+
@logs || `docker logs #{id}` # @logs given with #disable!
|
32
|
+
end
|
33
|
+
|
34
|
+
def inspekt
|
35
|
+
Docker.inspekt(id)
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_klass
|
39
|
+
return self unless klass = from_klass
|
40
|
+
klass.load_from(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def from_klass
|
44
|
+
return nil unless klass = env["DOCKER_TYPE"]
|
45
|
+
Kernel.const_get(klass)
|
46
|
+
end
|
47
|
+
|
48
|
+
def path
|
49
|
+
Docker::PATH(env["LOCAL_PATH"])
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_removal_instructions(&block)
|
53
|
+
@removal_instructions = Proc.new { block.call(self) }
|
54
|
+
self
|
55
|
+
end
|
56
|
+
|
57
|
+
def attach!
|
58
|
+
`docker attach --sig-proxy=false #{id}`
|
59
|
+
end
|
60
|
+
|
61
|
+
def remove!
|
62
|
+
@logs = logs
|
63
|
+
@removal_instructions.call if @removal_instructions
|
64
|
+
`docker rm -f #{id}`
|
65
|
+
disable!
|
66
|
+
id
|
67
|
+
end
|
68
|
+
|
69
|
+
def disable!
|
70
|
+
self.instance_eval {
|
71
|
+
undef :attach!
|
72
|
+
undef :remove!
|
73
|
+
undef :add_removal_instructions
|
74
|
+
}
|
75
|
+
self.instance_eval { def state; @id; end }
|
76
|
+
@id = 'REMOVED'
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
80
|
+
def from_a?(klass)
|
81
|
+
env["DOCKER_TYPE"] == klass.to_s
|
82
|
+
end
|
83
|
+
|
84
|
+
def removed?
|
85
|
+
id == "REMOVED"
|
86
|
+
end
|
87
|
+
|
88
|
+
def exists_in?(state)
|
89
|
+
Docker.containers(state).any? { |container| container == self }
|
90
|
+
end
|
91
|
+
|
92
|
+
def up?; running?; end
|
93
|
+
def ip; ip_address; end
|
94
|
+
alias_method :to_s, :id
|
95
|
+
|
96
|
+
def method_missing(method, *args, &block)
|
97
|
+
super if removed?
|
98
|
+
inspekt_methods = [:env, :state, :ports, :ip_address, :name]
|
99
|
+
state_methods = [:running? , :stopped?, :paused?]
|
100
|
+
action_methods = [:stop!, :start!, :restart!, :pause!, :unpause!]
|
101
|
+
if inspekt_methods.include?(method)
|
102
|
+
inspekt.__send__(method)
|
103
|
+
elsif state_methods.include?(method)
|
104
|
+
method = method.to_s.delete('?').to_sym
|
105
|
+
exists_in?(method)
|
106
|
+
elsif action_methods.include?(method)
|
107
|
+
method = method.to_s.delete('!').to_sym
|
108
|
+
`docker #{method} #{id}`
|
109
|
+
else
|
110
|
+
super
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Docker
|
2
|
+
module Equality
|
3
|
+
def ==(other)
|
4
|
+
# this seems unconfident, but it is because I want to be able
|
5
|
+
# to create containers with shortened ID's (for now)
|
6
|
+
min = [id.length, other.id.length].min
|
7
|
+
id[0...min] == other.id[0...min]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
data/lib/docker/id.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Docker
|
2
|
+
class Id
|
3
|
+
def self.create(id)
|
4
|
+
id = new(id)
|
5
|
+
id.id.empty? ? nil : id
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :id
|
9
|
+
def initialize(id)
|
10
|
+
@id = id.to_s[0..11]
|
11
|
+
validate!
|
12
|
+
end
|
13
|
+
|
14
|
+
alias_method :to_s, :id
|
15
|
+
alias_method :to_str, :id
|
16
|
+
|
17
|
+
def validate!
|
18
|
+
valid = id.length >= 12 &&
|
19
|
+
id =~ /^[0-9a-z]+$/ && id !~ /^[^0-9a-z]$/ &&
|
20
|
+
id =~/[0-9]/ && id =~ /[a-z]/
|
21
|
+
valid ? id : (@id = '')
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_missing(method, *args, &block)
|
25
|
+
if id.respond_to?(method)
|
26
|
+
id.__send__(method, *args, &block)
|
27
|
+
else
|
28
|
+
super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/lib/docker/image.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Docker
|
2
|
+
class Image
|
3
|
+
extend Docker::Helpers
|
4
|
+
extend Docker::Equality
|
5
|
+
|
6
|
+
attr_reader :id
|
7
|
+
def initialize(id)
|
8
|
+
@id = id[0..11]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.build(path, name)
|
12
|
+
name = "#{Docker::USER_NAME}/#{name}"
|
13
|
+
repo, tag = name.split(':')
|
14
|
+
id = `docker build -t #{name} #{path}`[-13..-2]
|
15
|
+
tag ? Tag.new(repo, tag) : Repository.new(id, repo)
|
16
|
+
end
|
17
|
+
|
18
|
+
def remove!
|
19
|
+
`docker rmi #{id}`
|
20
|
+
end
|
21
|
+
|
22
|
+
def inspekt
|
23
|
+
Docker.inspekt(id)
|
24
|
+
end
|
25
|
+
|
26
|
+
def image_id
|
27
|
+
id
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_s
|
31
|
+
id
|
32
|
+
end
|
33
|
+
|
34
|
+
def repositories
|
35
|
+
Docker.images.select { |repo| repo == self }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Docker
|
4
|
+
class Inspect
|
5
|
+
|
6
|
+
attr_reader :inspekt
|
7
|
+
def initialize(id)
|
8
|
+
@id = id[0..11]
|
9
|
+
@inspekt = JSON.load(`docker inspect #{@id}`).first
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
inspekt["Name"][1..-1]
|
14
|
+
end
|
15
|
+
|
16
|
+
def env
|
17
|
+
inspekt["Config"]["Env"].each_with_object({}) do |e,h|
|
18
|
+
pair = e.split('=')
|
19
|
+
h[pair.first] = pair.last
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def ip_address
|
24
|
+
inspekt["NetworkSettings"]["IPAddress"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def ports
|
28
|
+
inspekt["NetworkSettings"]["Ports"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def state
|
32
|
+
inspekt["State"]
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_s
|
36
|
+
inspekt.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class NullInspect
|
41
|
+
def method_missing(*)
|
42
|
+
return nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Docker
|
2
|
+
module Interactive
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def warn(command)
|
6
|
+
Kernel.warn (
|
7
|
+
"Interactive containers cannot (yet) be run within this " +
|
8
|
+
"library. Please copy the following command into a new " +
|
9
|
+
"shell:\n\n\t#{command}"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/lib/docker/path.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module Docker
|
2
|
+
class Path
|
3
|
+
|
4
|
+
attr_reader :path, :name
|
5
|
+
def initialize(path)
|
6
|
+
raise "Bad Path: Directory Not Found" unless Dir.exist?(path)
|
7
|
+
@path = File.expand_path(path)
|
8
|
+
@name = @path.sub(/\/$/, '').sub(/.+\//, '')
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
@path
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_dpath
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Docker
|
2
|
+
class Postgres < Container
|
3
|
+
|
4
|
+
def self.run(name, version = '9.3.5')
|
5
|
+
pg = Docker.find_container(name: name)
|
6
|
+
if pg
|
7
|
+
pg.start! if pg.stopped?
|
8
|
+
else
|
9
|
+
pg = super("postgres:#{version}", "-d --name #{name}")
|
10
|
+
sleep 3
|
11
|
+
end
|
12
|
+
pg
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Docker
|
2
|
+
module Rails
|
3
|
+
class Console < Docker::Container
|
4
|
+
|
5
|
+
extend Docker::Helpers
|
6
|
+
|
7
|
+
def initialize(id)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.run(path, postgres)
|
12
|
+
image = "#{rails_image(path.name)}"
|
13
|
+
options = "-it --name rails-console-#{path.name} " +
|
14
|
+
"--rm -e PG_HOST=#{postgres.ip} " +
|
15
|
+
"--link db:db -v #{path}:/usr/src/app"
|
16
|
+
command = 'rails console'
|
17
|
+
|
18
|
+
docker_cmd = "docker run #{options} #{image} #{command}"
|
19
|
+
Docker::Interactive.warn(docker_cmd)
|
20
|
+
docker_cmd
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.load(id, path)
|
24
|
+
run(path)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Docker
|
2
|
+
module Rails
|
3
|
+
class Server < Docker::Container
|
4
|
+
|
5
|
+
extend Docker::Helpers
|
6
|
+
|
7
|
+
def initialize(id)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.run(path, postgres)
|
12
|
+
server = existing_server(path)
|
13
|
+
return server if server
|
14
|
+
migrate_database!(path, postgres)
|
15
|
+
server = super(
|
16
|
+
"#{rails_image(path.name)}",
|
17
|
+
"-d --name #{rails_server(path.name)} --link db:db " +
|
18
|
+
"-e PG_HOST=#{postgres.ip} -v #{path}:/usr/src/app",
|
19
|
+
nil,
|
20
|
+
path
|
21
|
+
)
|
22
|
+
self.load(server.id, path)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.load_from(container)
|
26
|
+
load(container.id, container.path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.load(id, path)
|
30
|
+
server = new(id)
|
31
|
+
Docker::Rails.add_default_instructions_to(server, path)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.migrate_database!(path, postgres)
|
35
|
+
['create', 'migrate'].each do |cmd|
|
36
|
+
Docker.run(
|
37
|
+
"#{rails_image(path.name)}",
|
38
|
+
"--rm --link db:db -e PG_HOST=#{postgres.ip} " +
|
39
|
+
"-v #{path}:/usr/src/app",
|
40
|
+
"rake db:#{cmd}"
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.existing_server(path)
|
46
|
+
server = Rails.find_server(path)
|
47
|
+
return server if server && server.up?
|
48
|
+
server.remove! if server
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/docker/rails.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module Docker
|
2
|
+
module Rails
|
3
|
+
|
4
|
+
extend Helpers
|
5
|
+
extend Docker
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def build(app_path)
|
9
|
+
path = Docker::PATH(app_path)
|
10
|
+
Image.build(path, "rails-#{path.name}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def postgres
|
14
|
+
Docker::Postgres.run('db')
|
15
|
+
end
|
16
|
+
|
17
|
+
def run(app_path, options = "", command = "")
|
18
|
+
path = Docker::PATH(app_path)
|
19
|
+
image = rails_image(path.name)
|
20
|
+
options = "#{options} -v #{path}:/usr/src/app"
|
21
|
+
Docker::Container.run(image, options, command, path)
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_server(app_path)
|
25
|
+
path = Docker::PATH(app_path)
|
26
|
+
Docker::Rails::Server.run(path, postgres)
|
27
|
+
end
|
28
|
+
|
29
|
+
def run_console(app_path)
|
30
|
+
path = Docker::PATH(app_path)
|
31
|
+
Docker::Rails::Console.run(path, postgres)
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_default_instructions_to(server, path)
|
35
|
+
path = Docker::PATH(path)
|
36
|
+
server.add_removal_instructions do |container|
|
37
|
+
# Give all users Read/Write Access to App
|
38
|
+
Docker.run(
|
39
|
+
"#{rails_image(path.name)}",
|
40
|
+
"--rm -v #{path}:/usr/src/app",
|
41
|
+
"chmod -R a+rw /usr/src/app"
|
42
|
+
)
|
43
|
+
# Remove the tmp dir files and sub directories
|
44
|
+
`rm -rf #{path}/tmp/*`
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_server(path)
|
49
|
+
path = Docker::PATH(path)
|
50
|
+
server = Docker.find_container(name: rails_server(path.name))
|
51
|
+
Rails::Server.load(server.id, path) if server
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/docker/rake.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Docker
|
2
|
+
class Repository < Image
|
3
|
+
|
4
|
+
attr_reader :id, :image_id
|
5
|
+
def initialize(id, name)
|
6
|
+
@id = name
|
7
|
+
@image_id = id
|
8
|
+
end
|
9
|
+
|
10
|
+
def remove!
|
11
|
+
`docker rmi #{id}`
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_image!
|
15
|
+
`docker rmi -f #{image_id}`
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
id
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/docker/ruby.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Docker
|
2
|
+
module Ruby
|
3
|
+
|
4
|
+
extend Helpers
|
5
|
+
extend Docker
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def build(app_path)
|
9
|
+
path = Docker::PATH(app_path)
|
10
|
+
Docker.build(path, "ruby-#{path.name}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def run_irb(app_path, flags = '', command = '')
|
14
|
+
path = Docker::PATH(app_path)
|
15
|
+
name = path.name
|
16
|
+
|
17
|
+
image = "jphager2/ruby-#{path.name}"
|
18
|
+
flags = "-it --name ruby-irb-#{name} -v #{path}:/usr/src/app #{flags}"
|
19
|
+
|
20
|
+
docker_cmd = "docker run #{flags} #{image} #{command}"
|
21
|
+
|
22
|
+
Docker::Interactive.warn(docker_cmd)
|
23
|
+
docker_cmd
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
data/lib/docker/tag.rb
ADDED
data/lib/docker-dev.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'docker'
|