docker-builder 0.1.8 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{lib/docker_builder/chef/bootstrap_local.sh → bootstrap_local.sh} +0 -0
- data/examples/example-nginx/servers/nginx/config.rb +3 -2
- data/examples/example-nginx/servers/nginx/scripts/install.sh +3 -0
- data/lib/docker_builder/cli.rb +64 -5
- data/lib/docker_builder/config.rb +12 -0
- data/lib/docker_builder/manager.rb +38 -2
- data/lib/docker_builder/server_settings.rb +5 -0
- data/lib/docker_builder/version.rb +1 -1
- data/readme.md +175 -16
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85407e9452d3d1583bfc843e049e685916c2ff4a
|
4
|
+
data.tar.gz: 32eb773b8de175a3eaaf18103ab362f85ac4cc9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aba259c631e9de324450d780b5d3b4ed6c440e03ec7cc9d4f9e8a9f8a06407a2c14e5f40b21eb5f8e999ea3a9da542d08ffcb63cc1edcaf5aaef9cd7d42eb1cb
|
7
|
+
data.tar.gz: db0a3b37091c2ff3421df6a139e655f72b308802d4c533df5b969d9d9df7200a069997ee72f91297deaadce679cdb42f928d8fee6fc0c7a5df88ac40d59a9813
|
File without changes
|
data/lib/docker_builder/cli.rb
CHANGED
@@ -40,7 +40,7 @@ class CLI < Thor
|
|
40
40
|
puts "building..."
|
41
41
|
|
42
42
|
opts = options
|
43
|
-
|
43
|
+
puts "opt from command line: #{options.inspect}"
|
44
44
|
|
45
45
|
|
46
46
|
warnings = false
|
@@ -56,7 +56,7 @@ class CLI < Thor
|
|
56
56
|
#exit
|
57
57
|
|
58
58
|
Config.servers.each do |name, opts|
|
59
|
-
server_settings = Settings.load_settings_for_server(name
|
59
|
+
server_settings = Settings.load_settings_for_server(name)
|
60
60
|
|
61
61
|
#puts "s: #{server_settings.inspect}"
|
62
62
|
#exit
|
@@ -135,7 +135,7 @@ class CLI < Thor
|
|
135
135
|
puts "config: #{Config.inspect}"
|
136
136
|
|
137
137
|
Config.servers.each do |name, opts|
|
138
|
-
server_settings = Settings.load_settings_for_server(name
|
138
|
+
server_settings = Settings.load_settings_for_server(name)
|
139
139
|
|
140
140
|
puts "s: #{server_settings.inspect}"
|
141
141
|
exit
|
@@ -198,7 +198,7 @@ class CLI < Thor
|
|
198
198
|
Config.load(options)
|
199
199
|
|
200
200
|
Config.servers.each do |name, opts|
|
201
|
-
server_settings = Settings.load_settings_for_server(name
|
201
|
+
server_settings = Settings.load_settings_for_server(name)
|
202
202
|
|
203
203
|
Manager.destroy_container(name, server_settings)
|
204
204
|
Manager.run_container(name, server_settings)
|
@@ -258,7 +258,7 @@ class CLI < Thor
|
|
258
258
|
Config.load(options)
|
259
259
|
|
260
260
|
Config.servers.each do |name, opts|
|
261
|
-
server_settings = Settings.load_settings_for_server(name
|
261
|
+
server_settings = Settings.load_settings_for_server(name)
|
262
262
|
|
263
263
|
Manager.destroy_container(name, server_settings)
|
264
264
|
end
|
@@ -274,6 +274,65 @@ class CLI < Thor
|
|
274
274
|
end
|
275
275
|
|
276
276
|
|
277
|
+
|
278
|
+
|
279
|
+
##
|
280
|
+
# [stop]
|
281
|
+
#
|
282
|
+
#
|
283
|
+
desc 'stop', 'Stop Docker container(s)'
|
284
|
+
|
285
|
+
long_desc <<-EOS.gsub(/^ +/, '')
|
286
|
+
Stop containers.
|
287
|
+
EOS
|
288
|
+
|
289
|
+
method_option :server,
|
290
|
+
:aliases => ['-s', '--server'],
|
291
|
+
:required => false,
|
292
|
+
:type => :string,
|
293
|
+
:desc => "Server name"
|
294
|
+
|
295
|
+
method_option :root_path,
|
296
|
+
:aliases => '-r',
|
297
|
+
:type => :string,
|
298
|
+
:default => '',
|
299
|
+
:desc => 'Root path to base all relative path on.'
|
300
|
+
|
301
|
+
method_option :config_file,
|
302
|
+
:aliases => '-c',
|
303
|
+
:type => :string,
|
304
|
+
:default => '',
|
305
|
+
:desc => 'Path to your config.rb file.'
|
306
|
+
|
307
|
+
def stop
|
308
|
+
puts "stopping..."
|
309
|
+
|
310
|
+
opts = options
|
311
|
+
|
312
|
+
warnings = false
|
313
|
+
errors = false
|
314
|
+
|
315
|
+
|
316
|
+
servers = nil
|
317
|
+
begin
|
318
|
+
Config.load(options)
|
319
|
+
|
320
|
+
Config.servers.each do |name, opts|
|
321
|
+
server_settings = Settings.load_settings_for_server(name)
|
322
|
+
|
323
|
+
Manager.stop_container(name, server_settings)
|
324
|
+
end
|
325
|
+
|
326
|
+
rescue Exception => err
|
327
|
+
puts "exception: #{err.inspect}"
|
328
|
+
raise err
|
329
|
+
exit(3)
|
330
|
+
end
|
331
|
+
|
332
|
+
exit(errors ? 2 : 1) if errors || warnings
|
333
|
+
|
334
|
+
end
|
335
|
+
|
277
336
|
### generators
|
278
337
|
|
279
338
|
##
|
@@ -36,8 +36,11 @@ module DockerBuilder
|
|
36
36
|
|
37
37
|
# Loads the user's +config.rb+ and all model files.
|
38
38
|
def load(opts = {})
|
39
|
+
puts "update opts from #{opts}"
|
39
40
|
update(opts) # from the command line
|
40
41
|
|
42
|
+
puts "config file: #{config_file}"
|
43
|
+
|
41
44
|
unless File.exist?(config_file)
|
42
45
|
#raise Error, "Could not find configuration file: '#{config_file}'."
|
43
46
|
raise "Could not find configuration file: '#{config_file}'."
|
@@ -132,8 +135,17 @@ module DockerBuilder
|
|
132
135
|
|
133
136
|
# options
|
134
137
|
opts.each do |name, v|
|
138
|
+
#puts "set var #{name} == #{v}"
|
135
139
|
set_variable(name, v)
|
136
140
|
end
|
141
|
+
|
142
|
+
# config file
|
143
|
+
set_path_variable("config_file", options['config_file'], DEFAULTS['config_file'], new_root)
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
puts "config == #{config_file}"
|
137
149
|
end
|
138
150
|
|
139
151
|
# Sets the @root_path to the given +path+ and returns it.
|
@@ -132,7 +132,15 @@ class Manager
|
|
132
132
|
|
133
133
|
# ???
|
134
134
|
#_provision_container_chef_recipe(settings)
|
135
|
+
elsif script_type && script_type=='shell'
|
136
|
+
# docker run
|
137
|
+
cmd %Q(docker run -d --name #{settings.container_name} #{settings.docker_ports_string} #{settings.docker_volumes_string} #{settings.docker_volumes_from_string} #{settings.docker_links_string} #{settings.run_extra_options_string} #{settings.run_env_variables_string} #{settings.image_name} #{settings['docker']['command']} #{settings['docker']['run_options']})
|
138
|
+
|
139
|
+
# provision with shell script
|
140
|
+
run_shell_script_in_container(settings, "install.sh")
|
141
|
+
|
135
142
|
else
|
143
|
+
# no script for provision
|
136
144
|
#_run_container_docker(settings)
|
137
145
|
|
138
146
|
# docker run
|
@@ -293,6 +301,20 @@ class Manager
|
|
293
301
|
return true
|
294
302
|
end
|
295
303
|
|
304
|
+
|
305
|
+
### stop container
|
306
|
+
|
307
|
+
def self.stop_container(server_name, settings)
|
308
|
+
puts "stopping container #{server_name}..."
|
309
|
+
|
310
|
+
#
|
311
|
+
cmd %Q(docker stop #{settings.container_name} )
|
312
|
+
|
313
|
+
#
|
314
|
+
return true
|
315
|
+
end
|
316
|
+
|
317
|
+
|
296
318
|
### run task on running container
|
297
319
|
def self.exec_task(server_name, recipe_name)
|
298
320
|
#raise 'not implemented'
|
@@ -330,14 +352,28 @@ class Manager
|
|
330
352
|
end
|
331
353
|
|
332
354
|
|
355
|
+
### helpers - shell
|
356
|
+
|
357
|
+
def self.run_shell_script_in_container(settings, script_name)
|
358
|
+
script_path = settings.make_path_full("scripts/#{script_name}")
|
359
|
+
|
360
|
+
# copy
|
361
|
+
cmd %Q(cd #{Config.root_path} && docker cp #{script_path} #{settings.container_name}:/tmp/#{script_name} )
|
362
|
+
|
363
|
+
# exec
|
364
|
+
cmd %Q(docker exec #{settings.container_name} chmod +x /tmp/#{script_name} )
|
365
|
+
cmd %Q(docker exec #{settings.container_name} /tmp/#{script_name} )
|
366
|
+
end
|
367
|
+
|
368
|
+
|
333
369
|
### helpers - chef
|
334
370
|
|
335
371
|
def self.run_chef_recipe(settings, recipe_rb)
|
336
|
-
cmd %Q(cd #{Config.root_path} && SERVER_NAME=#{settings.name} SERVER_PATH=#{settings.dir_server_root} chef exec chef-client -z -N #{settings.
|
372
|
+
cmd %Q(cd #{Config.root_path} && SERVER_NAME=#{settings.name} SERVER_PATH=#{settings.dir_server_root} chef exec chef-client -z -N #{settings.container_name} -j #{settings.filename_config_json} -c #{chef_config_knife_path} #{chef_recipe_path(recipe_rb)} )
|
337
373
|
end
|
338
374
|
|
339
375
|
def self.run_chef_recipe_server_recipe(settings, server_recipe)
|
340
|
-
cmd %Q(cd #{Config.root_path} && SERVER_NAME=#{settings.name} SERVER_PATH=#{settings.dir_server_root} chef exec chef-client -z -N #{settings.
|
376
|
+
cmd %Q(cd #{Config.root_path} && SERVER_NAME=#{settings.name} SERVER_PATH=#{settings.dir_server_root} chef exec chef-client -z -N #{settings.container_name} -c #{chef_config_knife_path} --override-runlist 'recipe[#{settings.name}::#{server_recipe}]' )
|
341
377
|
end
|
342
378
|
|
343
379
|
|
data/readme.md
CHANGED
@@ -1,32 +1,115 @@
|
|
1
1
|
# Docker builder
|
2
2
|
|
3
|
-
Tool to build and install Docker containers with Chef, Dockerfile and other tools.
|
3
|
+
Tool to build and install Docker containers with Chef, Dockerfile and other provisioning tools.
|
4
4
|
|
5
|
-
|
5
|
+
Features:
|
6
|
+
* Config files are in Ruby.
|
7
|
+
* Manage complexity of running Docker containers for your environment in one place.
|
8
|
+
* Manage multiple containers
|
6
9
|
|
7
|
-
Manage complexity of running Docker containers for your environment in one place.
|
8
10
|
|
11
|
+
Other tools:
|
12
|
+
* docker-composer - with configs in yml
|
9
13
|
|
10
|
-
# Basic usage
|
11
14
|
|
12
|
-
|
15
|
+
|
16
|
+
# Overview
|
17
|
+
|
18
|
+
|
19
|
+
Build Docker image:
|
20
|
+
* from Dockerfile
|
21
|
+
* Chef provisioning (machine_image)
|
22
|
+
|
23
|
+
Provision during installation container on the host machine by:
|
24
|
+
* running shell script inside container
|
25
|
+
* running Chef script inside container with Chef provisioning
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
# Quickstart
|
31
|
+
|
32
|
+
We will build and run a simple Docker container with Nginx server.
|
33
|
+
|
34
|
+
* install gem
|
35
|
+
|
36
|
+
```
|
37
|
+
gem install docker-builder
|
38
|
+
```
|
39
|
+
|
13
40
|
|
14
41
|
* generate directory structure using generator
|
42
|
+
|
15
43
|
```
|
16
44
|
docker-builder generate --name=nginx --type=chef
|
17
45
|
```
|
18
46
|
|
19
|
-
it will create a folder `nginx`
|
47
|
+
it will create a folder `nginx` with necessary directory structure inside.
|
48
|
+
|
20
49
|
|
21
50
|
* in the folder edit config file `config.rb` with common settings
|
22
51
|
|
23
52
|
```
|
53
|
+
common({
|
54
|
+
'prefix' => "example-",
|
55
|
+
'image_prefix' => 'example-',
|
56
|
+
'dir_data' => '/disk3/data/my-examples/',
|
57
|
+
|
58
|
+
})
|
59
|
+
|
60
|
+
servers({
|
61
|
+
'nginx'=>{
|
62
|
+
# some server options here
|
63
|
+
},
|
64
|
+
|
65
|
+
|
66
|
+
})
|
67
|
+
|
68
|
+
|
69
|
+
base({
|
70
|
+
|
71
|
+
})
|
72
|
+
|
24
73
|
|
25
74
|
```
|
26
75
|
|
27
76
|
* edit custom settings for the server in file `servers/nginx/config.rb`
|
28
77
|
|
29
78
|
```
|
79
|
+
|
80
|
+
add 'build', {
|
81
|
+
"image_name" => "nginx",
|
82
|
+
'build_type' => 'chef',
|
83
|
+
"base_image" => { "name" => "nginx", "repository" => "nginx", "tag" => "1.10" },
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
add 'install', {
|
88
|
+
"host" => { 'script_type' => 'chef_recipe', 'script' => 'install_host', },
|
89
|
+
"node" => { 'script_type' => 'chef_recipe', 'script' => 'install', }
|
90
|
+
}
|
91
|
+
|
92
|
+
add 'docker', {
|
93
|
+
"command"=> "nginx -g 'daemon off;'",
|
94
|
+
'ports' => [
|
95
|
+
[8080,80],
|
96
|
+
],
|
97
|
+
'volumes' => [
|
98
|
+
['html', '/usr/share/nginx/html'],
|
99
|
+
['log/nginx', '/var/log/nginx/'],
|
100
|
+
],
|
101
|
+
'links' => [ ]
|
102
|
+
}
|
103
|
+
|
104
|
+
add 'attributes', {
|
105
|
+
'nginx' =>{
|
106
|
+
"sitename" =>"mysite.local"
|
107
|
+
},
|
108
|
+
|
109
|
+
|
110
|
+
}
|
111
|
+
|
112
|
+
|
30
113
|
```
|
31
114
|
|
32
115
|
* build Docker image
|
@@ -46,6 +129,14 @@ docker-builder up
|
|
46
129
|
* check container is running
|
47
130
|
```
|
48
131
|
docker ps
|
132
|
+
|
133
|
+
# see container named example-nginx
|
134
|
+
```
|
135
|
+
|
136
|
+
* access container
|
137
|
+
|
138
|
+
```
|
139
|
+
docker exec -ti example-nginx /bin/bash
|
49
140
|
```
|
50
141
|
|
51
142
|
* access container from browser
|
@@ -56,7 +147,17 @@ http://localhost:8080
|
|
56
147
|
|
57
148
|
|
58
149
|
|
59
|
-
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
# Basic usage
|
154
|
+
|
155
|
+
# Provision wich shell script
|
156
|
+
|
157
|
+
* put scripts in `/path/to/project/ <<server_name>> / scripts / install.sh`
|
158
|
+
|
159
|
+
|
160
|
+
# Provisioning with Chef
|
60
161
|
|
61
162
|
Process of building and running container on the host machine:
|
62
163
|
* Build Docker image
|
@@ -78,22 +179,59 @@ Process of building and running container on the host machine:
|
|
78
179
|
* Destroy image
|
79
180
|
|
80
181
|
|
182
|
+
## Install server with Chef provisioning
|
183
|
+
|
184
|
+
* generate directory structure using generator
|
185
|
+
```
|
186
|
+
docker-builder generate --name=nginx --type=chef
|
187
|
+
```
|
81
188
|
|
82
|
-
|
189
|
+
it will create a folder `nginx`
|
190
|
+
|
191
|
+
* in the folder edit config file `config.rb` with common settings
|
192
|
+
|
193
|
+
```
|
194
|
+
|
195
|
+
```
|
196
|
+
|
197
|
+
* edit custom settings for the server in file `servers/nginx/config.rb`
|
198
|
+
|
199
|
+
```
|
200
|
+
```
|
201
|
+
|
202
|
+
* build Docker image
|
203
|
+
|
204
|
+
```
|
205
|
+
# from the folder with project
|
206
|
+
|
207
|
+
docker-builder build
|
208
|
+
```
|
83
209
|
|
84
|
-
|
210
|
+
* run container
|
85
211
|
|
86
|
-
```
|
87
|
-
|
212
|
+
```
|
213
|
+
docker-builder up
|
88
214
|
```
|
89
215
|
|
90
|
-
|
216
|
+
* check container is running
|
217
|
+
```
|
218
|
+
docker ps
|
219
|
+
```
|
91
220
|
|
92
|
-
|
221
|
+
* access container from browser
|
93
222
|
|
94
|
-
|
223
|
+
```
|
224
|
+
http://localhost:8080
|
225
|
+
```
|
95
226
|
|
96
|
-
|
227
|
+
|
228
|
+
# Installation
|
229
|
+
|
230
|
+
|
231
|
+
Install gem:
|
232
|
+
```
|
233
|
+
$ gem install docker-builder
|
234
|
+
```
|
97
235
|
|
98
236
|
|
99
237
|
|
@@ -175,7 +313,7 @@ in folder with servers:
|
|
175
313
|
|
176
314
|
cookbook_path cookbook_path+[
|
177
315
|
'/path/to/my/cookbooks',
|
178
|
-
'/path/to/my
|
316
|
+
'/path/to/my/other/cookbooks',
|
179
317
|
]
|
180
318
|
|
181
319
|
```
|
@@ -254,3 +392,24 @@ data for nginx server:
|
|
254
392
|
* packer - https://github.com/mitchellh/packer
|
255
393
|
|
256
394
|
Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
|
395
|
+
|
396
|
+
|
397
|
+
|
398
|
+
# Docker options for running container
|
399
|
+
|
400
|
+
* additional options for docker run command
|
401
|
+
* hostname
|
402
|
+
|
403
|
+
```
|
404
|
+
{
|
405
|
+
..
|
406
|
+
servers({
|
407
|
+
'zookeeper'=>{
|
408
|
+
...
|
409
|
+
'docker'=> {
|
410
|
+
...
|
411
|
+
'run_extra_options'=>'--hostname zookeeper'
|
412
|
+
}
|
413
|
+
}
|
414
|
+
```
|
415
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Ivak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,6 +67,7 @@ files:
|
|
67
67
|
- Rakefile
|
68
68
|
- bin/console
|
69
69
|
- bin/setup
|
70
|
+
- bootstrap_local.sh
|
70
71
|
- docker-builder.gemspec
|
71
72
|
- examples/example-apps-php/.chef/knife.rb
|
72
73
|
- examples/example-apps-php/config.rb
|
@@ -103,13 +104,13 @@ files:
|
|
103
104
|
- examples/example-nginx/servers/nginx/cookbooks/nginx/templates/index.html.erb
|
104
105
|
- examples/example-nginx/servers/nginx/cookbooks/nginx/templates/nginx-sites/default.conf.erb
|
105
106
|
- examples/example-nginx/servers/nginx/readme.md
|
107
|
+
- examples/example-nginx/servers/nginx/scripts/install.sh
|
106
108
|
- examples/example-nginx/temp/ex_nginx.json
|
107
109
|
- examples/example-nginx/temp/nginx.json
|
108
110
|
- exe/docker-builder
|
109
111
|
- install_local.sh
|
110
112
|
- lib/docker_builder.rb
|
111
113
|
- lib/docker_builder/chef/.chef/knife.rb
|
112
|
-
- lib/docker_builder/chef/bootstrap_local.sh
|
113
114
|
- lib/docker_builder/chef/chef_build_image.copy0.rb
|
114
115
|
- lib/docker_builder/chef/chef_build_image.rb
|
115
116
|
- lib/docker_builder/chef/chef_destroy_container.rb
|