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.
- 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
|