docker-builder 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/Rakefile +140 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docker-builder.gemspec +36 -0
- data/examples/example-apps-php/.chef/knife.rb +6 -0
- data/examples/example-apps-php/config.rb +19 -0
- data/examples/example-apps-php/servers/apps-php/.chef/knife.rb +2 -0
- data/examples/example-apps-php/servers/apps-php/config.rb +69 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/README.md +1 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/metadata.rb +9 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/build.rb +43 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install.rb +55 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install_app.rb +27 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/recipes/install_host.rb +9 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/index.html.erb +4 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/app.conf.erb +55 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/app.conf.erb.1 +55 -0
- data/examples/example-apps-php/servers/apps-php/cookbooks/apps-php/templates/nginx-sites/default.conf.erb +45 -0
- data/examples/example-apps-php/servers/apps-php/readme.md +0 -0
- data/examples/example-nginx/config.rb +19 -0
- data/examples/example-nginx/servers/nginx/.chef/knife.rb +8 -0
- data/examples/example-nginx/servers/nginx/config.rb +54 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/README.md +1 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/metadata.rb +9 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/build.rb +10 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/install.rb +28 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/recipes/install_host.rb +9 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/templates/index.html.erb +4 -0
- data/examples/example-nginx/servers/nginx/cookbooks/nginx/templates/nginx-sites/default.conf.erb +45 -0
- data/examples/example-nginx/servers/nginx/readme.md +0 -0
- data/examples/example-nginx/temp/ex_nginx.json +20 -0
- data/examples/example-nginx/temp/nginx.json +1 -0
- data/exe/docker-builder +20 -0
- data/install_local.sh +2 -0
- data/lib/docker_builder.rb +18 -0
- data/lib/docker_builder/chef/.chef/knife.rb +115 -0
- data/lib/docker_builder/chef/chef_build_image.copy0.rb +60 -0
- data/lib/docker_builder/chef/chef_destroy_image.copy0.rb +35 -0
- data/lib/docker_builder/cli.rb +346 -0
- data/lib/docker_builder/config.rb +199 -0
- data/lib/docker_builder/config/dsl.rb +48 -0
- data/lib/docker_builder/config/helpers.rb +99 -0
- data/lib/docker_builder/manager.rb +364 -0
- data/lib/docker_builder/server_settings.rb +286 -0
- data/lib/docker_builder/version.rb +3 -0
- data/lib/templates/example-chef/config.rb.erb +18 -0
- data/lib/templates/example-chef/servers/server1/.chef/knife.rb +8 -0
- data/lib/templates/example-chef/servers/server1/config.rb.erb +54 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/README.md +1 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/metadata.rb.erb +8 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/build.rb +10 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install.rb +36 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/recipes/install_host.rb +9 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/index.html.erb +5 -0
- data/lib/templates/example-chef/servers/server1/cookbooks/server1/templates/nginx-sites/default.conf.erb +45 -0
- data/readme.md +233 -0
- data/readme_developers.md +54 -0
- data/temp.sh +21 -0
- data/temp/app-php.json +1 -0
- data/temp/build.sh +29 -0
- data/temp/chef_build_image.rb +37 -0
- data/temp/chef_destroy_image.rb +16 -0
- data/temp/cookbooks/temp1/README.md +1 -0
- data/temp/cookbooks/temp1/metadata.rb +9 -0
- data/temp/cookbooks/temp1/recipes/build.rb +42 -0
- data/temp/run.sh +2 -0
- 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
|
+
|
data/readme.md
ADDED
@@ -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
|
+
|
data/temp/app-php.json
ADDED
@@ -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"}}
|
data/temp/build.sh
ADDED
@@ -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 @@
|
|
1
|
+
# nginx
|