Grid環境構築用のChefリポジトリです。
Revision | 4c02a52324e627e85367d63eaf8686eab0ba0738 (tree) |
---|---|
Zeit | 2017-11-25 14:37:26 |
Autor | whitestar <whitestar@user...> |
Commiter | whitestar |
adds the docker-grid::dind-compose recipe.
@@ -1,5 +1,10 @@ | ||
1 | 1 | # docker-grid CHANGELOG |
2 | 2 | |
3 | +0.5.5 | |
4 | +----- | |
5 | +- adds the `docker-grid::dind-compose` recipe. | |
6 | +- refactoring. | |
7 | + | |
3 | 8 | 0.5.4 |
4 | 9 | ----- |
5 | 10 | - adds the Docker project new repository support (Debian, Ubuntu, RHEL and CentOS). |
@@ -13,6 +13,7 @@ This cookbook sets up Docker engine etc. | ||
13 | 13 | - [Recipes](#recipes) |
14 | 14 | - [docker-grid::default](#docker-griddefault) |
15 | 15 | - [docker-grid::compose](#docker-gridcompose) |
16 | + - [docker-grid::dind-compose](#docker-griddind-compose) | |
16 | 17 | - [docker-grid::engine](#docker-gridengine) |
17 | 18 | - [docker-grid::registry](#docker-gridregistry) |
18 | 19 | - [docker-grid::registry-docker-compose](#docker-gridregistry-docker-compose) |
@@ -51,7 +52,10 @@ This cookbook sets up Docker engine etc. | ||
51 | 52 | |`['docker-grid']['compose']['release_base_url']`|String||`'https://github.com/docker/compose/releases/download/1.9.0'`| |
52 | 53 | |`['docker-grid']['compose']['release_url']`|String||`"#{node['docker-grid']['compose']['release_base_url']}/docker-compose-#{node['kernel']['name']}-#{node['kernel']['machine']}"`| |
53 | 54 | |`['docker-grid']['compose']['home_dir']`|String||`'/opt/docker-compose'`| |
54 | -|`['docker-grid']['compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['home_dir']}/app`| | |
55 | +|`['docker-grid']['compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['home_dir']}/app"`| | |
56 | +|`['docker-grid']['dind-compose']['app_dir']`|String|docker-compose application root directory for Docker in Docker.|`"#{node['docker-grid']['compose']['app_dir']}/docker-in-docker"`| | |
57 | +|`['docker-grid']['dind-compose']['data_dir']`|String|persistent data directory.|`"#{node['docker-grid']['dind-compose']['app_dir']}/data"`| | |
58 | +|`['docker-grid']['dind-compose']['config']`|Hash|`docker-compose.yml` configurations.|See `attributes/default.rb`| | |
55 | 59 | |`['docker-grid']['engine']['skip_setup']`|Boolean||`false`| |
56 | 60 | |`['docker-grid']['engine']['version_on_centos']`|String|Docker version for CentOS. `''` (empty) means the latest version.|`'1.11.2-1'`| |
57 | 61 | |`['docker-grid']['engine']['version_on_debian']`|String|Docker version for Debian. `''` (empty) means the latest version.|`'17.03.1~ce-0'`| |
@@ -86,6 +90,10 @@ This recipe does nothing. | ||
86 | 90 | |
87 | 91 | This recipe installs docker-compose. |
88 | 92 | |
93 | +#### docker-grid::dind-compose | |
94 | + | |
95 | +This recipe sets up Docker Compose configurations for a Docker in Docker service. | |
96 | + | |
89 | 97 | #### docker-grid::engine |
90 | 98 | |
91 | 99 | This recipe sets up Docker engine. |
@@ -104,7 +112,41 @@ This recipe sets up a Docker registry service on real host. | ||
104 | 112 | |
105 | 113 | ### Role Examples |
106 | 114 | |
107 | -- `roles/docker.rb`: installs the `docker-engine` package. | |
115 | +- `roles/docker-new-repo.rb`: installs the `docker-ce` package by the new repository. | |
116 | + | |
117 | +```ruby | |
118 | +name 'docker-new-repo' | |
119 | +description 'Docker CE by the new repository' | |
120 | + | |
121 | +run_list( | |
122 | + 'role[docker]', | |
123 | +) | |
124 | + | |
125 | +override_attributes( | |
126 | + 'docker-grid' => { | |
127 | + 'install_flavor' => 'dockerproject', | |
128 | + 'dockerproject' => { | |
129 | + 'enable_new_repo' => true, | |
130 | + }, | |
131 | + 'compose' => { | |
132 | + #'skip_setup' => true, # default: false | |
133 | + 'auto_upgrade' => true, # default: false | |
134 | + 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1', | |
135 | + }, | |
136 | + 'engine' => { | |
137 | + 'version' => '', # latest | |
138 | + #'skip_setup' => true, # default: false | |
139 | + # new package: `docker-ce` | |
140 | + #'version_on_centos' => '17.09.0.ce-1', | |
141 | + #'version_on_ubuntu' => '17.05.0~ce-0', | |
142 | + 'storage-driver_on_centos' => 'devicemapper', | |
143 | + 'storage-driver_on_ubuntu' => 'overlay2', # default: aufs | |
144 | + }, | |
145 | + }, | |
146 | +) | |
147 | +``` | |
148 | + | |
149 | +- `roles/docker.rb`: installs the `docker-engine` package by the old repository. | |
108 | 150 | |
109 | 151 | ```ruby |
110 | 152 | name 'docker' |
@@ -131,6 +173,51 @@ override_attributes( | ||
131 | 173 | ) |
132 | 174 | ``` |
133 | 175 | |
176 | +- `roles/docker4latest_ubuntu.rb`: installs the `docker-ce` package to the latest Ubuntu. | |
177 | + | |
178 | +```ruby | |
179 | +name 'docker4latest_ubuntu' | |
180 | +description 'Docker for the latest Ubuntu' | |
181 | + | |
182 | +run_list( | |
183 | + 'role[docker]', | |
184 | +) | |
185 | + | |
186 | +override_attributes( | |
187 | + 'docker-grid' => { | |
188 | + 'install_flavor' => 'dockerproject', | |
189 | + 'dockerproject' => { | |
190 | + 'enable_new_repo' => true, | |
191 | + 'package_name' => 'docker-ce', # new package name. | |
192 | + }, | |
193 | + # install the package for the newer distribution of ubuntu. | |
194 | + 'apt_repo' => { | |
195 | + # new repo. | |
196 | + #'override_apt_line' => 'deb [arch=amd64] https://download.docker.com/linux/ubuntu artful stable', # not active yet | |
197 | + 'override_apt_line' => 'deb [arch=amd64] https://download.docker.com/linux/ubuntu zesty stable', | |
198 | + # old repo. | |
199 | + #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-zesty main', | |
200 | + #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-xenial main', | |
201 | + }, | |
202 | + 'compose' => { | |
203 | + #'skip_setup' => true, # default: false | |
204 | + 'auto_upgrade' => true, # default: false | |
205 | + 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1', | |
206 | + }, | |
207 | + 'engine' => { | |
208 | + # new package: `docker-ce`` | |
209 | + 'version' => '17.09.0~ce-0~ubuntu', | |
210 | + #'version' => '17.06.2~ce-0~ubuntu', | |
211 | + # old package: `docker-engine`` | |
212 | + #'version' => '17.05.0~ce-0~ubuntu-zesty', | |
213 | + #'version' => '17.03.1~ce-0~ubuntu-yakkety', | |
214 | + #'version' => '1.12.3-0~xenial', | |
215 | + 'storage-driver_on_ubuntu' => 'overlay2', # default: aufs | |
216 | + }, | |
217 | + }, | |
218 | +) | |
219 | +``` | |
220 | + | |
134 | 221 | - `roles/docker-rhel.rb`: installs the `docker` package. |
135 | 222 | |
136 | 223 | ```ruby |
@@ -53,11 +53,34 @@ default['docker-grid']['compose']['skip_setup'] = false | ||
53 | 53 | # os-repository (Ubuntu): http://packages.ubuntu.com/search?keywords=docker-compose&searchon=names |
54 | 54 | # os-repository (CentOS): none. |
55 | 55 | default['docker-grid']['compose']['auto_upgrade'] = false |
56 | +# latest: 'https://github.com/docker/compose/releases/download/1.17.1' | |
56 | 57 | default['docker-grid']['compose']['release_base_url'] = 'https://github.com/docker/compose/releases/download/1.9.0' |
57 | 58 | default['docker-grid']['compose']['release_url'] = "#{node['docker-grid']['compose']['release_base_url']}/docker-compose-#{node['kernel']['name']}-#{node['kernel']['machine']}" |
58 | 59 | default['docker-grid']['compose']['home_dir'] = '/opt/docker-compose' |
59 | 60 | default['docker-grid']['compose']['app_dir'] = "#{node['docker-grid']['compose']['home_dir']}/app" |
60 | 61 | |
62 | +default['docker-grid']['dind-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/docker-in-docker" | |
63 | +default['docker-grid']['dind-compose']['data_dir'] = "#{node['docker-grid']['dind-compose']['app_dir']}/data" | |
64 | +default['docker-grid']['dind-compose']['config'] = { | |
65 | + # Version 2 docker-compose format | |
66 | + 'version' => '2', | |
67 | + 'services' => { | |
68 | + 'dind' => { | |
69 | + 'image' => 'docker:stable-dind', | |
70 | + 'privileged' => true, | |
71 | + 'command' => [ | |
72 | + #'--storage-driver=overlay2', # same as host Docker's storage driver | |
73 | + ], | |
74 | + 'volumes' => [ | |
75 | + # These volumes will be set by the docker-grid::dind-compose recipe automatically. | |
76 | + #"#{node['docker-grid']['dind-compose']['data_dir']}:/var/lib/docker", | |
77 | + ], | |
78 | + 'environment' => { | |
79 | + }, | |
80 | + }, | |
81 | + }, | |
82 | +} | |
83 | + | |
61 | 84 | default['docker-grid']['engine']['skip_setup'] = false |
62 | 85 | # dockerproject: 17.03.1.ce-1, 1.13.1-1, 1.12.6-1, 1.11.2-1, 1.10.3-1 |
63 | 86 | # os-repository: yum list docker |
@@ -68,16 +91,16 @@ default['docker-grid']['engine']['version_on_debian'] = '17.03.1~ce-0' | ||
68 | 91 | # os-repository: http://packages.ubuntu.com/search?keywords=docker.io&searchon=names |
69 | 92 | default['docker-grid']['engine']['version_on_ubuntu'] = '1.11.2-0' |
70 | 93 | |
71 | -# '' (empty) version -> latest version | |
94 | +# '' (empty) or 'latest' version -> latest version | |
72 | 95 | case platform |
73 | 96 | when 'centos', 'redhat' |
74 | 97 | version_on_centos = node['docker-grid']['engine']['version_on_centos'] |
75 | - if !version_on_centos.nil? && !version_on_centos.empty? | |
98 | + if !version_on_centos.nil? && !version_on_centos.empty? && version_on_centos != 'latest' | |
76 | 99 | version_on_centos = "#{version_on_centos}.el#{node['platform_version'].to_i}.#{node['platform']}" |
77 | 100 | end |
78 | 101 | when 'debian' |
79 | 102 | version_on_debian = node['docker-grid']['engine']['version_on_debian'] |
80 | - if !version_on_debian.nil? && !version_on_debian.empty? | |
103 | + if !version_on_debian.nil? && !version_on_debian.empty? && version_on_debian != 'latest' | |
81 | 104 | version_on_debian = \ |
82 | 105 | if node['docker-grid']['install_flavor'] == 'dockerproject' |
83 | 106 | if Gem::Version.create(version_on_debian.tr('~', '-')) >= Gem::Version.create('1.12.4-0') |
@@ -89,7 +112,7 @@ when 'debian' | ||
89 | 112 | end |
90 | 113 | when 'ubuntu' |
91 | 114 | version_on_ubuntu = node['docker-grid']['engine']['version_on_ubuntu'] |
92 | - if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? | |
115 | + if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? && version_on_ubuntu != 'latest' | |
93 | 116 | version_on_ubuntu = \ |
94 | 117 | if node['docker-grid']['install_flavor'] == 'dockerproject' |
95 | 118 | if Gem::Version.create(version_on_ubuntu.tr('~', '-')) >= Gem::Version.create('1.12.4-0') |
@@ -104,7 +127,7 @@ when 'ubuntu' | ||
104 | 127 | end |
105 | 128 | end |
106 | 129 | |
107 | -# '' (empty) version -> latest version | |
130 | +# '' (empty) or 'latest' version -> latest version | |
108 | 131 | default['docker-grid']['engine']['version'] = node.value_for_platform( |
109 | 132 | ['centos', 'redhat'] => { |
110 | 133 | 'default' => version_on_centos, |
@@ -0,0 +1,84 @@ | ||
1 | +# | |
2 | +# Cookbook Name:: docker-grid | |
3 | +# Recipe:: dind-compose | |
4 | +# | |
5 | +# Copyright 2017, whitestar | |
6 | +# | |
7 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
8 | +# you may not use this file except in compliance with the License. | |
9 | +# You may obtain a copy of the License at | |
10 | +# | |
11 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
12 | +# | |
13 | +# Unless required by applicable law or agreed to in writing, software | |
14 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
16 | +# See the License for the specific language governing permissions and | |
17 | +# limitations under the License. | |
18 | +# | |
19 | + | |
20 | +doc_url = 'https://hub.docker.com/r/library/docker/' | |
21 | + | |
22 | +include_recipe 'docker-grid::compose' | |
23 | + | |
24 | +app_dir = node['docker-grid']['dind-compose']['app_dir'] | |
25 | +[ | |
26 | + app_dir, | |
27 | +].each {|dir| | |
28 | + resources(directory: dir) rescue directory dir do | |
29 | + owner 'root' | |
30 | + group 'root' | |
31 | + mode '0755' | |
32 | + recursive true | |
33 | + end | |
34 | +} | |
35 | + | |
36 | +config_srvs = node['docker-grid']['dind-compose']['config']['services'] | |
37 | +override_config_srvs = node.override['docker-grid']['dind-compose']['config']['services'] | |
38 | +#force_override_config_srvs = node.force_override['docker-grid']['dind-compose']['config']['services'] | |
39 | + | |
40 | +command = config_srvs['dind']['command'].to_a | |
41 | +vols = config_srvs['dind']['volumes'].to_a | |
42 | + | |
43 | +data_dir = node['docker-grid']['dind-compose']['data_dir'] | |
44 | +if !data_dir.nil? && !data_dir.empty? | |
45 | + directory data_dir do | |
46 | + owner 'root' | |
47 | + group 'root' | |
48 | + mode '0711' | |
49 | + recursive true | |
50 | + end | |
51 | + | |
52 | + vols.push("#{data_dir}:/var/lib/docker") | |
53 | +end | |
54 | + | |
55 | +result = shell_out("docker info | grep 'Storage Driver: ' | awk -F': ' '{print $2}'") | |
56 | +if result.exitstatus.zero? && !result.stdout.chomp.empty? \ | |
57 | + && command.none? {|cmd| cmd =~ /^--storage-driver=.+/ } | |
58 | + command.push("--storage-driver=#{result.stdout.chomp}") | |
59 | +end | |
60 | + | |
61 | +# reset vlumes array. | |
62 | +override_config_srvs['dind']['command'] = command unless command.empty? | |
63 | +override_config_srvs['dind']['volumes'] = vols unless vols.empty? | |
64 | + | |
65 | +[ | |
66 | + 'docker-compose.yml', | |
67 | +].each {|conf_file| | |
68 | + template "#{app_dir}/#{conf_file}" do | |
69 | + source "opt/docker-compose/app/docker-in-docker/#{conf_file}" | |
70 | + owner 'root' | |
71 | + group 'root' | |
72 | + mode '0644' | |
73 | + end | |
74 | +} | |
75 | + | |
76 | +log <<-"EOM" | |
77 | +Note: You must execute the following command manually. | |
78 | + See #{doc_url} | |
79 | + * Start: | |
80 | + $ cd #{app_dir} | |
81 | + $ docker-compose up -d | |
82 | + * Stop | |
83 | + $ docker-compose down | |
84 | +EOM |
@@ -32,7 +32,7 @@ if !override_apt_line.nil? && !override_apt_line.empty? \ | ||
32 | 32 | end |
33 | 33 | enable_new_repo = node['docker-grid']['dockerproject']['enable_new_repo'] |
34 | 34 | docker_ver = node['docker-grid']['engine']['version'] |
35 | -docker_ver = '' if docker_ver.nil? | |
35 | +docker_ver = '' if docker_ver.nil? || docker_ver == 'latest' | |
36 | 36 | storage_driver = node['docker-grid']['engine']['storage-driver'] |
37 | 37 | userns_remap = node['docker-grid']['engine']['userns-remap'] |
38 | 38 |
@@ -96,6 +96,10 @@ if !userns_remap.nil? && !userns_remap.empty? | ||
96 | 96 | append_subusers([remap_user], notifies_conf) |
97 | 97 | end |
98 | 98 | |
99 | +file '/etc/systemd/system/docker.service.d/override.conf' do | |
100 | + action :nothing | |
101 | +end | |
102 | + | |
99 | 103 | bash 'clean_up_docker0_bridge' do |
100 | 104 | code <<-"EOH" |
101 | 105 | if brctl show | grep docker0; then |
@@ -165,6 +169,7 @@ when 'rhel' | ||
165 | 169 | ].each {|pkg| |
166 | 170 | resources(package: pkg) rescue package pkg do |
167 | 171 | action platform_family == 'debian' ? :purge : :remove |
172 | + notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately | |
168 | 173 | notifies :run, 'bash[clean_up_docker0_bridge]', :immediately |
169 | 174 | end |
170 | 175 | } |
@@ -187,14 +192,11 @@ when 'rhel' | ||
187 | 192 | ].each {|pkg| |
188 | 193 | resources(package: pkg) rescue package pkg do |
189 | 194 | action platform_family == 'debian' ? :purge : :remove |
195 | + notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately | |
190 | 196 | notifies :run, 'bash[clean_up_docker0_bridge]', :immediately |
191 | 197 | end |
192 | 198 | } |
193 | 199 | |
194 | - file '/etc/systemd/system/docker.service.d/override.conf' do | |
195 | - action :delete | |
196 | - end | |
197 | - | |
198 | 200 | [ |
199 | 201 | 'docker', |
200 | 202 | ].each {|pkg| |
@@ -301,6 +303,7 @@ when 'debian' | ||
301 | 303 | |
302 | 304 | resources(package: pkg_name_removed) rescue package pkg_name_removed do |
303 | 305 | action platform_family == 'debian' ? :purge : :remove |
306 | + notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately | |
304 | 307 | notifies :run, 'bash[clean_up_docker0_bridge]', :immediately |
305 | 308 | end |
306 | 309 |
@@ -0,0 +1,7 @@ | ||
1 | +<% | |
2 | +config = node['docker-grid']['dind-compose']['config'] | |
3 | + | |
4 | +require 'yaml' | |
5 | +yaml_str = config.to_hash.to_yaml | |
6 | +-%> | |
7 | +<%= yaml_str %> |
@@ -1 +1 @@ | ||
1 | -0.5.4 | |
1 | +0.5.5 |
@@ -34,7 +34,8 @@ override_attributes( | ||
34 | 34 | }, |
35 | 35 | 'compose' => { |
36 | 36 | #'skip_setup' => true, # default: false |
37 | - 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.0', | |
37 | + 'auto_upgrade' => true, # default: false | |
38 | + 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1', | |
38 | 39 | }, |
39 | 40 | 'engine' => { |
40 | 41 | 'version' => '', # latest |
@@ -41,6 +41,11 @@ override_attributes( | ||
41 | 41 | #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-zesty main', |
42 | 42 | #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-xenial main', |
43 | 43 | }, |
44 | + 'compose' => { | |
45 | + #'skip_setup' => true, # default: false | |
46 | + 'auto_upgrade' => true, # default: false | |
47 | + 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1', | |
48 | + }, | |
44 | 49 | 'engine' => { |
45 | 50 | # new package: `docker-ce`` |
46 | 51 | 'version' => '17.09.0~ce-0~ubuntu', |