2 # Cookbook Name:: docker-grid
5 # Copyright 2016-2017, whitestar
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
11 # http://www.apache.org/licenses/LICENSE-2.0
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.
20 platform = node['platform']
22 default['docker-grid']['install_flavor'] = 'dockerproject' # or 'os-repository'
23 default['docker-grid']['dockerproject']['enable_new_repo'] = false
25 force_override['docker-grid']['dockerproject']['apt_new_repo_url'] = "https://download.docker.com/linux/#{platform}"
26 force_override['docker-grid']['dockerproject']['apt_old_repo_url'] = 'https://apt.dockerproject.org/repo'
27 default['docker-grid']['dockerproject']['package_name'] \
28 = node['docker-grid']['dockerproject']['enable_new_repo'] ? 'docker-ce' : 'docker-engine'
30 if node['docker-grid']['dockerproject']['enable_new_repo']
31 node['docker-grid']['dockerproject']['apt_new_repo_url']
33 node['docker-grid']['dockerproject']['apt_old_repo_url']
35 default['docker-grid']['apt_repo'] = {
36 'url' => apt_repo_url,
37 'override_apt_line' => '', # e.g. 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
39 'keyserver' => 'hkp://p80.pool.sks-keyservers.net:80',
40 'recv-keys' => '58118E89F3A912897C070ADBF76221572C52609D',
43 default['docker-grid']['yum_repo'] = {
44 'baseurl' => 'https://yum.dockerproject.org/repo/main/centos/$releasever/',
46 'gpgkey' => 'https://yum.dockerproject.org/gpg',
49 default['docker-grid']['compose']['install_flavor'] = 'dockerproject' # or 'os-repository'
50 default['docker-grid']['compose']['skip_setup'] = false
51 # dockerproject: direct download.
52 # Note: non-support by this cookbook.
53 # os-repository (Ubuntu): http://packages.ubuntu.com/search?keywords=docker-compose&searchon=names
54 # os-repository (CentOS): none.
55 default['docker-grid']['compose']['auto_upgrade'] = false
56 # latest: 'https://github.com/docker/compose/releases/download/1.17.1'
57 default['docker-grid']['compose']['release_base_url'] = 'https://github.com/docker/compose/releases/download/1.9.0'
58 default['docker-grid']['compose']['release_url'] = "#{node['docker-grid']['compose']['release_base_url']}/docker-compose-#{node['kernel']['name']}-#{node['kernel']['machine']}"
59 default['docker-grid']['compose']['home_dir'] = '/opt/docker-compose'
60 default['docker-grid']['compose']['app_dir'] = "#{node['docker-grid']['compose']['home_dir']}/app"
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
69 'image' => 'docker:stable-dind',
72 #'--storage-driver=overlay2', # same as host Docker's storage driver
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",
84 default['docker-grid']['engine']['skip_setup'] = false
85 # dockerproject: 17.03.1.ce-1, 1.13.1-1, 1.12.6-1, 1.11.2-1, 1.10.3-1
86 # os-repository: yum list docker
87 # http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/
88 default['docker-grid']['engine']['version_on_centos'] = '1.11.2-1'
89 # dockerproject: 17.03.1~ce-0, 1.13.1-0, 1.12.6-0, 1.11.2-0
90 default['docker-grid']['engine']['version_on_debian'] = '17.03.1~ce-0'
91 # os-repository: http://packages.ubuntu.com/search?keywords=docker.io&searchon=names
92 default['docker-grid']['engine']['version_on_ubuntu'] = '1.11.2-0'
94 # '' (empty) or 'latest' version -> latest version
96 when 'centos', 'redhat'
97 version_on_centos = node['docker-grid']['engine']['version_on_centos']
98 if !version_on_centos.nil? && !version_on_centos.empty? && version_on_centos != 'latest'
99 version_on_centos = "#{version_on_centos}.el#{node['platform_version'].to_i}.#{node['platform']}"
102 version_on_debian = node['docker-grid']['engine']['version_on_debian']
103 if !version_on_debian.nil? && !version_on_debian.empty? && version_on_debian != 'latest'
104 version_on_debian = \
105 if node['docker-grid']['install_flavor'] == 'dockerproject'
106 if Gem::Version.create(version_on_debian.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
107 "#{version_on_debian}~debian-#{node['lsb']['codename']}"
109 "#{version_on_debian}~#{node['lsb']['codename']}"
114 version_on_ubuntu = node['docker-grid']['engine']['version_on_ubuntu']
115 if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? && version_on_ubuntu != 'latest'
116 version_on_ubuntu = \
117 if node['docker-grid']['install_flavor'] == 'dockerproject'
118 if Gem::Version.create(version_on_ubuntu.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
119 "#{version_on_ubuntu}~ubuntu-#{node['lsb']['codename']}"
121 "#{version_on_ubuntu}~#{node['lsb']['codename']}"
124 # e.g. 1.12.3-0ubuntu4~16.10.2, 1.12.3-0ubuntu4~16.04.2
130 # '' (empty) or 'latest' version -> latest version
131 default['docker-grid']['engine']['version'] = node.value_for_platform(
132 ['centos', 'redhat'] => {
133 'default' => version_on_centos,
136 'default' => version_on_debian,
139 'default' => version_on_ubuntu,
142 # overlay2: Docker >= 1.12, Kernel >= 4.0
143 default['docker-grid']['engine']['storage-driver_on_centos'] = 'overlay'
144 default['docker-grid']['engine']['storage-driver_on_debian'] = 'overlay2'
145 default['docker-grid']['engine']['storage-driver_on_ubuntu'] = 'aufs'
146 default['docker-grid']['engine']['storage-driver'] = node.value_for_platform(
147 ['centos', 'redhat'] => {
148 'default' => node['docker-grid']['engine']['storage-driver_on_centos'],
151 'default' => node['docker-grid']['engine']['storage-driver_on_debian'],
154 'default' => node['docker-grid']['engine']['storage-driver_on_ubuntu'],
157 default['docker-grid']['engine']['userns-remap'] = nil # default: inactive
158 # CentOS default: '--selinux-enabled --log-driver=journald --signature-verification=false'
159 default['docker-grid']['engine']['daemon_extra_options'] = '-H fd://'
160 default['docker-grid']['engine']['users_allow'] = []
162 # dockerproject: container image from https://hub.docker.com/
163 # Note: non-support by this cookbook.
164 # os-repository (Ubuntu): http://packages.ubuntu.com/search?keywords=docker-registry&searchon=names
165 # os-repository (CentOS): http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/
166 default['docker-grid']['registry']['with_ssl_cert_cookbook'] = false
167 # If node['docker-grid']['registry']['with_ssl_cert_cookbook'] is true,
168 # node['docker-grid']['registry']['docker-compose']['config']
169 # are overridden by the following 'ca_name' and 'common_name' attributes.
170 #default['docker-grid']['registry']['ssl_cert']['ca_name'] = nil
171 default['docker-grid']['registry']['ssl_cert']['common_name'] = node['fqdn']
172 # See https://docs.docker.com/registry/configuration/
173 rootdirectory = node.value_for_platform(
174 ['centos', 'redhat'] => {
175 'default' => '/var/lib/registry',
177 ['debian', 'ubuntu'] => {
178 'default' => '/var/lib/docker-registry',
181 default['docker-grid']['registry']['server']['config'] = {
185 'service' => 'registry',
190 # NOTE: Formerly, blobdescriptor was known as layerinfo.
191 # While these are equivalent, layerinfo has been deprecated.
192 'blobdescriptor' => 'inmemory',
195 'rootdirectory' => rootdirectory,
201 'X-Content-Type-Options' => [
207 # 'remoteurl' => 'https://registry-1.docker.io',
217 default['docker-grid']['registry']['docker-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/registry"
218 # ./docker-compose.yml
219 default['docker-grid']['registry']['docker-compose']['config_format_version'] = '1'
220 default['docker-grid']['registry']['docker-compose']['service_name'] = 'registry'
221 default['docker-grid']['registry']['docker-compose']['host_data_volume'] = '/var/lib/docker-registry'
222 service_name = node['docker-grid']['registry']['docker-compose']['service_name']
224 # Version 1 docker-compose format
226 'restart' => 'always',
227 'image' => 'registry:2',
232 # 'REGISTRY_HTTP_TLS_CERTIFICATE' => '/certs/domain.crt',
233 # 'REGISTRY_HTTP_TLS_KEY' => '/certs/domain.key',
234 # 'REGISTRY_AUTH' => 'htpasswd',
235 # 'REGISTRY_AUTH_HTPASSWD_PATH' => '/auth/htpasswd',
236 # 'REGISTRY_AUTH_HTPASSWD_REALM' => 'Registry Realm',
239 # #'./etc/config.yml:/etc/docker/registry/config.yml', # Overriding the entire configuration file
240 # "#{node['docker-grid']['registry']['docker-compose']['host_data_volume']}:/var/lib/registry",
241 # '/path/certs:/certs',
242 # '/path/auth:/auth',
247 # Version 2 docker-compose format
249 'services' => version_1_config,
251 default['docker-grid']['registry']['docker-compose']['config'] = \
252 node['docker-grid']['registry']['docker-compose']['config_format_version'] == '2' ? version_2_config : version_1_config
254 # See: https://docs.docker.com/registry/configuration/#/overriding-the-entire-configuration-file
255 default['docker-grid']['registry']['docker-compose']['registry-config'] = nil