docker.rb 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. module Docs
  2. class Docker < UrlScraper
  3. self.type = 'simple'
  4. self.links = {
  5. home: 'https://docker.com/',
  6. code: 'https://github.com/docker/docker'
  7. }
  8. options[:trailing_slash] = true
  9. options[:fix_urls] = ->(url) do
  10. url.sub! %r{\.md/?(?=#|\z)}, '/'
  11. url.sub! '/index/', '/'
  12. url
  13. end
  14. options[:attribution] = <<-HTML
  15. &copy; 2019 Docker, Inc.<br>
  16. Licensed under the Apache License, Version 2.0.<br>
  17. Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc. in the United States and/or other countries.<br>
  18. Docker, Inc. and other parties may also have trademark rights in other terms used herein.
  19. HTML
  20. version '19' do
  21. self.release = '19.03'
  22. self.base_url = "https://docs.docker.com/"
  23. html_filters.push 'docker/entries', 'docker/clean_html'
  24. options[:container] = '.wrapper .container-fluid .row'
  25. options[:only_patterns] = [/\Aget-started\//, /\Aengine\//, /\Acompose\//, /\Amachine\//, /\Anotary\//]
  26. options[:skip_patterns] = [/\Aengine\/api\/v/, /glossary/, /docker-ee/]
  27. options[:replace_paths] = {
  28. 'install/linux/ubuntu/' => 'install/linux/docker-ce',
  29. 'get-started/part1' => 'get-started',
  30. 'engine/installation/' => 'install',
  31. 'engine/installation/linux/linux-postinstall/' => 'install/linux',
  32. 'compose/overview/' => 'compose',
  33. 'docker-cloud/' => 'docker-hub',
  34. 'datacenter/install/linux/' => 'ee',
  35. 'engine/userguide/' => 'config/daemon',
  36. 'engine/admin/' => 'config/daemon',
  37. 'opensource/get-help/' => 'opensource',
  38. 'engine/tutorials/dockerimages/' => 'get-started',
  39. 'engine/admin/volumes/bind-mounts/' => 'storage',
  40. 'engine/tutorials/dockervolumes/' => 'storage',
  41. 'engine/admin/volumes/volumes/' => 'storage',
  42. 'engine/userguide/labels-custom-metadata/' => 'config',
  43. 'engine/userguide/eng-image/multistage-build/' => 'develop/develop-images',
  44. 'engine/swarm/networking/' => 'network',
  45. 'engine/admin/resource_constraints/' => 'config/containers',
  46. 'engine/admin/logging/overview/' => 'config/containers/logging',
  47. 'engine/userguide/eng-image/dockerfile_best-practices/' => 'develop/develop-images',
  48. 'engine/tutorials/dockerrepos/' => 'get-started',
  49. 'engine/userguide/networking/' => 'network',
  50. 'engine/userguide/networking/get-started-overlay/' => 'network',
  51. 'engine/reference/commandline/swarm_join_token/' => 'engine/reference/commandline',
  52. 'engine/understanding-docker/' => 'engine',
  53. 'engine/userguide/dockervolumes/' => 'storage',
  54. 'engine/installation/binaries/' => 'install/linux/docker-ce',
  55. 'engine/userguide/networking/default_network/dockerlinks/' => 'network',
  56. 'engine/reference/api/' => 'develop/sdk',
  57. 'engine/admin/systemd/' => 'config/daemon',
  58. 'engine/userguide/storagedriver/imagesandcontainers/' => 'storage/storagedriver',
  59. 'engine/api/' => 'develop/sdk',
  60. 'engine/userguide/networking/get-started-overlay' => 'network',
  61. 'engine/userguide/networking/overlay-security-model/' => 'network',
  62. 'engine/installation/linux/docker-ce/binaries/' => 'install/linux/docker-ce',
  63. 'engine/admin/volumes/' => 'storage/volumes/',
  64. 'engine/userguide/networking//' => 'network',
  65. 'engine/reference/commandline' => 'engine/reference/commandline/docker',
  66. 'engine/reference/commandline/' => 'engine/reference/commandline/docker/',
  67. }
  68. end
  69. version '18' do
  70. self.release = '18.09'
  71. self.base_url = "https://docs.docker.com/v#{release}/"
  72. html_filters.push 'docker/entries', 'docker/clean_html'
  73. options[:container] = '.wrapper .container-fluid .row'
  74. options[:only_patterns] = [/\Aget-started\//, /\Aengine\//, /\Acompose\//, /\Amachine\//, /\Anotary\//]
  75. options[:skip_patterns] = [/\Aengine\/api\/v/, /glossary/, /docker-ee/]
  76. options[:replace_paths] = {
  77. 'install/linux/ubuntu/' => 'install/linux/docker-ce',
  78. 'get-started/part1' => 'get-started',
  79. 'engine/installation/' => 'install',
  80. 'engine/installation/linux/linux-postinstall/' => 'install/linux',
  81. 'compose/overview/' => 'compose',
  82. 'datacenter/install/linux/' => 'ee',
  83. 'engine/userguide/' => 'config/daemon',
  84. 'engine/admin/' => 'config/daemon',
  85. 'opensource/get-help/' => 'opensource',
  86. 'engine/tutorials/dockerimages/' => 'get-started',
  87. 'engine/admin/volumes/bind-mounts/' => 'storage',
  88. 'engine/tutorials/dockervolumes/' => 'storage',
  89. 'engine/admin/volumes/volumes/' => 'storage',
  90. 'engine/userguide/labels-custom-metadata/' => 'config',
  91. 'engine/reference/api/' => 'develop/sdk',
  92. 'engine/userguide/eng-image/multistage-build/' => 'develop/develop-images',
  93. 'engine/swarm/networking/' => 'network',
  94. 'engine/admin/resource_constraints/' => 'config/containers',
  95. 'engine/admin/logging/overview/' => 'config/containers/logging',
  96. 'engine/userguide/eng-image/dockerfile_best-practices/' => 'develop/develop-images',
  97. 'engine/tutorials/dockerrepos/' => 'get-started',
  98. 'engine/userguide/networking/' => 'network',
  99. 'engine/userguide/networking/get-started-overlay/' => 'network',
  100. 'engine/understanding-docker/' => 'engine',
  101. 'engine/reference/commandline/swarm_join_token/' => 'engine/reference/commandline',
  102. 'engine/userguide/dockervolumes/' => 'storage',
  103. 'engine/admin/systemd/' => 'config/daemon',
  104. 'engine/userguide/storagedriver/imagesandcontainers/' => 'storage/storagedriver',
  105. 'engine/installation/binaries/' => 'install/linux/docker-ce',
  106. 'engine/userguide/networking/default_network/dockerlinks/' => 'network',
  107. 'engine/userguide/networking/overlay-security-model/' => 'network',
  108. 'engine/userguide/networking/get-started-overlay' => 'network',
  109. 'engine/api/' => 'develop/sdk',
  110. 'engine/installation/linux/docker-ce/binaries/' => 'install/linux/docker-ce',
  111. 'engine/admin/volumes/' => 'storage/volumes/',
  112. 'engine/userguide/networking//' => 'network',
  113. 'engine/reference/commandline' => 'engine/reference/commandline/docker',
  114. 'engine/reference/commandline/' => 'engine/reference/commandline/docker/',
  115. }
  116. end
  117. version '17' do
  118. self.release = '17.12'
  119. self.base_url = "https://docs.docker.com/v#{release}/"
  120. html_filters.push 'docker/entries', 'docker/clean_html'
  121. options[:container] = '.wrapper .container-fluid .row'
  122. options[:only_patterns] = [/\Aget-started\//, /\Aengine\//, /\Acompose\//, /\Amachine\//, /\Anotary\//]
  123. options[:skip_patterns] = [/\Aengine\/api\/v/, /glossary/, /docker-ee/]
  124. options[:replace_paths] = {
  125. 'get-started/part1' => 'get-started',
  126. 'engine/installation/' => 'install',
  127. 'engine/installation/linux/linux-postinstall/' => 'install/linux',
  128. 'opensource/get-help/' => 'opensource',
  129. 'engine/admin/volumes/volumes/' => 'storage',
  130. 'engine/tutorials/dockerimages/' => 'get-started',
  131. 'engine/admin/volumes/bind-mounts/' => 'storage',
  132. 'engine/tutorials/dockervolumes/' => 'storage',
  133. 'datacenter/install/aws/' => 'docker-for-aws',
  134. 'engine/userguide/' => 'config/daemon',
  135. 'engine/admin/' => 'config/daemon',
  136. 'engine/userguide/labels-custom-metadata/' => 'config',
  137. 'engine/userguide/eng-image/multistage-build/' => 'develop/develop-images',
  138. 'engine/swarm/networking/' => 'network',
  139. 'engine/admin/resource_constraints/' => 'config/containers',
  140. 'engine/admin/logging/overview/' => 'config/containers/logging',
  141. 'engine/understanding-docker/' => 'engine',
  142. 'engine/userguide/eng-image/dockerfile_best-practices/' => 'develop/develop-images',
  143. 'engine/tutorials/dockerrepos/' => 'get-started',
  144. 'engine/userguide/networking/' => 'network',
  145. 'engine/reference/commandline/swarm_join_token/' => 'edge/engine/reference/commandline',
  146. 'engine/userguide/networking/get-started-overlay/' => 'network',
  147. 'engine/userguide/dockervolumes/' => 'storage',
  148. 'engine/installation/binaries/' => 'install/linux/docker-ce',
  149. 'engine/userguide/networking/default_network/dockerlinks/' => 'network',
  150. 'engine/reference/api/' => 'develop/sdk',
  151. 'engine/admin/live-restore/' => 'config/containers',
  152. 'engine/api/' => 'develop/sdk',
  153. 'engine/userguide/networking/get-started-overlay' => 'network',
  154. 'security/security/' => 'engine/security',
  155. 'engine/installation/linux/docker-ce/binaries/' => 'install/linux/docker-ce',
  156. 'engine/reference/commandline/' => 'edge/engine/reference/commandline',
  157. 'engine/admin/systemd/' => 'config/daemon',
  158. 'engine/userguide/storagedriver/imagesandcontainers/' => 'storage/storagedriver',
  159. 'engine/userguide/networking/overlay-security-model/' => 'network',
  160. 'engine/admin/volumes/' => 'storage/volumes/',
  161. 'engine/userguide/networking//' => 'network',
  162. }
  163. end
  164. module OldOptions
  165. def self.included(klass)
  166. klass.options[:only_patterns] = [/\Aengine\//, /\Acompose\//, /\Amachine\//]
  167. klass.options[:skip_patterns] = [/\Aengine\/api\/v/, /\Aengine\/installation/]
  168. klass.options[:skip] = %w(
  169. /
  170. engine/userguide/
  171. engine/examples/
  172. engine/reference/
  173. engine/reference/api/
  174. engine/reference/api/docker_remote_api_v1.24/
  175. engine/getstarted/linux_install_help/
  176. machine/reference/
  177. machine/drivers/
  178. machine/examples/
  179. compose/reference/
  180. )
  181. klass.options[:replace_paths] = {
  182. 'engine/userguide/networking/dockernetworks/' => 'engine/userguide/networking/',
  183. 'engine/userguide/dockervolumes/' => 'engine/tutorials/dockervolumes/',
  184. 'engine/reference/logging/overview/' => 'engine/admin/logging/overview/',
  185. 'engine/reference/commandline/daemon/' => 'engine/reference/commandline/dockerd/',
  186. 'engine/reference/commandline/' => 'engine/reference/commandline/docker/',
  187. 'engine/reference/api/docker_remote_api/' => 'engine/api/',
  188. 'engine/swarm/how-swarm-mode-works/' => 'engine/swarm/how-swarm-mode-works/nodes/',
  189. 'engine/tutorials/dockerizing/' => 'engine/getstarted/step_one/',
  190. 'engine/tutorials/usingdocker/' => 'engine/getstarted/step_three/',
  191. 'engine/tutorials/dockerimages/' => 'engine/getstarted/step_four/',
  192. 'engine/tutorials/dockerrepos/' => 'engine/getstarted/step_six/'
  193. }
  194. end
  195. end
  196. version '1.13' do
  197. include OldOptions
  198. self.release = '1.13'
  199. self.base_url = "https://docs.docker.com/v#{self.version}/"
  200. html_filters.push 'docker/entries_old', 'docker/clean_html_old'
  201. options[:container] = '.container-fluid .row'
  202. end
  203. version '1.12' do
  204. include OldOptions
  205. self.release = '1.12'
  206. self.base_url = "https://docs.docker.com/v#{self.version}/"
  207. html_filters.push 'docker/entries_old', 'docker/clean_html_old'
  208. options[:container] = '.container-fluid .row'
  209. end
  210. version '1.11' do
  211. include OldOptions
  212. self.release = '1.11'
  213. self.base_url = "https://docs.docker.com/v#{self.version}/"
  214. html_filters.push 'docker/entries_very_old', 'docker/clean_html_very_old'
  215. options[:container] = '#docs'
  216. options[:only_patterns] << /\Aswarm\//
  217. end
  218. version '1.10' do
  219. include OldOptions
  220. self.release = '1.10'
  221. self.base_url = "https://docs.docker.com/v#{self.version}/"
  222. html_filters.push 'docker/entries_very_old', 'docker/clean_html_very_old'
  223. options[:container] = '#docs'
  224. options[:only_patterns] << /\Aswarm\//
  225. end
  226. def get_latest_version(opts)
  227. doc = fetch_doc('https://docs.docker.com/', opts)
  228. label = doc.at_css('.nav-container button.dropdown-toggle').content.strip
  229. label.scan(/([0-9.]+)/)[0][0]
  230. end
  231. end
  232. end