docker-builder 0.1.8 → 0.1.11
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 +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
|