docker_process 0.0.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 +7 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +15 -0
- data/lib/docker_process.rb +117 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a87ca2bb5b3f17eb380bcca03ffa348017631545
|
4
|
+
data.tar.gz: a59b2d9d472370b981e730b1fe03708a7522f52a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 298694936a84e887f3a882521151e8d24a2e4fbfcfb220d5044a7d898c91a0d958e25a97401fd23c1d5579351336b92098efdaa0b812f438068f7775e8a82b32
|
7
|
+
data.tar.gz: 0331af2dc162d1a3f5b0ac7f13c0264d8d36186d6c0f227bab0438a7cec45d238ed798e76d37bf58baa0acd08d805bf66395ec3c2d69142a041de18bae972566
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'docker'
|
2
|
+
|
3
|
+
## GOAL:
|
4
|
+
# have object which is used to create and manage docker contains
|
5
|
+
# based around the idea that we treat them like procs
|
6
|
+
|
7
|
+
class DockerProcess
|
8
|
+
|
9
|
+
@@image_name = nil
|
10
|
+
@@properties = []
|
11
|
+
|
12
|
+
def self.set_image_name name
|
13
|
+
@@image_name = name
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.set_properties *properties
|
17
|
+
raise 'can not reset properties' if !@@properties.empty?
|
18
|
+
@@properties.map(&:to_sym).each do |property|
|
19
|
+
@@properties << property
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :config
|
24
|
+
|
25
|
+
def initialize config
|
26
|
+
raise 'image not set' if @@image_name.nil?
|
27
|
+
raise 'properties not set' if @@properties.empty?
|
28
|
+
@config = config
|
29
|
+
end
|
30
|
+
|
31
|
+
def start
|
32
|
+
start_container
|
33
|
+
end
|
34
|
+
|
35
|
+
def stop
|
36
|
+
kill_and_delete_container
|
37
|
+
end
|
38
|
+
|
39
|
+
def is_running?
|
40
|
+
container = find_container
|
41
|
+
if container
|
42
|
+
container_is_running? container
|
43
|
+
else
|
44
|
+
false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def recent_logs
|
49
|
+
container_logs
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def find_container
|
55
|
+
Docker::Container.all.each do |container|
|
56
|
+
container_labels = container.json["Config"]["Labels"]
|
57
|
+
if container_labels == labels
|
58
|
+
return container
|
59
|
+
end
|
60
|
+
end
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
def start_container
|
65
|
+
image = Docker::Image.create('fromImage' => @@image_name)
|
66
|
+
log "creating container [#{@@image_name}] => #{self.config} with env #{env_vars}"
|
67
|
+
if is_running?
|
68
|
+
log "already running, not starting"
|
69
|
+
return false
|
70
|
+
end
|
71
|
+
container = Docker::Container.create({
|
72
|
+
'RestartPolicy' => { 'Name': 'always' },
|
73
|
+
'Image' => image.id,
|
74
|
+
'Env' => env_vars,
|
75
|
+
'Labels' => labels
|
76
|
+
})
|
77
|
+
log "created container: #{container.id}"
|
78
|
+
log "starting container"
|
79
|
+
container.start
|
80
|
+
log "container started"
|
81
|
+
true
|
82
|
+
end
|
83
|
+
|
84
|
+
def container_logs
|
85
|
+
container = find_container
|
86
|
+
return nil unless container
|
87
|
+
container.streaming_logs(stdout: 1, stderr: 1, tail: 100, follow: 0).to_s
|
88
|
+
end
|
89
|
+
|
90
|
+
def container_is_running? container
|
91
|
+
container.json["State"]["Running"]
|
92
|
+
end
|
93
|
+
|
94
|
+
def kill_and_delete_container
|
95
|
+
container = find_container
|
96
|
+
return false unless container
|
97
|
+
container.kill
|
98
|
+
container.delete
|
99
|
+
true
|
100
|
+
end
|
101
|
+
|
102
|
+
def labels
|
103
|
+
{ 'app.name' => 'chatbridge_sender' }.tap do |l|
|
104
|
+
@config.each do |property, value|
|
105
|
+
l.merge!({ "config.#{property}" => value })
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def env_vars
|
111
|
+
vars = []
|
112
|
+
@config.each do |property, value|
|
113
|
+
vars << "#{property.to_s.upcase}=#{value}"
|
114
|
+
end
|
115
|
+
return vars
|
116
|
+
end
|
117
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: docker_process
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robby ranshous
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: docker
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: 'simple container management '
|
28
|
+
email: rranshous@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- Gemfile
|
34
|
+
- Gemfile.lock
|
35
|
+
- lib/docker_process.rb
|
36
|
+
homepage: http://github.com/rranshous/docker_process
|
37
|
+
licenses: []
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 2.5.1
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: simple container management
|
59
|
+
test_files: []
|