docker-builder 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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