docker-builder 0.1.5

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.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/CODE_OF_CONDUCT.md +49 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/Rakefile +140 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/docker-builder.gemspec +36 -0
  10. data/examples/example-apps-php/.chef/knife.rb +6 -0
  11. data/examples/example-apps-php/config.rb +19 -0
  12. data/examples/example-apps-php/servers/apps-php/.chef/knife.rb +2 -0
  13. data/examples/example-apps-php/servers/apps-php/config.rb +69 -0
  14. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/README.md +1 -0
  15. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/metadata.rb +9 -0
  16. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/build.rb +43 -0
  17. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install.rb +55 -0
  18. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install_app.rb +27 -0
  19. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install_host.rb +9 -0
  20. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/index.html.erb +4 -0
  21. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/app.conf.erb +55 -0
  22. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/app.conf.erb.1 +55 -0
  23. data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/default.conf.erb +45 -0
  24. data/examples/example-apps-php/servers/apps-php/readme.md +0 -0
  25. data/examples/example-nginx/config.rb +19 -0
  26. data/examples/example-nginx/servers/nginx/.chef/knife.rb +8 -0
  27. data/examples/example-nginx/servers/nginx/config.rb +54 -0
  28. data/examples/example-nginx/servers/nginx/cookbooks/nginx/README.md +1 -0
  29. data/examples/example-nginx/servers/nginx/cookbooks/nginx/metadata.rb +9 -0
  30. data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/build.rb +10 -0
  31. data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/install.rb +28 -0
  32. data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/install_host.rb +9 -0
  33. data/examples/example-nginx/servers/nginx/cookbooks/nginx/templates/index.html.erb +4 -0
  34. data/examples/example-nginx/servers/nginx/cookbooks/nginx/templates/nginx-sites/default.conf.erb +45 -0
  35. data/examples/example-nginx/servers/nginx/readme.md +0 -0
  36. data/examples/example-nginx/temp/ex_nginx.json +20 -0
  37. data/examples/example-nginx/temp/nginx.json +1 -0
  38. data/exe/docker-builder +20 -0
  39. data/install_local.sh +2 -0
  40. data/lib/docker_builder.rb +18 -0
  41. data/lib/docker_builder/chef/.chef/knife.rb +115 -0
  42. data/lib/docker_builder/chef/chef_build_image.copy0.rb +60 -0
  43. data/lib/docker_builder/chef/chef_destroy_image.copy0.rb +35 -0
  44. data/lib/docker_builder/cli.rb +346 -0
  45. data/lib/docker_builder/config.rb +199 -0
  46. data/lib/docker_builder/config/dsl.rb +48 -0
  47. data/lib/docker_builder/config/helpers.rb +99 -0
  48. data/lib/docker_builder/manager.rb +364 -0
  49. data/lib/docker_builder/server_settings.rb +286 -0
  50. data/lib/docker_builder/version.rb +3 -0
  51. data/lib/templates/example-chef/config.rb.erb +18 -0
  52. data/lib/templates/example-chef/servers/server1/.chef/knife.rb +8 -0
  53. data/lib/templates/example-chef/servers/server1/config.rb.erb +54 -0
  54. data/lib/templates/example-chef/servers/server1/cookbooks/server1/README.md +1 -0
  55. data/lib/templates/example-chef/servers/server1/cookbooks/server1/metadata.rb.erb +8 -0
  56. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/build.rb +10 -0
  57. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install.rb +36 -0
  58. data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install_host.rb +9 -0
  59. data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/index.html.erb +5 -0
  60. data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/nginx-sites/default.conf.erb +45 -0
  61. data/readme.md +233 -0
  62. data/readme_developers.md +54 -0
  63. data/temp.sh +21 -0
  64. data/temp/app-php.json +1 -0
  65. data/temp/build.sh +29 -0
  66. data/temp/chef_build_image.rb +37 -0
  67. data/temp/chef_destroy_image.rb +16 -0
  68. data/temp/cookbooks/temp1/README.md +1 -0
  69. data/temp/cookbooks/temp1/metadata.rb +9 -0
  70. data/temp/cookbooks/temp1/recipes/build.rb +42 -0
  71. data/temp/run.sh +2 -0
  72. metadata +157 -0
@@ -0,0 +1,45 @@
1
+ server {
2
+ listen 80;
3
+ server_name localhost ;
4
+
5
+ #charset koi8-r;
6
+ #access_log /var/log/nginx/log/access.log main;
7
+
8
+ location / {
9
+ root /usr/share/nginx/html;
10
+ index index.html index.htm;
11
+ }
12
+
13
+ #error_page 404 /404.html;
14
+
15
+ # redirect server error pages to the static page /50x.html
16
+ #
17
+ error_page 500 502 503 504 /50x.html;
18
+ location = /50x.html {
19
+ root /usr/share/nginx/html;
20
+ }
21
+
22
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
23
+ #
24
+ #location ~ \.php$ {
25
+ # proxy_pass http://127.0.0.1;
26
+ #}
27
+
28
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
29
+ #
30
+ #location ~ \.php$ {
31
+ # root html;
32
+ # fastcgi_pass 127.0.0.1:9000;
33
+ # fastcgi_index index.php;
34
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
35
+ # include fastcgi_params;
36
+ #}
37
+
38
+ # deny access to .htaccess files, if Apache's document root
39
+ # concurs with nginx's one
40
+ #
41
+ #location ~ /\.ht {
42
+ # deny all;
43
+ #}
44
+ }
45
+
@@ -0,0 +1,233 @@
1
+ # Docker builder
2
+
3
+ Tool to build and install Docker containers with Chef, Dockerfile and other tools.
4
+
5
+ Config files are in Ruby.
6
+
7
+ Manage complexity of running Docker containers for your environment in one place.
8
+
9
+
10
+ # Basic usage
11
+
12
+ ## Server with Chef provisioning
13
+
14
+ * generate directory structure using generator
15
+ ```
16
+ docker-builder generate --name=nginx --type=chef
17
+ ```
18
+
19
+ it will create a folder `nginx`
20
+
21
+ * in the folder edit config file `config.rb` with common settings
22
+
23
+ ```
24
+
25
+ ```
26
+
27
+ * edit custom settings for the server in file `servers/nginx/config.rb`
28
+
29
+ ```
30
+ ```
31
+
32
+ * build Docker image
33
+
34
+ ```
35
+ # from the folder with project
36
+
37
+ docker-builder build
38
+ ```
39
+
40
+ * run container
41
+
42
+ ```
43
+ docker-builder up
44
+ ```
45
+
46
+ * check container is running
47
+ ```
48
+ docker ps
49
+ ```
50
+
51
+ * access container from browser
52
+
53
+ ```
54
+ http://localhost:8080
55
+ ```
56
+
57
+
58
+
59
+ # Overview
60
+
61
+ Process of building and running container on the host machine:
62
+ * Build Docker image
63
+ * it will create a Docker image on the host machine
64
+
65
+ * Run Docker container
66
+ * provision host machine - run scripts locally on the host machine
67
+ (recipe install_host.rb)
68
+ * run container (docker run)
69
+ * provision container - run script in the container
70
+ (recipe install.rb)
71
+
72
+ * Install systemd service to run Docker container (optional)
73
+
74
+ * Start/Stop container
75
+
76
+ * Destroy container
77
+
78
+ * Destroy image
79
+
80
+
81
+
82
+ # Installation
83
+
84
+ Add this line to your application's Gemfile:
85
+
86
+ ```ruby
87
+ gem 'docker-builder'
88
+ ```
89
+
90
+ And then execute:
91
+
92
+ $ bundle
93
+
94
+ Or install it yourself as:
95
+
96
+ $ gem install docker-builder
97
+
98
+
99
+
100
+ # Usage
101
+
102
+
103
+ * Build docker image
104
+
105
+ ```
106
+ cd /path/to/servers
107
+
108
+ docker-builder build -s server_name
109
+ ```
110
+
111
+ * run docker container
112
+
113
+ ```
114
+ cd /path/to/servers
115
+
116
+ docker-builder run -s server_name
117
+ ```
118
+
119
+ it will run container.
120
+
121
+ access container:
122
+
123
+ ```
124
+ docker exec -ti container_name /bin/bash
125
+ ```
126
+
127
+
128
+
129
+ ## Development
130
+
131
+ After checking out the repo, run `bin/setup` to install dependencies.
132
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment.
133
+
134
+ 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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
135
+
136
+
137
+
138
+
139
+ # Settings
140
+
141
+ * CHEF_COOKBOOKS - list of paths to chef cookbooks
142
+
143
+
144
+ # Chef provisioning
145
+
146
+ * add additional paths for cookbooks
147
+
148
+ in folder with servers:
149
+
150
+ ```
151
+ # /path/to/my/servers/.chef/knife.rb
152
+
153
+ cookbook_path cookbook_path+[
154
+ '/path/to/my/cookbooks',
155
+ '/path/to/my//other/cookbooks',
156
+ ]
157
+
158
+ ```
159
+
160
+
161
+ # Build Docker container with Chef
162
+
163
+ Example of building Docker container with Chef.
164
+
165
+ Assume that our server name is 'nginx'.
166
+
167
+
168
+ * edit config file 'myserver/config.rb'
169
+
170
+ ```
171
+ ####
172
+ ```
173
+
174
+ * Chef recipes
175
+ * cookbooks/nginx/recipes/build.rb
176
+ place chef resources to be included in the Docker image
177
+
178
+ * cookbooks/nginx/recipes/install.rb
179
+
180
+ * cookbooks/nginx/recipes/install_host.rb
181
+
182
+ * build
183
+
184
+ ```
185
+ # run from the folder
186
+
187
+ docker-builder build['nginx']
188
+ ```
189
+
190
+ * shared data:
191
+ /disk3/data/server-api/nginx-front
192
+
193
+ data for nginx server:
194
+ * /etc/nginx/conf.d
195
+ * /var/www/html
196
+ * /var/log/nginx
197
+
198
+
199
+ * Main site - /var/www/html ==> /disk3/data/server-api/nginx-front/var/www/html
200
+
201
+
202
+
203
+ * Config
204
+
205
+
206
+ ## Run container
207
+
208
+
209
+
210
+ ## Manage multiple servers
211
+
212
+
213
+
214
+
215
+
216
+
217
+ # Build container
218
+
219
+ # Run container
220
+
221
+
222
+ ## Run Docker container with Chef
223
+
224
+ * run recipe install_host which runs on the host machine (not in container)
225
+ * run recipe install which runs from within the running container
226
+
227
+
228
+
229
+ # Other tools
230
+
231
+ * packer - https://github.com/mitchellh/packer
232
+
233
+ Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
@@ -0,0 +1,54 @@
1
+ # For developers
2
+
3
+
4
+ # Build image
5
+
6
+
7
+ Build Docker image with Chef provisioning:
8
+
9
+ * go to folder where servers are located
10
+
11
+ * run to build one server
12
+
13
+ ```
14
+ # run from folder where servers are located
15
+ docker-builder build -s nginx
16
+
17
+ # or run from any folder
18
+ docker-builder build -s nginx --root-path /path/to/example-nginx
19
+
20
+ ```
21
+
22
+
23
+ * it generates temp json file with node attributes
24
+ examples/example-nginx/temp/nginx.json
25
+
26
+ * runs chef-client to build image
27
+
28
+ ```
29
+ SERVER_NAME=nginx chef exec chef-client -z -N nginx -j /mnt/data/projects/mmx/docker-builder/examples/example-nginx/temp/nginx.json lib/docker_builder/chef/chef_build_image.rb
30
+ ```
31
+
32
+ * chef-client takes json file and recipe and create new Docker image and run recipe 'servers/nginx/cookbooks/recipes/build.rb'
33
+
34
+ * a new Docker image named '<<prefix>>nginx' is created
35
+ i.e. example-nginx
36
+
37
+ docker images
38
+
39
+
40
+ * run test container
41
+
42
+ docker run -ti --rm example-nginx /bin/bash
43
+
44
+ * in the interactive terminal inside the container:
45
+ check we have resources from build.rb
46
+
47
+ * exit container
48
+
49
+ * container will be automatically destroyed
50
+
51
+
52
+
53
+ # Run container
54
+
data/temp.sh ADDED
@@ -0,0 +1,21 @@
1
+ chef exec knife node delete example-temp1 -y
2
+ chef exec knife node delete example-nginx -y
3
+ chef exec knife node delete nginx -y
4
+
5
+ chef exec knife node show example-nginx
6
+
7
+ # destroy
8
+
9
+
10
+ echo 'destroying..'
11
+ SERVER_NAME=nginx SERVER_PATH=/mnt/data/projects/mmx/docker-builder/examples/example-nginx/servers/nginx chef exec chef-client -z -N example-nginx -j /mnt/data/projects/mmx/docker-builder/examples/example-nginx/temp/nginx.json -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/chef_destroy_image.rb
12
+
13
+
14
+ #SERVER_NAME=nginx SERVER_PATH=/mnt/data/projects/mmx/docker-builder/examples/example-nginx/servers/nginx chef exec chef-client -z -N example-nginx -j /mnt/data/projects/mmx/docker-builder/examples/example-nginx/temp/nginx.json -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb /mnt/data/projects/mmx/docker-builder/temp/chef_destroy_image.rb
15
+
16
+
17
+ #
18
+ echo 'building..'
19
+
20
+ SERVER_NAME=nginx SERVER_PATH=/mnt/data/projects/mmx/docker-builder/examples/example-nginx/servers/nginx chef exec chef-client -z -N example-nginx -j /mnt/data/projects/mmx/docker-builder/examples/example-nginx/temp/nginx.json /mnt/data/projects/mmx/docker-builder/temp/chef_build_image.rb
21
+
@@ -0,0 +1 @@
1
+ {"build":{"image_name":"app-php","build_type":"chef","base_image":{"name":"my-nginx-php","repository":"my-nginx-php","tag":"latest"}},"install":{"host":{"script_type":"chef_recipe","script":"install_host"},"node":{"script_type":"chef_recipe","script":"install"}},"docker":{"command":"/sbin/my_init","ports":[[8080,80]],"volumes":[["/disk3/data/my-examples/app-php/html","/var/www/html"],["/disk3/data/my-examples/app-php/log/nginx","/var/log/nginx/"]],"links":[]},"attributes":{"nginx":{"sitename":"mysite.local"}},"name":"app-php","common":{"prefix":"example-","image_prefix":"example-","dir_data":"/disk3/data/my-examples/"},"base":{"image_name":"example-app-php","container_name":"example-app-php"}}
@@ -0,0 +1,29 @@
1
+ docker rm -f temp-1
2
+ docker rmi temp-my1
3
+
4
+ #
5
+ chef exec knife node delete temp-my1 -y -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb
6
+
7
+
8
+ #
9
+ rm -rf .chef/local-mode-cache
10
+
11
+ rm -rf clients
12
+ rm -rf data_bags
13
+ rm -rf nodes
14
+
15
+ SERVER_NAME=temp-my1 chef exec chef-client -z -N temp-my1 -j /mnt/data/projects/mmx/docker-builder/temp/app-php.json -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb chef_destroy_image.rb
16
+
17
+ chef exec knife node delete temp-my1 -y -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb
18
+
19
+ #
20
+ rm -rf .chef/local-mode-cache
21
+
22
+ rm -rf clients
23
+ rm -rf data_bags
24
+ rm -rf nodes
25
+ chef exec knife node delete temp-my1 -y -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb
26
+
27
+
28
+ #
29
+ SERVER_NAME=temp-my1 chef exec chef-client -z -N temp-my1 -j /mnt/data/projects/mmx/docker-builder/temp/app-php.json -c /mnt/data/projects/mmx/docker-builder/lib/docker_builder/chef/.chef/knife.rb chef_build_image.rb
@@ -0,0 +1,37 @@
1
+ #
2
+ require 'chef/provisioning'
3
+
4
+ #
5
+ server_name = ENV['SERVER_NAME']
6
+
7
+ # settings
8
+ docker_options = {
9
+ base_image: 'my-nginx-php',
10
+ command: "/sbin/my_init",
11
+ privileged: true,
12
+
13
+ }
14
+
15
+
16
+ ### docker image
17
+ with_driver 'docker'
18
+ machine_image 'temp-my1' do
19
+ action :create
20
+
21
+ #tag '0.1'
22
+
23
+ recipe "temp1::build"
24
+
25
+ # attributes
26
+ node['attributes'].keys.each do |k|
27
+ attribute k, node['attributes'][k]
28
+ end
29
+
30
+ #
31
+ machine_options docker_options: docker_options
32
+
33
+
34
+ end
35
+
36
+
37
+
@@ -0,0 +1,16 @@
1
+ base_dir = File.dirname(__FILE__)
2
+
3
+ #
4
+ require 'chef/provisioning'
5
+
6
+ #
7
+ server_name = ENV['SERVER_NAME']
8
+
9
+
10
+ ### docker image
11
+ with_driver 'docker'
12
+
13
+ machine_image 'temp-my' do
14
+ action :destroy
15
+ end
16
+
@@ -0,0 +1 @@
1
+ # nginx