From 977f4409ffcf929d140b1f1b4fbe1d3819593be1 Mon Sep 17 00:00:00 2001 From: krutkurt <64346958+krutkurt@users.noreply.github.com> Date: Tue, 10 Jan 2023 22:18:52 +0100 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 7d5c7c88676ac240b6b037f868c04b33f738d82a Author: Nicolas De Loof Date: Tue Dec 6 12:48:36 2022 +0100 extra_host can be declared as a list or mapping Signed-off-by: Nicolas De Loof commit 66d837f0a790bbede2204deaf065ee1d6baab0d1 Author: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Mon Oct 17 09:59:15 2022 +0200 improve wording on `published` port binding attribute Co-authored-by: Eric Hripko Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> commit 03bf63cdb2c32d65fbfc41914a80ccbdbb6c2c01 Author: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Sat Sep 3 16:53:37 2022 +0200 mark explicitly published port as string to avoid user confusion align the specification between short and long port syntax Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> commit 302cbc20096fcdb4bd9e814076c0099f179c0b4f Author: Laura Brehm Date: Fri Dec 23 00:31:05 2022 +0000 Add support of `uts` in service definition Signed-off-by: Laura Brehm commit c0a8366ae7cdef70aa782d3596248e60ad661c8d Author: Nicolas De Loof Date: Tue Dec 20 09:01:30 2022 +0100 add missing build.platform in schema Signed-off-by: Nicolas De Loof commit 81229b935190f0905b7ccc1d48eb39a224a658cf Author: Nicolas De Loof Date: Fri Dec 16 15:03:59 2022 +0100 introduce `cgroup=host|private` Signed-off-by: Nicolas De Loof commit d93fd030367f824c7d78e06cfc897dcc60a1fcb6 Author: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Mon Dec 19 18:14:49 2022 +0100 add privileged attribut to build section Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> commit 1eb16a20675324b35258b74b8375b48399893eab Merge: df82d22 61c3e3b Author: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Wed Nov 16 14:42:10 2022 +0100 Merge pull request #281 from epuronta/secret-target-tweak Clarify secret.target absolute path syntax commit 61c3e3b98eff743f29c9232fa8223d670748e4de Author: Eetu Purontaus Date: Tue Oct 25 11:40:43 2022 +0300 Clarify secret.target absolute path syntax Signed-off-by: Eetu Purontaus commit df82d220618e07aed04829edb41273cb0d73f640 Merge: bf599fe e2eabd9 Author: Eric Hripko Date: Sat Sep 3 15:14:21 2022 +0100 Merge pull request #266 from AkihiroSuda/fix-darwin-platform platform: s/osx/darwin/ commit e2eabd90521f711c573653a8ba00f9509b7f4e3f Author: Akihiro Suda Date: Wed Jul 6 13:32:49 2022 +0900 platform: s/osx/darwin/ The platform string conforms to the Go/OCI convention. https://github.com/opencontainers/image-spec/blob/v1.0.2/image-index.md Signed-off-by: Akihiro Suda commit bf599feb867788ae4786b8dff5e04d9468554b18 Merge: e68e492 fbb656a Author: Eric Hripko Date: Sat Sep 3 14:49:27 2022 +0100 Merge pull request #271 from nopdotcom/typo-configs-short-syntax-example-rev2 Typo: missing line in configs "short syntax” example commit fbb656a4821829d0d425708b33c021b9f13cecaf Merge: 7f4904e e68e492 Author: Eric Hripko Date: Sat Sep 3 14:49:15 2022 +0100 Merge branch 'master' into typo-configs-short-syntax-example-rev2 commit e68e492a71f74bf6c330f823f808f31cac116e93 Merge: 3ce7e88 0c9e74e Author: Eric Hripko Date: Sat Sep 3 14:44:53 2022 +0100 Merge pull request #258 from compose-spec/dependabot/bundler/nokogiri-1.13.6 Bump nokogiri from 1.11.7 to 1.13.6 commit 0c9e74ecfa92d482d0bc9aaec372bc09a8ed6314 Merge: 3fdf561 3ce7e88 Author: Eric Hripko Date: Sat Sep 3 14:43:32 2022 +0100 Merge branch 'master' into dependabot/bundler/nokogiri-1.13.6 commit 3ce7e880e926d28680e43a2cdb256a3d14a6a11d Merge: f8ddb4f 066ce4e Author: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Thu Sep 1 17:49:45 2022 +0200 Merge pull request #273 from milas/misc-typo-fixes chore: typo/link fixes backported from docker.github.io commit 066ce4e8556e6b1eb99ace7ec3c93c37a56356c2 Author: Milas Bowman Date: Thu Sep 1 10:21:03 2022 -0400 chore: typo/link fixes backported from docker.github.io The version of the spec that's hosted on the public Docker docs site had some manual clean up done on it that wasn't made here. Merging the changes back here to get them back into alignment. See https://github.com/docker/docker.github.io/blob/master/compose/compose-file/index.md Signed-off-by: Milas Bowman commit 7f4904e97a29218d9fc81b7c9f151886604fcc26 Author: Jay Carlson Date: Mon Jul 25 13:31:06 2022 -0700 Typo: missing line in configs "short syntax" example The paragraph above says "grant the `redis` service access to the `my_config` and `my_other_config` configs." While `my_other_config` is defined, it is not added to the `redis` `configs` list. I suspect this was a merge error or something. To ensure I wasn't going crazy, I verified that at least Docker Compose v2 requires this line for the second config to be materialized inside the service. Signed-off-by: Jay Carlson commit f8ddb4f1e383cc4cbb4140b73d4f88eda044f5c9 Merge: e079968 f79776a Author: Guillaume Lours Date: Tue Aug 2 19:07:40 2022 +0200 Merge pull request #268 from compose-spec/dependabot/bundler/tzinfo-1.2.10 Bump tzinfo from 1.2.9 to 1.2.10 commit f79776ac348e28ac9480e92cef88c0e946fd6b31 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri Jul 22 09:09:33 2022 +0000 Bump tzinfo from 1.2.9 to 1.2.10 Bumps [tzinfo](https://github.com/tzinfo/tzinfo) from 1.2.9 to 1.2.10. - [Release notes](https://github.com/tzinfo/tzinfo/releases) - [Changelog](https://github.com/tzinfo/tzinfo/blob/master/CHANGES.md) - [Commits](https://github.com/tzinfo/tzinfo/compare/v1.2.9...v1.2.10) --- updated-dependencies: - dependency-name: tzinfo dependency-type: indirect ... Signed-off-by: dependabot[bot] commit e079968c815542e1d2961405d02d3f50a32a914e Merge: a5cd401 59963d0 Author: Guillaume Lours Date: Tue Aug 2 19:04:46 2022 +0200 Merge pull request #267 from AkihiroSuda/build-platforms build: add platforms commit 59963d0dc575d500d1e5951c048359d1f1d7810a Author: Akihiro Suda Date: Wed Jul 6 14:59:18 2022 +0900 build: add platforms Closes issue 120 Signed-off-by: Akihiro Suda commit 3fdf5613a63b5e96a87a32f008fb9c9d5855d705 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu May 19 03:25:04 2022 +0000 Bump nokogiri from 1.11.7 to 1.13.6 Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.7 to 1.13.6. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.7...v1.13.6) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] commit a5cd401cbdca20f044d11a05707d206dbbacf22c Author: Nicolas De Loof Date: Thu Jun 2 08:18:22 2022 +0200 Add Guillaume Lours as a maintainer Signed-off-by: Nicolas De Loof commit 5260c1bc8ee5e93ce88412bb460924e9535d9080 Author: Nicolas De Loof Date: Wed May 18 08:25:28 2022 +0200 introduce ability to define secret by environment variable Signed-off-by: Nicolas De Loof commit b9b1222d6a77a5c62c8a6d833b9412b8c6a59934 Merge: 54bf07e 2cad342 Author: Guillaume Lours Date: Fri May 13 19:37:44 2022 +0200 Merge pull request #255 from glours/add-tags-to-build-section Add support of tags in the build section commit 2cad342441d69e5e30ed7e8204b15b72b2ee55c6 Author: Guillaume Lours Date: Fri May 13 19:33:05 2022 +0200 Fix typo in tag property description of build section Co-authored-by: Eric Hripko Signed-off-by: Guillaume Lours commit 79ce644422e576d80313883d00a7e7a2b0f67895 Author: Guillaume Lours Date: Mon May 9 15:16:16 2022 +0200 use list notation for tags in build section Co-authored-by: Ulysses Souza Signed-off-by: Guillaume Lours commit 77d99aaaab6ef5ea40f9675c8bc4f71cd376fd8e Author: Guillaume Lours Date: Wed May 4 12:12:14 2022 +0200 update the tags example to match the list definition Co-authored-by: Ulysses Souza Signed-off-by: Guillaume Lours commit 6b017e7b94c575a7629ac84af85590d46f6c75c2 Author: Guillaume Lours Date: Mon May 2 17:18:35 2022 +0200 Add support of tags in the build section Signed-off-by: Guillaume Lours commit 54bf07e8d00720356842172abfea72f5ab5b059a Merge: 6c1f542 f7a1b92 Author: Ulysses Souza Date: Wed May 4 11:01:50 2022 +0200 Merge pull request #252 from ndeloof/tmpfs_mode introduce `tmpfs.mode` commit f7a1b920abbcf83cb402fd027bf060b9e47d3053 Author: Nicolas De Loof Date: Thu Apr 28 21:43:51 2022 +0200 introduce tmpfs.mode Signed-off-by: Nicolas De Loof commit 6c1f542a26f1c3041a2e5e9dbc592bacba7b717b Author: Guillaume Lours Date: Mon May 2 10:19:02 2022 +0200 update pull link in the no_cache section of build page Co-authored-by: Eric Hripko commit e754ead90a12323329b38e019cc7fe357c1d8b7b Author: Nicolas De Loof Date: Wed Mar 2 08:18:18 2022 +0100 introduce `no_cache` and `pull` to force a full rebuild Signed-off-by: Nicolas De Loof commit 846cabc70a98139a852d8bbee216ce911f0d6764 Author: Guillaume Lours Date: Thu Mar 10 12:32:16 2022 +0100 define a json ref for service secrets and confids properties Signed-off-by: Guillaume Lours commit a797a7b57dbbbf22f483f420b911fe3390e9ac7d Author: Guillaume Lours Date: Thu Mar 10 12:06:18 2022 +0100 Update when compose implementations should report an error with secrets build property Co-authored-by: Nicolas De loof Signed-off-by: Guillaume Lours commit cb27949dd2c7ade2eec5e12519806a1603826397 Author: Guillaume Lours Date: Thu Mar 10 09:44:00 2022 +0100 add secrets property to build section Signed-off-by: Guillaume Lours commit 24e199484660d847a79b3ce5eea5e9b63b7f2019 Author: Nicolas De Loof Date: Fri Apr 8 15:09:14 2022 +0200 External resources SHOULD not allow passing other attributes Signed-off-by: Nicolas De Loof commit b9bab6f7925ed05bdebc506773ec42edb6f89736 Author: Usha Mandya Date: Thu Mar 24 17:34:51 2022 +0000 Fix anchor references Signed-off-by: Usha Mandya commit 0c768bea2e06d5550bc5f390bebe1f830dca8756 Author: Nathan Weeks <1800812+nathanweeks@users.noreply.github.com> Date: Wed Mar 2 21:05:06 2022 -0500 Fix copy/paste config name typo in Configs section Signed-off-by: Nathan Weeks <1800812+nathanweeks@users.noreply.github.com> commit e13d6e4014654a7b15de70f9744d855c60234b27 Author: Guillaume Lours Date: Tue Mar 8 21:21:59 2022 +0100 fix typos and improvement of the ssh section readability Signed-off-by: Guillaume Lours commit 40f015a5406180cebda989b10469ac6f9109124e Author: Guillaume Lours Date: Tue Mar 8 14:17:04 2022 +0100 change ssh property to a simple collection (list or dict) Signed-off-by: Guillaume Lours commit 47572095abf58c885fcdb25d08709e7f041854bf Author: Guillaume Lours Date: Fri Mar 4 23:54:20 2022 +0100 change json spec of ssh type Signed-off-by: Guillaume Lours commit 91e55ad66c8b4177a22e6a60a8a04907660f0c01 Author: Guillaume Lours Date: Fri Mar 4 16:55:39 2022 +0100 remove the empty alias to the default ssh agent in the build section Signed-off-by: Guillaume Lours commit 239138c26cfe9866e69eb91d1fec16ddede1980e Author: Guillaume Lours Date: Thu Mar 3 15:50:57 2022 +0100 be more specific on the ssh format Signed-off-by: Guillaume Lours commit 08508335e115a4636e65540959c3d61ba32e97c8 Author: Guillaume Lours Date: Thu Mar 3 09:47:25 2022 +0100 change ssh type to string and update ssh section with contributors feebacks Signed-off-by: Guillaume Lours commit 0de6875830f04e4552e2e201ea7ad73323b7e4e9 Author: Guillaume Lours Date: Wed Mar 2 15:44:58 2022 +0100 simplify the syntaxt section of ssh property Signed-off-by: Guillaume Lours commit 757324d8076d16231d95908caed553988b17bc7c Author: Guillaume Lours Date: Wed Mar 2 15:11:20 2022 +0100 Add ssh definition to the service build section Signed-off-by: Guillaume Lours commit 4a914845d2031e70cce202e392df289bfe872022 Author: Hang Yan Date: Fri Oct 8 10:04:45 2021 +0800 Update field order in services Signed-off-by: Hang Yan commit ffd229434abaea1afacfd20940f5ae109c6cd0dd Author: Nicolas De Loof Date: Sun Nov 28 10:03:57 2021 +0100 unsupported cache-to must not fail compose build Signed-off-by: Nicolas De Loof commit f8791393815bee0613055fb20d90e26b0aa79815 Author: Nicolas De Loof Date: Mon Nov 8 13:59:54 2021 +0100 introduce cache-to Signed-off-by: Nicolas De Loof commit f3bc7a465e9ef7310df3b92adf1d683a2d03df71 Author: Matt Bussing <31907187+MattBussing@users.noreply.github.com> Date: Thu Dec 30 09:37:06 2021 -0600 fixing grammar mistake Signed-off-by: Matt Bussing commit 3a2731ebcc1ff84f0c02eb00a84cca8c8334f1af Merge: 1249d9e c10efda Author: Guillaume Lours Date: Tue Feb 15 14:11:44 2022 +0100 Merge pull request #228 from tvsaru/patch-1 Typo in deploy.md commit c10efda637b28645b997de1d9af4bac360b9a999 Author: Saru Thuraiman Date: Mon Jan 31 21:40:33 2022 -0500 Typo in deploy.md Signed-off-by: Saru Thuraiman commit 1249d9ed62774c69e837773d344f31ce3da72440 Author: Nicolas De Loof Date: Sun Nov 28 12:53:02 2021 +0100 typo Signed-off-by: Nicolas De Loof commit deaf2dea8bf2fb408d7d9ed0cd6255fbd667cdd4 Author: Nicolas De Loof Date: Tue Nov 16 08:49:16 2021 +0100 document use of COMPOSE_PROJECT_NAME as env variable Signed-off-by: Nicolas De Loof commit 1f3ec13db94890734b0d80376dd9b6d1223108c2 Author: Nicolas De Loof Date: Sat Oct 2 17:52:11 2021 +0200 introduce top-level `name` Signed-off-by: Nicolas De Loof commit c4bab262c5c295b978d777f39b91e51f5e775b27 Author: Bojan Bogojevic <20166636+Bojan023@users.noreply.github.com> Date: Wed Jan 5 17:59:25 2022 +0100 Fix pids limit key Pasting previous description https://github.com/compose-spec/compose-spec/commit/e8db8022c0b2e3d5eb007d629ff684cbe49a17a4 caused the description to mention the previous (and now wrong) key Signed-off-by: Bojan Bogojević <20166636+Bojan023@users.noreply.github.com> commit 1ca7dd2141a787bcb04c1970d10a2ce6255a6020 Author: Or Bin Date: Wed Jan 19 12:07:23 2022 +0200 Fixed a tiny typo: Rerefence -> Reference Signed-off-by: Or Bin commit 0fb8d233102f2b8a9903ef0871253f7b83f37b0e Author: Tymoteusz Blazejczyk Date: Fri Jan 7 18:57:45 2022 +0100 Changed from long description to list. Changed information about volume options from multi sentences long description to bullet list of options for better readability. Signed-off-by: Tymoteusz Blazejczyk commit d020ad999d87e8b89b5c315929c062f807897d02 Author: Tymoteusz Blazejczyk Date: Sun Jan 2 16:12:45 2022 +0100 Added SELinux description for volume short syntax Signed-off-by: Tymoteusz Blazejczyk commit ab58eae8d025606198f82e40efc1349cfc6996a8 Author: Tymoteusz Blazejczyk Date: Sat Jan 1 14:04:47 2022 +0100 Added volume bind option SELinux :z :Z Related with https://github.com/compose-spec/compose-go/pull/213 This feature describe the SELinux field for setting the :z or :Z bind option for relabeling SELinux label. It fixes #191 References: - https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label Signed-off-by: Tymoteusz Blazejczyk commit 95f8b4f9dc3030323b4eb840abb7bc40a81d49b1 Author: Nicolas De Loof Date: Mon Jan 3 08:10:58 2022 +0100 published port can be a range Signed-off-by: Nicolas De Loof commit e8db8022c0b2e3d5eb007d629ff684cbe49a17a4 Author: Sebastiaan van Stijn Date: Thu Dec 2 13:18:07 2021 +0100 Add missing deploy.limits.pids (from schema 3.9), deprecate pids_limit compose schema v3.9 added support for `deploy.limits.pids` (through https://github.com/docker/cli/commit/851eeb9639ddd5186c57db0533ede26964ee27cc), however, work on compose-spec was already in progress, which lead to changes from the 3.9 schema to not be included. This patch adds the missing option and mars the `services.{name}.pids_limit` as deprecated, similar to comparable limit- and reservation options (`services.{name}.cpus`, `services.{name}.mem_limit`, `services.{name}.mem_reservation`. Signed-off-by: Sebastiaan van Stijn commit a5a952ea97577169fff9f0b26854a9d92c3437ee Author: Tim Way <1091435+timway@users.noreply.github.com> Date: Tue Oct 12 17:17:53 2021 -0500 Minor Spacing Adjustment While not required by the spec the rest of the documents use 2 spaces for nesting in YAML code blocks. This snuck through at 4. Signed-off-by: Tim Way <1091435+timway@users.noreply.github.com> commit 61e518dbeca74ac07a056bcb60a9ac68221aa378 Author: Hang Yan Date: Fri Oct 8 10:01:29 2021 +0800 Update english sentence Signed-off-by: Hang Yan commit b41c6b302a8d4b585de01e2bb8077af424f1eb64 Author: Hang Yan Date: Mon Oct 4 16:22:30 2021 +0800 Small typo fix Signed-off-by: Hang Yan commit 5a37b4de458bd54280e99e97535cc042a2858e7e Merge: cf9408e 1a9d876 Author: Ulysses Souza Date: Mon Nov 15 12:11:49 2021 +0100 Merge pull request #213 from ndeloof/deprecate_compose_ref Make docker compose v2 the reference implementation commit 1a9d8760b0232ecb2b9930902f93747dc8342782 Author: Nicolas De Loof Date: Sat Nov 13 17:02:16 2021 +0100 Make docker compose v2 the reference implementation Signed-off-by: Nicolas De Loof commit cf9408ed4e9dca845c0b976a1a1e8879d5f0baa4 Author: Mathias Brodala Date: Thu Sep 9 16:36:15 2021 +0200 Use volume names from examples in explanation Signed-off-by: Mathias Brodala commit 5a48509335685f9274924142d7c3ad4b3129edb3 Author: MarilynFranklin Date: Sun Sep 27 21:34:23 2020 -0500 Support nested variable expansion Signed-off-by: MarilynFranklin commit 43f6537b2c8f01b6d3f0e184d13a0f3cb93d38d7 Merge: f0857c3 14d7dbb Author: Nicolas De loof Date: Wed Sep 29 15:22:23 2021 +0200 Merge pull request #194 from kendru/clarify-devices-format commit f0857c36fd6aeccd8a80dfaac70dcc78a2cd6d1c Merge: aaeefc4 a541451 Author: Nicolas De loof Date: Wed Sep 29 13:14:01 2021 +0200 Merge pull request #205 from ndeloof/tmpfs_size commit a5414510b05cbaafd80c3c61ba7d4770df0b4c75 Author: Nicolas De Loof Date: Wed Sep 29 09:22:20 2021 +0200 define tmpfs.size as string or integer Signed-off-by: Nicolas De Loof commit aaeefc4ae471d5230be63fb1748a7d2e5bea620d Merge: 1f11b9c e64bba8 Author: Nicolas De loof Date: Thu Sep 23 19:05:32 2021 +0200 Merge pull request #200 from ndeloof/owners commit e64bba8cdeccc22758f637136b967094a3f3e578 Merge: 994ccb2 1f11b9c Author: Nicolas De loof Date: Thu Sep 23 19:05:25 2021 +0200 Merge branch 'master' into owners commit 1f11b9c0c98031e97320c2ca07d6b30f3986b054 Merge: 7c03c3c 080b12d Author: Nicolas De loof Date: Fri Sep 17 15:52:47 2021 +0200 Merge pull request #181 from compose-spec/dependabot/bundler/addressable-2.8.0 commit 080b12d7fdfdd187f7bbcd9f0c863a46825dafe9 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri Sep 17 13:16:07 2021 +0000 Bump addressable from 2.7.0 to 2.8.0 Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.7.0 to 2.8.0. - [Release notes](https://github.com/sporkmonger/addressable/releases) - [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md) - [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.7.0...addressable-2.8.0) --- updated-dependencies: - dependency-name: addressable dependency-type: indirect ... Signed-off-by: dependabot[bot] commit 7c03c3cd8b7ef62803c4010d29d565ed5fb71fbd Merge: eb37e8b 071b9e7 Author: Nicolas De loof Date: Fri Sep 17 15:13:37 2021 +0200 Merge pull request #167 from compose-spec/dependabot/bundler/rexml-3.2.5 commit 071b9e7b20cb828064f7939478a27f474471b075 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri Sep 17 13:13:28 2021 +0000 Bump rexml from 3.2.4 to 3.2.5 Bumps [rexml](https://github.com/ruby/rexml) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.2.4...v3.2.5) Signed-off-by: dependabot[bot] commit 994ccb21be11f5b83046ad0b81ffc8bf43d32cc5 Merge: 6c1a070 eb37e8b Author: Nicolas De loof Date: Tue Sep 14 21:01:03 2021 +0200 Merge branch 'master' into owners commit 6c1a070f99776b66aa900e9bf138573aa7bff118 Author: Nicolas De Loof Date: Mon Sep 13 08:56:00 2021 +0200 update maintainers Signed-off-by: Nicolas De Loof commit eb37e8b9586f2e463d717aed174a380823e81071 Merge: c1dbc42 61ee847 Author: Nicolas De loof Date: Fri Sep 10 14:25:12 2021 +0200 Merge pull request #183 from bjmmedeiros/patch-1 commit c1dbc42920ba94d307bcae8ec0ad4d59ebffb13c Merge: b33e716 4f68f6d Author: Nicolas De loof Date: Fri Sep 10 14:24:37 2021 +0200 Merge pull request #193 from kendru/fix-delimiter-docs Update spec to use colon-separated commit b33e71671bacfd7f473592fccd4b5e2810d99a34 Merge: b369fe5 e418731 Author: Nicolas De loof Date: Fri Sep 10 14:23:21 2021 +0200 Merge pull request #185 from MichaelLutaaya/patch-1 commit e418731827a0a467708953d35f26449d54557c9a Author: Michael Lutaaya Date: Wed Jul 21 20:35:43 2021 -0400 Fix typo in image section of Compose spec `sha356` → `sha256` Signed-off-by: Michael Lutaaya commit 14d7dbbf34cdcf3e890a3bcc64de1321a1121aa9 Author: Andrew Meredith Date: Thu Sep 2 15:57:31 2021 -0600 Clarify devices format Updates the description of `services.devices` to clarify which segment is the host path and which is the container path. It also indicates the optional third element, which is used to supply cgroup permissions and is supported by Docker Compose. Signed-off-by: Andrew Meredith commit 4f68f6d7155473221ca193d7e33e0477100ba048 Author: Andrew Meredith Date: Thu Sep 2 15:43:17 2021 -0600 Update spec to use colon-separated There were two references to strings that are "comma-separated", but the docs continue to describe the delimiter as actually being a colon. This updates the prose to reference the correct punctuation mark. Signed-off-by: Andrew Meredith commit b369fe5e02d80b619d14974cd1e64e7eea1b2345 Merge: 5141aaf 1491eaf Author: Nicolas De loof Date: Wed Aug 4 20:59:29 2021 +0200 Merge pull request #187 from ndeloof/env_bool Allow use of plain boolean as environment values commit 1491eafa9344e6fc485c62e3f942fc87e03bf8da Author: Nicolas De Loof Date: Wed Aug 4 15:59:02 2021 +0200 Allow use of plain boolean as environment values Signed-off-by: Nicolas De Loof commit 61ee847247552cac963500b9c09f5f233d75b08a Author: bjmmedeiros <1548442+bjmmedeiros@users.noreply.github.com> Date: Mon Jul 19 00:24:53 2021 -0300 Update spec.md Trivial typo fix: MUTS -> MUST Signed-off-by: bjmmedeiros <1548442+bjmmedeiros@users.noreply.github.com> commit 5141aafafa6ea03fcf52eb2b44218408825ab480 Merge: 3941992 7a8f9ea Author: Nicolas De loof Date: Sat Jun 19 12:32:09 2021 +0200 Merge pull request #179 from compose-spec/pull-policy-missing commit 394199202e89060957b43d56f8804727daf53dc4 Merge: 896f84b d6b67d3 Author: Nicolas De loof Date: Sat Jun 19 12:31:32 2021 +0200 Merge pull request #174 from decentral1se/patch-1 commit 7a8f9eacd1fb5617bf94656d98bfb900653b67bf Author: Eric Hripko Date: Sat Jun 19 09:35:45 2021 +0100 missing is a valid pull_policy Signed-off-by: Eric Hripko commit d6b67d3fdfcc699fe21e3a533d82aa4b077e2c33 Author: decentral1se Date: Fri Jun 18 22:25:10 2021 +0200 Refer to docker/compose-cli Signed-off-by: decentral1se commit 896f84b39b4a66234aa813c15d2baa00a228a125 Merge: 7edce04 5913fe9 Author: Nicolas De loof Date: Fri Jun 18 19:10:28 2021 +0200 Merge pull request #178 from compose-spec/dependabot/bundler/nokogiri-1.11.7 Bump nokogiri from 1.11.1 to 1.11.7 commit 7edce04820eee63c5e952d92881262aca0d7019b Merge: 74b933d f70b37a Author: Nicolas De loof Date: Fri Jun 18 19:10:18 2021 +0200 Merge pull request #169 from pchico83/okteto commit 5913fe97f7f59c966d929a29f2fa0cd31a5c0b1a Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri Jun 18 17:07:56 2021 +0000 Bump nokogiri from 1.11.1 to 1.11.7 Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.1 to 1.11.7. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.1...v1.11.7) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] commit 74b933db994109616580eab8f47bf2ba226e0faa Merge: 002f33d 151c35e Author: Nicolas De loof Date: Tue May 25 13:10:26 2021 +0200 Merge pull request #173 from ndeloof/host_ip document support for port's host_ip in "long syntax" commit 151c35e73fdc65a1f192d95b548db9c305940d9c Author: Nicolas De Loof Date: Tue May 25 10:45:08 2021 +0200 document support for port's host_ip in "long syntax" Signed-off-by: Nicolas De Loof commit f70b37a890c989fd39c6d255104237b53b0179d8 Author: Pablo Chico de Guzman Date: Tue May 4 23:48:42 2021 +0200 Add Okteto Stacks to the list of implementations Signed-off-by: Pablo Chico de Guzman commit 002f33d2fa78425cd31f096444280cc4c9daf445 Merge: 3978a02 48a79c5 Author: Nicolas De Loof Date: Tue Apr 27 20:35:27 2021 +0200 Merge branch 'AkihiroSuda-readme' commit 48a79c5d77bf0d20c0b54328089557c3fe3de563 Author: Nicolas De Loof Date: Tue Apr 27 10:19:21 2021 +0200 introduce create_host_path Signed-off-by: Nicolas De Loof commit 19f7ae83222539b8e605905519d16fb21ab0cd2b Author: Chris Crone Date: Tue Apr 27 14:13:05 2021 +0200 Remove Compose on Kubernetes from implementations Compose on Kubernetes has been deprecated. Signed-off-by: Chris Crone commit 3978a02afed303dee744712201a2beb3b1f308cf Merge: 329ffc1 550eafa Author: Nicolas De loof Date: Tue Apr 27 19:40:06 2021 +0200 Merge pull request #165 from chris-crone/remove-compose-on-k8s Remove Compose on Kubernetes from implementations commit 550eafa11d3b3455ddc146e83e0c7c7761e711b1 Merge: 599e649 329ffc1 Author: Nicolas De loof Date: Tue Apr 27 19:39:58 2021 +0200 Merge branch 'master' into remove-compose-on-k8s commit 599e649a221da2578829f23e70359a4a5ed1ca9d Author: Chris Crone Date: Tue Apr 27 14:13:05 2021 +0200 Remove Compose on Kubernetes from implementations Compose on Kubernetes has been deprecated. Signed-off-by: Chris Crone commit 329ffc10ccd5d733f25ad7af87801f4755154db9 Merge: b7fb5b6 3234a03 Author: Nicolas De loof Date: Tue Apr 27 15:00:00 2021 +0200 Merge pull request #163 from ndeloof/create_host_path introduce create_host_path commit 3234a03cd3fc47ebb4198b90e422928b7fde3c1e Author: Nicolas De Loof Date: Tue Apr 27 10:19:21 2021 +0200 introduce create_host_path Signed-off-by: Nicolas De Loof commit a672933384b1dc4c7207bb3fda25ffd3d2f1d81c Author: Akihiro Suda Date: Fri Apr 23 17:07:55 2021 +0900 Add nerdctl to the implementation list Implementation status is explained in https://github.com/containerd/nerdctl/blob/master/docs/compose.md Signed-off-by: Akihiro Suda commit b7fb5b65fff19651ecdb2d4d3232b01fb6866f70 Merge: 4423eba 406feef Author: Eric Hripko Date: Thu Apr 22 18:37:02 2021 +0100 Merge pull request #147 from EricHripko/master Start generating GitHub Pages from the spec commit 406feefd7c06ebf3e43c7f3918f3b7c3207ad9bf Merge: 4259b1a 4423eba Author: Eric Hripko Date: Thu Apr 22 18:35:18 2021 +0100 Merge branch 'master' into master commit 4423eba8c0926bf0dc57b116b2426d57e024ffb1 Merge: 167f207 90c38b8 Author: Nicolas De loof Date: Thu Apr 8 12:20:33 2021 +0200 Merge pull request #160 from AkihiroSuda/pids-limit pid_limit -> pids_limit commit 90c38b8e52569aba6f062f7a786f8708678900bb Author: Akihiro Suda Date: Thu Apr 8 18:28:31 2021 +0900 pid_limit -> pids_limit "pids_limit" is the correct form, added in Docker Compose spec 2.1: https://github.com/docker/compose/commit/6a151aac046b18f4fe2ac46f79dc9c8ee83aa33a Signed-off-by: Akihiro Suda commit 167f207d0a8967df87c5ed757dbb1a2bb6025a1e Merge: db041f7 73e46c4 Author: Nicolas De loof Date: Tue Mar 30 11:51:07 2021 +0200 Merge pull request #150 from mikesir87/fix-indentation-deploy Fix indentation on examples in the Deployment spec commit 73e46c4112f73a3439852e1d9c7cbc86283d8629 Merge: 45b4bd9 db041f7 Author: Nicolas De loof Date: Tue Mar 30 11:51:01 2021 +0200 Merge branch 'master' into fix-indentation-deploy commit db041f74c00f50d42cab06a8b1cd7ba06518181f Merge: 7f63ac2 e475ef8 Author: Guillaume Tardif Date: Wed Mar 24 14:26:59 2021 +0100 Merge pull request #154 from compose-spec/fix-storage-opt Fix description of `storage_opt` commit e475ef862f8e9db1509d5866898f03186c9839c8 Author: Ulysses Souza Date: Mon Mar 22 15:29:11 2021 -0300 Fix description of `storage_opt` Signed-off-by: Ulysses Souza commit 7f63ac2387c9b4709802b266287470308b8456d3 Merge: f9a5c72 0444176 Author: Chris Crone Date: Mon Mar 22 15:39:52 2021 +0100 Merge pull request #153 from aiordache/missing_service_storage_opts Add missing `service.storage_opts` commit 04441762d1beb6e7a388ba12502be72c908972aa Author: Anca Iordache Date: Mon Mar 22 11:44:33 2021 +0100 Add missing service.storage_opts introduced in 2.1 Signed-off-by: Anca Iordache commit 45b4bd97323670ff16185e8f77f7d5472b7fb122 Author: Michael Irwin Date: Mon Mar 15 16:20:16 2021 -0400 Fix indentation on examples in the Deployment spec Signed-off-by: Michael Irwin commit 4259b1a5f9a7fd2f218e718e48343ce0432a38a4 Author: Eric Hripko Date: Fri Feb 26 14:05:17 2021 +0000 Generate Github Pages from the spec Signed-off-by: Eric Hripko --- .gitignore | 1 + Gemfile | 2 + Gemfile.lock | 263 +++++++++++++++++++++++++++++++++ OWNERS.md | 3 +- README.md | 29 ++-- _config.yml | 15 ++ _layouts/page.html | 8 + assets/css/style.scss | 35 +++++ assets/images/compose_logo.png | Bin 0 -> 13153 bytes build.md | 222 ++++++++++++++++++++++++++-- deploy.md | 45 +++--- schema/compose-spec.json | 107 +++++++------- spec.md | 225 +++++++++++++++++++++------- 13 files changed, 803 insertions(+), 152 deletions(-) create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 _config.yml create mode 100644 _layouts/page.html create mode 100644 assets/css/style.scss create mode 100644 assets/images/compose_logo.png diff --git a/.gitignore b/.gitignore index 0bbcc0e0..6922b966 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ docs/*.json +_site/ diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..310782bb --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source "https://rubygems.org" +gem "github-pages", "~> 212", group: :jekyll_plugins diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..e0387e71 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,263 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (6.0.3.5) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.17.13) + ruby-enum (~> 0.5) + concurrent-ruby (1.1.8) + dnsruby (1.61.5) + simpleidn (~> 0.1) + em-websocket (0.5.2) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + ethon (0.12.0) + ffi (>= 1.3.0) + eventmachine (1.2.7) + execjs (2.7.0) + faraday (1.3.0) + faraday-net_http (~> 1.0) + multipart-post (>= 1.2, < 3) + ruby2_keywords + faraday-net_http (1.0.1) + ffi (1.14.2) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (212) + github-pages-health-check (= 1.17.0) + jekyll (= 3.9.0) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.1.6) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.2) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.7.1) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.1.1) + jekyll-theme-cayman (= 0.1.1) + jekyll-theme-dinky (= 0.1.1) + jekyll-theme-hacker (= 0.1.2) + jekyll-theme-leap-day (= 0.1.1) + jekyll-theme-merlot (= 0.1.1) + jekyll-theme-midnight (= 0.1.1) + jekyll-theme-minimal (= 0.1.1) + jekyll-theme-modernist (= 0.1.1) + jekyll-theme-primer (= 0.5.4) + jekyll-theme-slate (= 0.1.1) + jekyll-theme-tactile (= 0.1.1) + jekyll-theme-time-machine (= 0.1.1) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.0) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.3) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.10.4, < 2.0) + rouge (= 3.26.0) + terminal-table (~> 1.4) + github-pages-health-check (1.17.0) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (>= 2.0.2, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.0) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.9.0) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) + jekyll-commonmark-ghpages (0.1.6) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1.2) + rouge (>= 2.0, < 4.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.2) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.7.1) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.1.2) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.5.4) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.4.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.14.4) + multipart-post (2.1.1) + nokogiri (1.13.6-x86_64-linux) + racc (~> 1.4) + octokit (4.20.0) + faraday (>= 0.9) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.6) + racc (1.6.0) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby-enum (0.9.0) + i18n + ruby2_keywords (0.0.4) + rubyzip (2.3.0) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.8.2) + addressable (>= 2.3.5) + faraday (> 0.8, < 2.0) + simpleidn (0.2.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.10) + thread_safe (~> 0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.7) + unicode-display_width (1.7.0) + zeitwerk (2.4.2) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + github-pages (~> 212) + +BUNDLED WITH + 2.2.11 diff --git a/OWNERS.md b/OWNERS.md index f8133423..494a017c 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -2,5 +2,6 @@ maintainers: - ndeloof - hangyan - justincormack -- kohidave - EricHripko +- ulyssessouza +- glours diff --git a/README.md b/README.md index 3a1044f7..94e3385f 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,12 @@ # Compose Specification +{:.no_toc} The Compose specification establishes a standard for the definition of multi-container platform-agnostic applications. The specification can be found [here](spec.md). - - -## Table of Contents - -Additional documentation about how this group operates: -* [Governance](GOVERNANCE.md) -* [Contribution Guidelines](CONTRIBUTING.md) -* [Implementations](#Implementations) -* [Releases](https://github.com/docker/compose-spec/releases) +* ToC +{:toc} ## Use cases @@ -36,10 +30,9 @@ APIs to manage networking services, container deployments and their lifecycles. While this offers flexibility to address many operator use cases, it makes simple use cases, like the developer use case, more complicated to express than they need to be. Projects like [Kompose](https://github.com/kubernetes/kompose) -and [Compose on Kubernetes](https://github.com/docker/compose-on-kubernetes) -show how the simpler Compose model can be translated into Kubernetes API -payloads and make the Compose file the source of truth for development and -deployment. +or [Okteto Stacks](https://okteto.com/docs/reference/stacks) show how the +simpler Compose model can be translated into Kubernetes API payloads and make +the Compose file the source of truth for development and deployment. ### Cloud providers @@ -62,10 +55,14 @@ The specification and code is licensed under the Apache 2.0 license found in the ## Implementations -* [docker-compose](https://github.com/docker/compose) -* Docker CLI (`docker stack` command) -* [Compose on Kubernetes](https://github.com/docker/compose-on-kubernetes) +[Docker Compose](https://github.com/docker/compose) is the Reference Implementation of the Compose Specification. + +Compose Specification is also implemented by: + * [Kompose](https://github.com/kubernetes/kompose) +* [Nerdctl](https://github.com/containerd/nerdctl) +* [Okteto Stacks](https://okteto.com/docs/reference/stacks) +* [Docker Cloud Integrations](https://github.com/docker/compose-cli) | Metadata | | | -------- | ---------------: | diff --git a/_config.yml b/_config.yml new file mode 100644 index 00000000..725635a6 --- /dev/null +++ b/_config.yml @@ -0,0 +1,15 @@ +theme: jekyll-theme-cayman +title: Compose Specification +description: > + A specification for developer-centric application definition used in Cloud + Native Applications. +markdown: kramdown +defaults: + - scope: + path: "" + values: + layout: "page" +github: + repository_name: Compose Specification + owner_url: https://github.com/compose-spec/compose-spec/blob/master/OWNERS.md + owner_name: these members of the community diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 00000000..148251b0 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,8 @@ +--- +layout: default +--- + + + + +{{ content }} diff --git a/assets/css/style.scss b/assets/css/style.scss new file mode 100644 index 00000000..8a42d036 --- /dev/null +++ b/assets/css/style.scss @@ -0,0 +1,35 @@ +--- +--- + +@import "{{ site.theme }}"; + +.header { + position: absolute; + top: 0; + + box-sizing: border-box; + width: 64rem; + height: 64px; + padding: 8px; + background-image: url("{{ '/assets/images/compose_logo.png' | relative_url }}"); + background-repeat: no-repeat; + background-size: 322px 44px; + background-position: left center; +} + +.page-header { + margin-top: 64px; + padding: 1rem; + + .project-name { + display: none; + } + + .project-tagline { + margin: 0; + } + + .btn { + display: none; + } +} diff --git a/assets/images/compose_logo.png b/assets/images/compose_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..32ec6ec6764f615e24ac481b9a36193c7a533689 GIT binary patch literal 13153 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 a?gup~g~Tu38U6kfjIz9j+#9Gx`2PUD_lx)d literal 0 HcmV?d00001 diff --git a/build.md b/build.md index 44c6b103..0ec2a748 100644 --- a/build.md +++ b/build.md @@ -1,11 +1,15 @@ # The Compose Specification - Build support +{:.no_toc} *Note:* Build is an OPTIONAL part of the Compose Specification +* ToC +{:toc} + ## Introduction Compose specification is a platform-neutral way to define multi-container applications. A Compose implementation -focussing on development use-case to run application on local machine will obviously also support (re)building +focusing on development use-case to run application on local machine will obviously also support (re)building application from sources. The Compose Build specification allows to define the build process within a Compose file in a portable way. @@ -60,8 +64,8 @@ services: backend: image: awesome/database build: - context: backend - dockerfile: ../backend.Dockerfile + context: backend + dockerfile: ../backend.Dockerfile custom: build: ~/custom @@ -69,9 +73,9 @@ services: When used to build service images from source, such a Compose file will create three docker images: -* `awesome/webapp` docker image is build using `webapp` sub-directory within Compose file parent folder as docker build context. Lack of a `Dockerfile` within this folder will throw an error. -* `awesome/database` docker image is build using `backend` sub-directory within Compose file parent folder. `backend.Dockerfile` file is used to define build steps, this file is searched relative to context path, which means for this sample `..` will resolve to Compose file parent folder, so `backend.Dockerfile` is a sibling file. -* a docker image is build using `custom` directory within user's HOME as docker context. Compose implementation warn user about non-portable path used to build image. +* `awesome/webapp` docker image is built using `webapp` sub-directory within Compose file parent folder as docker build context. Lack of a `Dockerfile` within this folder will throw an error. +* `awesome/database` docker image is built using `backend` sub-directory within Compose file parent folder. `backend.Dockerfile` file is used to define build steps, this file is searched relative to context path, which means for this sample `..` will resolve to Compose file parent folder, so `backend.Dockerfile` is a sibling file. +* a docker image is built using `custom` directory within user's HOME as docker context. Compose implementation warn user about non-portable path used to build image. On push, both `awesome/webapp` and `awesome/database` docker images are pushed to (default) registry. `custom` service image is skipped as no `Image` attribute is set and user is warned about this missing attribute. @@ -97,7 +101,7 @@ Alternatively `build` can be an object with fields defined as follow When the value supplied is a relative path, it MUST be interpreted as relative to the location of the Compose file. Compose implementations MUST warn user about absolute path used to define build context as those prevent Compose file -for being portable. +from being portable. ```yml build: @@ -108,7 +112,7 @@ build: `dockerfile` allows to set an alternate Dockerfile. A relative path MUST be resolved from the build context. Compose implementations MUST warn user about absolute path used to define Dockerfile as those prevent Compose file -for being portable. +from being portable. ```yml build: @@ -151,18 +155,78 @@ args: - GIT_COMMIT ``` +### ssh + +`ssh` defines SSH authentications that the image builder SHOULD use during image build (e.g., cloning private repository) + +`ssh` property syntax can be either: +* `default` - let the builder connect to the ssh-agent. +* `ID=path` - a key/value definition of an ID and the associated path. Can be either a [PEM](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) file, or path to ssh-agent socket + +Simple `default` sample +```yaml +build: + context: . + ssh: + - default # mount the default ssh agent +``` +or +```yaml +build: + context: . + ssh: ["default"] # mount the default ssh agent +``` + +Using a custom id `myproject` with path to a local SSH key: +```yaml +build: + context: . + ssh: + - myproject=~/.ssh/myproject.pem +``` +Image builder can then rely on this to mount SSH key during build. +For illustration, [BuildKit extended syntax](https://github.com/compose-spec/compose-spec/pull/234/%5Bmoby/buildkit@master/frontend/dockerfile/docs/syntax.md#run---mounttypessh%5D(https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md#run---mounttypessh)) can be used to mount ssh key set by ID and access a secured resource: + +`RUN --mount=type=ssh,id=myproject git clone ...` + ### cache_from -`cache_from` defines a list of images that the Image builder SHOULD uses for cache resolution. +`cache_from` defines a list of sources the Image builder SHOULD use for cache resolution. + +Cache location syntax MUST follow the global format `[NAME|type=TYPE[,KEY=VALUE]]`. Simple `NAME` is actually a shortcut notation for `type=registry,ref=NAME`. + +Compose Builder implementations MAY support custom types, the Compose Specification defines canonical types which MUST be supported: + +- `registry` to retrieve build cache from an OCI image set by key `ref` + ```yml build: context: . cache_from: - alpine:latest - - corp/web_app:3.14 + - type=local,src=path/to/cache + - type=gha ``` +Unsupported caches MUST be ignored and not prevent user from building image. + +### cache_to + +`cache_to` defines a list of export locations to be used to share build cache with future builds. + +```yml +build: + context: . + cache_to: + - user/app:cache + - type=local,dest=path/to/cache +``` + +Cache target is defined using the same `type=TYPE[,KEY=VALUE]` syntax defined by [`cache_from`](#cache_from). + +Unsupported cache target MUST be ignored and not prevent user from building image. + ### extra_hosts `extra_hosts` adds hostname mappings at build-time. Use the same syntax as [extra_hosts](spec.md#extra_hosts). @@ -186,6 +250,16 @@ configuration, which means for Linux `/etc/hosts` will get extra lines: `isolation` specifies a build’s container isolation technology. Like [isolation](spec.md#isolation) supported values are platform-specific. +### privileged + +`privileged` configures the service image to build with elevated privileges. Support and actual impacts are platform-specific. + +```yml +build: + context: . + privileged: true +``` + ### labels `labels` add metadata to the resulting image. `labels` can be set either as an array or a map. @@ -210,6 +284,17 @@ build: - "com.example.label-with-empty-value" ``` +### no_cache + +`no_cache` disables image builder cache and enforce a full rebuild from source for all image layers. This only +applies to layers declared in the Dockerfile, referenced images COULD be retrieved from local image store whenever tag +has been updated on registry (see [pull](#pull)). + +### pull + +`pull` require the image builder to pull referenced images (`FROM` Dockerfile directive), even if those are already +available in the local image store. + ### shm_size `shm_size` set the size of the shared memory (`/dev/shm` partition on Linux) allocated for building Docker image. Specify @@ -237,6 +322,123 @@ build: target: prod ``` +### secrets +`secrets` grants access to sensitive data defined by [secrets](spec.md#secrets) on a per-service build basis. Two +different syntax variants are supported: the short syntax and the long syntax. + +Compose implementations MUST report an error if the secret isn't defined in the +[`secrets`](spec.md#secrets-top-level-element) section of this Compose file. + +#### Short syntax + +The short syntax variant only specifies the secret name. This grants the +container access to the secret and mounts it as read-only to `/run/secrets/` +within the container. The source name and destination mountpoint are both set +to the secret name. + +The following example uses the short syntax to grant the build of the `frontend` service +access to the `server-certificate` secret. The value of `server-certificate` is set +to the contents of the file `./server.cert`. + +```yml +services: + frontend: + build: + context: . + secrets: + - server-certificate +secrets: + server-certificate: + file: ./server.cert +``` + +#### Long syntax + +The long syntax provides more granularity in how the secret is created within +the service's containers. + +- `source`: The name of the secret as it exists on the platform. +- `target`: The name of the file to be mounted in `/run/secrets/` in the + service's task containers. Defaults to `source` if not specified. +- `uid` and `gid`: The numeric UID or GID that owns the file within + `/run/secrets/` in the service's task containers. Default value is USER running container. +- `mode`: The [permissions](http://permissions-calculator.org/) for the file to be mounted in `/run/secrets/` + in the service's task containers, in octal notation. + Default value is world-readable permissions (mode `0444`). + The writable bit MUST be ignored if set. The executable bit MAY be set. + +The following example sets the name of the `server-certificate` secret file to `server.crt` +within the container, sets the mode to `0440` (group-readable) and sets the user and group +to `103`. The value of `server-certificate` secret is provided by the platform through a lookup and +the secret lifecycle not directly managed by the Compose implementation. + +```yml +services: + frontend: + build: + context: . + secrets: + - source: server-certificate + target: server.cert + uid: "103" + gid: "103" + mode: 0440 +secrets: + server-certificate: + external: true +``` + +Service builds MAY be granted access to multiple secrets. Long and short syntax for secrets MAY be used in the +same Compose file. Defining a secret in the top-level `secrets` MUST NOT imply granting any service build access to it. +Such grant must be explicit within service specification as [secrets](spec.md#secrets) service element. + +### tags + +`tags` defines a list of tag mappings that MUST be associated to the build image. This list comes in addition of +the `image` [property defined in the service section](spec.md#image) + +```yml +tags: + - "myimage:mytag" + - "registry/username/myrepos:my-other-tag" +``` + +### platforms + +`platforms` defines a list of target [platforms](spec.md#platform). + +```yml +build: + context: "." + platforms: + - "linux/amd64" + - "linux/arm64" +``` + +When the `platforms` attribute is omitted, Compose implementations MUST include the service's platform +in the list of the default build target platforms. + +Compose implementations SHOULD report an error in the following cases: +* when the list contains multiple platforms but the implementation is incapable of storing multi-platform images +* when the list contains an unsupported platform +```yml +build: + context: "." + platforms: + - "linux/amd64" + - "unsupported/unsupported" +``` +* when the list is non-empty and does not contain the service's platform +```yml +services: + frontend: + platform: "linux/amd64" + build: + context: "." + platforms: + - "linux/arm64" +``` + ## Implementations * [docker-compose](https://docs.docker.com/compose) diff --git a/deploy.md b/deploy.md index cecf16a9..25b98629 100644 --- a/deploy.md +++ b/deploy.md @@ -1,7 +1,11 @@ # The Compose Specification - Deployment support +{:.no_toc} *Note:* Deployment is an OPTIONAL part of the Compose Specification +* ToC +{:toc} + ## Introduction Compose specification is a platform-neutral way to define multi-container applications. A Compose implementation supporting @@ -43,7 +47,7 @@ services: ### labels `labels` specifies metadata for the service. These labels MUST *only* be set on the service and *not* on any containers for the service. -This assumes the platform as some native concept of "service" that can match Compose application model. +This assumes the platform has some native concept of "service" that can match Compose application model. ```yml services: @@ -77,16 +81,16 @@ by a list or a map with string values. ```yml deploy: - placement: + placement: constraints: - - disktype=ssd + - disktype=ssd ``` ```yml deploy: - placement: + placement: constraints: - disktype: ssd + disktype: ssd ``` #### preferences @@ -96,16 +100,16 @@ by a list or a map with string values. ```yml deploy: - placement: + placement: preferences: - - datacenter=us-east + - datacenter=us-east ``` ```yml deploy: - placement: + placement: preferences: - datacenter: us-east + datacenter: us-east ``` ### replicas @@ -139,6 +143,7 @@ services: limits: cpus: '0.50' memory: 50M + pids: 1 reservations: cpus: '0.25' memory: 20M @@ -152,6 +157,10 @@ services: `memory` configures a limit or reservation on the amount of memory a container can allocate, set as a string expressing a [byte value](spec.md#specifying-byte-values). +#### pids + +`pids` tunes a container’s PIDs limit, set as an integer. + #### devices `devices` configures reservations of the devices a container can use. It contains a list of reservations, each set as an object with the following parameters: `capabilities`, `driver`, `count`, `device_ids` and `options`. @@ -249,11 +258,11 @@ deploy: ```yml deploy: - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s ``` ### rollback_config @@ -282,8 +291,8 @@ deploy: ```yml deploy: - update_config: - parallelism: 2 - delay: 10s - order: stop-first + update_config: + parallelism: 2 + delay: 10s + order: stop-first ``` diff --git a/schema/compose-spec.json b/schema/compose-spec.json index 7d4285d5..6f827971 100644 --- a/schema/compose-spec.json +++ b/schema/compose-spec.json @@ -8,7 +8,12 @@ "properties": { "version": { "type": "string", - "description": "Version of the Compose specification used. Tools not implementing required version MUST reject the configuration file." + "description": "declared for backward compatibility, ignored." + }, + + "name": { + "type": "string", + "description": "define the Compose project name, until user defines one explicitly." }, "services": { @@ -86,13 +91,21 @@ "context": {"type": "string"}, "dockerfile": {"type": "string"}, "args": {"$ref": "#/definitions/list_or_dict"}, + "ssh": {"$ref": "#/definitions/list_or_dict"}, "labels": {"$ref": "#/definitions/list_or_dict"}, "cache_from": {"type": "array", "items": {"type": "string"}}, + "cache_to": {"type": "array", "items": {"type": "string"}}, + "no_cache": {"type": "boolean"}, "network": {"type": "string"}, + "pull": {"type": "boolean"}, "target": {"type": "string"}, "shm_size": {"type": ["integer", "string"]}, "extra_hosts": {"$ref": "#/definitions/list_or_dict"}, - "isolation": {"type": "string"} + "isolation": {"type": "string"}, + "privileged": {"type": "boolean"}, + "secrets": {"$ref": "#/definitions/service_config_or_secret"}, + "tags": {"type": "array", "items": {"type": "string"}}, + "platforms": {"type": "array", "items": {"type": "string"}} }, "additionalProperties": false, "patternProperties": {"^x-": {}} @@ -128,6 +141,7 @@ }, "cap_add": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, "cap_drop": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, + "cgroup": {"type": "string", "enum": ["host", "private"]}, "cgroup_parent": {"type": "string"}, "command": { "oneOf": [ @@ -135,26 +149,7 @@ {"type": "array", "items": {"type": "string"}} ] }, - "configs": { - "type": "array", - "items": { - "oneOf": [ - {"type": "string"}, - { - "type": "object", - "properties": { - "source": {"type": "string"}, - "target": {"type": "string"}, - "uid": {"type": "string"}, - "gid": {"type": "string"}, - "mode": {"type": "number"} - }, - "additionalProperties": false, - "patternProperties": {"^x-": {}} - } - ] - } - }, + "configs": {"$ref": "#/definitions/service_config_or_secret"}, "container_name": {"type": "string"}, "cpu_count": {"type": "integer", "minimum": 0}, "cpu_percent": {"type": "integer", "minimum": 0, "maximum": 100}, @@ -316,8 +311,9 @@ "type": "object", "properties": { "mode": {"type": "string"}, + "host_ip": {"type": "string"}, "target": {"type": "integer"}, - "published": {"type": "integer"}, + "published": {"type": ["string", "integer"]}, "protocol": {"type": "string"} }, "additionalProperties": false, @@ -330,7 +326,7 @@ "privileged": {"type": "boolean"}, "profiles": {"$ref": "#/definitions/list_of_strings"}, "pull_policy": {"type": "string", "enum": [ - "always", "never", "if_not_present", "build" + "always", "never", "if_not_present", "build", "missing" ]}, "read_only": {"type": "boolean"}, "restart": {"type": "string"}, @@ -342,30 +338,12 @@ }, "security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true}, "shm_size": {"type": ["number", "string"]}, - "secrets": { - "type": "array", - "items": { - "oneOf": [ - {"type": "string"}, - { - "type": "object", - "properties": { - "source": {"type": "string"}, - "target": {"type": "string"}, - "uid": {"type": "string"}, - "gid": {"type": "string"}, - "mode": {"type": "number"} - }, - "additionalProperties": false, - "patternProperties": {"^x-": {}} - } - ] - } - }, + "secrets": {"$ref": "#/definitions/service_config_or_secret"}, "sysctls": {"$ref": "#/definitions/list_or_dict"}, "stdin_open": {"type": "boolean"}, "stop_grace_period": {"type": "string", "format": "duration"}, "stop_signal": {"type": "string"}, + "storage_opt": {"type": "object"}, "tmpfs": {"$ref": "#/definitions/string_or_list"}, "tty": {"type": "boolean"}, "ulimits": { @@ -389,6 +367,7 @@ } }, "user": {"type": "string"}, + "uts": {"type": "string"}, "userns_mode": {"type": "string"}, "volumes": { "type": "array", @@ -407,7 +386,9 @@ "bind": { "type": "object", "properties": { - "propagation": {"type": "string"} + "propagation": {"type": "string"}, + "create_host_path": {"type": "boolean"}, + "selinux": {"type": "string", "enum": ["z", "Z"]} }, "additionalProperties": false, "patternProperties": {"^x-": {}} @@ -424,9 +405,12 @@ "type": "object", "properties": { "size": { - "type": "integer", - "minimum": 0 - } + "oneOf": [ + {"type": "integer", "minimum": 0}, + {"type": "string"} + ] + }, + "mode": {"type": "number"} }, "additionalProperties": false, "patternProperties": {"^x-": {}} @@ -514,7 +498,8 @@ "type": "object", "properties": { "cpus": {"type": ["number", "string"]}, - "memory": {"type": "string"} + "memory": {"type": "string"}, + "pids": {"type": "integer"} }, "additionalProperties": false, "patternProperties": {"^x-": {}} @@ -705,6 +690,7 @@ "type": "object", "properties": { "name": {"type": "string"}, + "environment": {"type": "string"}, "file": {"type": "string"}, "external": { "type": ["boolean", "object"], @@ -767,7 +753,7 @@ "type": "object", "patternProperties": { ".+": { - "type": ["string", "number", "null"] + "type": ["string", "number", "boolean", "null"] } }, "additionalProperties": false @@ -793,6 +779,27 @@ "additionalProperties": false }, + "service_config_or_secret": { + "type": "array", + "items": { + "oneOf": [ + {"type": "string"}, + { + "type": "object", + "properties": { + "source": {"type": "string"}, + "target": {"type": "string"}, + "uid": {"type": "string"}, + "gid": {"type": "string"}, + "mode": {"type": "number"} + }, + "additionalProperties": false, + "patternProperties": {"^x-": {}} + } + ] + } + }, + "constraints": { "service": { "id": "#/definitions/constraints/service", diff --git a/spec.md b/spec.md index 3a8a1eee..776c987a 100644 --- a/spec.md +++ b/spec.md @@ -1,19 +1,8 @@ # The Compose Specification +{:.no_toc} -## Table of Contents - -- [Status of this document](#status-of-this-document) -- [The Compose application model](#the-compose-application-model) -- [Compose file](#compose-file) -- [Version top-level element](#version-top-level-element) -- [Services top-level element](#services-top-level-element) -- [Networks top-level element](#networks-top-level-element) -- [Volumes top-level element](#volumes-top-level-element) -- [Configs top-level element](#configs-top-level-element) -- [Secrets top-level element](#secrets-top-level-element) -- [Fragments](#fragments) -- [Extension](#extension) -- [Interpolation](#interpolation) +* ToC +{:toc} ## Status of this document @@ -31,7 +20,7 @@ is Platform dependent and can only be confirmed at runtime. The definition of a properties in a Compose file, established by the [docker-compose](https://github.com/docker/compose) tool where the Compose file format was designed, doesn't offer any guarantee to the end-user attributes will be actually implemented. -The specification defines the expected configuration syntax and behaviour, but - until noted - supporting any of those is OPTIONAL. +The specification defines the expected configuration syntax and behavior, but - until noted - supporting any of those is OPTIONAL. A Compose implementation to parse a Compose file using unsupported attributes SHOULD warn user. We recommend implementors to support those running modes: @@ -44,15 +33,15 @@ to support those running modes: The Compose specification allows one to define a platform-agnostic container based application. Such an application is designed as a set of containers which have to both run together with adequate shared resources and communication channels. -Computing components of an application are defined as [Services](#Services-top-level-element). A Service is an abstract concept implemented on platforms by running the same container image (and configuration) one or more times. +Computing components of an application are defined as [Services](#services-top-level-element). A Service is an abstract concept implemented on platforms by running the same container image (and configuration) one or more times. -Services communicate with each other through [Networks](#Networks-top-level-element). In this specification, a Network is a platform capability abstraction to establish an IP route between containers within services connected together. Low-level, platform-specific networking options are grouped into the Network definition and MAY be partially implemented on some platforms. +Services communicate with each other through [Networks](#networks-top-level-element). In this specification, a Network is a platform capability abstraction to establish an IP route between containers within services connected together. Low-level, platform-specific networking options are grouped into the Network definition and MAY be partially implemented on some platforms. -Services store and share persistent data into [Volumes](#Volumes-top-level-element). The specification describes such a persistent data as a high-level filesystem mount with global options. Actual platform-specific implementation details are grouped into the Volumes definition and MAY be partially implemented on some platforms. +Services store and share persistent data into [Volumes](#volumes-top-level-element). The specification describes such a persistent data as a high-level filesystem mount with global options. Actual platform-specific implementation details are grouped into the Volumes definition and MAY be partially implemented on some platforms. -Some services require configuration data that is dependent on the runtime or platform. For this, the specification defines a dedicated concept: [Configs](#Configs-top-level-element). From a Service container point of view, Configs are comparable to Volumes, in that they are files mounted into the container. But the actual definition involves distinct platform resources and services, which are abstracted by this type. +Some services require configuration data that is dependent on the runtime or platform. For this, the specification defines a dedicated concept: [Configs](#configs-top-level-element). From a Service container point of view, Configs are comparable to Volumes, in that they are files mounted into the container. But the actual definition involves distinct platform resources and services, which are abstracted by this type. -A [Secret](#Secrets-top-level-element) is a specific flavour of configuration data for sensitive data that SHOULD NOT be exposed without security considerations. Secrets are made available to services as files mounted into their containers, but the platform-specific resources to provide sensitive data are specific enough to deserve a distinct concept and definition within the Compose specification. +A [Secret](#secrets-top-level-element) is a specific flavor of configuration data for sensitive data that SHOULD NOT be exposed without security considerations. Secrets are made available to services as files mounted into their containers, but the platform-specific resources to provide sensitive data are specific enough to deserve a distinct concept and definition within the Compose specification. Distinction within Volumes, Configs and Secret allows implementations to offer a comparable abstraction at service level, but cover the specific configuration of adequate platform resources for well identified data usages. @@ -60,6 +49,8 @@ A **Project** is an individual deployment of an application specification on a p resources together and isolate them from other applications or other installation of the same Compose specified application with distinct parameters. A Compose implementation creating resources on a platform MUST prefix resource names by project and set the label `com.docker.compose.project`. +Project name can be set explicitly by top-level `name` attribute. Compose implementation MUST offer a way for user to set a custom project name and override this name, so that the same `compose.yaml` file can be deployed twice on the same infrastructure, without changes, by just passing a distinct name. + ### Illustrative example The following example illustrates Compose specification concepts with a concrete example application. The example is non-normative. @@ -230,9 +221,27 @@ Top-level `version` property is defined by the specification for backward compat A Compose implementation SHOULD NOT use this version to select an exact schema to validate the Compose file, but prefer the most recent schema at the time it has been designed. -Compose implementations SHOULD validate they can fully parse the Compose file. If some fields are unknown, typically +Compose implementations SHOULD validate whether they can fully parse the Compose file. If some fields are unknown, typically because the Compose file was written with fields defined by a newer version of the specification, Compose implementations -SHOULD warn the user. Compose implementations MAY offer options to ignore unknown fields (as defined by ["loose"](#Requirements-and-optional-attributes) mode). +SHOULD warn the user. Compose implementations MAY offer options to ignore unknown fields (as defined by ["loose"](#requirements-and-optional-attributes) mode). + +## Name top-level element + +Top-level `name` property is defined by the specification as project name to be used if user doesn't set one explicitly. +Compose implementations MUST offer a way for user to override this name, and SHOULD define a mechanism to compute a +default project name, to be used if the top-level `name` element is not set. + +Whenever project name is defined by top-level `name` or by some custom mechanism, it MUST be exposed for +[interpolation](#interpolation) and environment variable resolution as `COMPOSE_PROJECT_NAME` + +```yml +services: + foo: + image: busybox + environment: + - COMPOSE_PROJECT_NAME + command: echo "I'm running ${COMPOSE_PROJECT_NAME}" +``` ## Services top-level element @@ -250,18 +259,21 @@ Each service MAY also include a Build section, which defines how to create the D Compose implementations MAY support building docker images using this service definition. If not implemented the Build section SHOULD be ignored and the Compose file MUST still be considered valid. -Build support is an OPTIONAL aspect of the Compose specification, and is described in detail [here](build.md) +Build support is an OPTIONAL aspect of the Compose specification, and is +described in detail in the [Build support](build.md) documentation. Each Service defines runtime constraints and requirements to run its containers. The `deploy` section groups these constraints and allows the platform to adjust the deployment strategy to best match containers' needs with available resources. -Deploy support is an OPTIONAL aspect of the Compose specification, and is described in detail [here](deploy.md). If -not implemented the Deploy section SHOULD be ignored and the Compose file MUST still be considered valid. +Deploy support is an OPTIONAL aspect of the Compose specification, and is +described in detail in the [Deployment support](deploy.md) documentation. +If not implemented the Deploy section SHOULD be ignored and the Compose file MUST still be considered valid. -### deploy +### build + +`build` specifies the build configuration for creating container image from source, as defined in the [Build support](build.md) documentation. -`deploy` specifies the configuration for the deployment and lifecycle of services, as defined [here](deploy.md). ### blkio_config @@ -371,9 +383,6 @@ _DEPRECATED: use [deploy.reservations.cpus](deploy.md#cpus)_ `cpuset` defines the explicit CPUs in which to allow execution. Can be a range `0-3` or a list `0,1` -### build - -`build` specifies the build configuration for creating container image from source, as defined [here](build.md). ### cap_add @@ -396,6 +405,14 @@ cap_drop: - SYS_ADMIN ``` +### cgroup + +`cgroup` specifies the cgroup namespace to join. When unset, it is container runtime decision to +select cgroup namespace to use, if supported. + +- `host`: Run the container in the Container runtime cgroup namespace +- `private`: Run the container in its own private cgroup namespace + ### cgroup_parent `cgroup_parent` specifies an OPTIONAL parent [cgroup](http://man7.org/linux/man-pages/man7/cgroups.7.html) for the container. @@ -406,7 +423,7 @@ cgroup_parent: m-executor-abcd ### command -`command` overrides the the default command declared by the container image (i.e. by Dockerfile's `CMD`). +`command` overrides the default command declared by the container image (i.e. by Dockerfile's `CMD`). ``` command: bundle exec thin -p 3000 @@ -449,6 +466,7 @@ services: image: redis:latest configs: - my_config + - my_other_config configs: my_config: file: ./my_config.txt @@ -633,6 +651,12 @@ starting a dependent service. Compose implementations MUST guarantee dependency services marked with `service_healthy` are "healthy" before starting a dependent service. + +### deploy + +`deploy` specifies the configuration for the deployment and lifecycle of services, as defined [here](deploy.md). + + ### device_cgroup_rules `device_cgroup_rules` defines a list of device cgroup rules for this container. @@ -647,11 +671,13 @@ device_cgroup_rules: ### devices -`devices` defines a list of device mappings for created containers. +`devices` defines a list of device mappings for created containers in the form of +`HOST_PATH:CONTAINER_PATH[:CGROUP_PERMISSIONS]`. ```yml devices: - "/dev/ttyUSB0:/dev/ttyUSB0" + - "/dev/sda:/dev/xvda:rwm" ``` ### dns @@ -765,7 +791,7 @@ VAR="quoted" ### environment `environment` defines environment variables set in the container. `environment` can use either an array or a -map. Any boolean values; true, false, yes, no, MUST be enclosed in quotes to ensure +map. Any boolean values; true, false, yes, no, SHOULD be enclosed in quotes to ensure they are not converted to True or False by the YAML parser. Environment variables MAY be declared by a single key (no value to equals sign). In such a case Compose @@ -1014,7 +1040,9 @@ external_links: ### extra_hosts `extra_hosts` adds hostname mappings to the container network interface configuration (`/etc/hosts` for Linux). -Values MUST set hostname and IP address for additional hosts in the form of `HOSTNAME:IP`. + +#### Short syntax +Short syntax use plain strings in a list. Values MUST set hostname and IP address for additional hosts in the form of `HOSTNAME:IP`. ```yml extra_hosts: @@ -1022,6 +1050,15 @@ extra_hosts: - "otherhost:50.31.209.229" ``` +#### Long syntax +Alternatively, `extra_hosts` can be set as a mapping between hostname(s) and IP(s) + +```yml +extra_hosts: + somehost: "162.242.195.82" + otherhost: "50.31.209.229" +``` + Compose implementations MUST create matching entry with the IP address and hostname in the container's network configuration, which means for Linux `/etc/hosts` will get extra lines: @@ -1108,7 +1145,7 @@ as `[/][/][:|@]`. ```yml image: redis image: redis:5 - image: redis@sha356:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7 + image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7 image: library/redis image: docker.io/library/redis image: my_private.registry:5000/redis @@ -1151,6 +1188,17 @@ which MUST be implemented as described if supported: ipc: "service:[service name]" ``` +### uts + +`uts` configures the UTS namespace mode set for the service container. When unspecified +it is the runtime's decision to assign a UTS namespace, if supported. Available values are: + +- `'host'` which results in the container using the same UTS namespace as the host. + +```yml + uts: "host" +``` + ### isolation `isolation` specifies a container’s isolation technology. Supported values are platform-specific. @@ -1432,9 +1480,11 @@ be within [-1000,1000] range. `pid` sets the PID mode for container created by the Compose implementation. Supported values are platform specific. -### pid_limit +### pids_limit -`pid_limit` tunes a container’s PIDs limit. Set to -1 for unlimited PIDs. +_DEPRECATED: use [deploy.reservations.pids](deploy.md#pids)_ + +`pids_limit` tunes a container’s PIDs limit. Set to -1 for unlimited PIDs. ```yml pids_limit: 10 @@ -1443,11 +1493,13 @@ pids_limit: 10 ### platform `platform` defines the target platform containers for this service will run on, using the `os[/arch[/variant]]` syntax. +The values of `os`, `arch`, and `variant` MUST conform to the convention used by the [OCI Image Spec](https://github.com/opencontainers/image-spec/blob/v1.0.2/image-index.md). + Compose implementation MUST use this attribute when declared to determine which version of the image will be pulled and/or on which platform the service’s build will be performed. ```yml -platform: osx +platform: darwin platform: windows/amd64 platform: linux/arm64/v8 ``` @@ -1459,7 +1511,7 @@ Port mapping MUST NOT be used with `network_mode: host` and doing so MUST result #### Short syntax -The short syntax is a comma-separated string to set host IP, host port and container port +The short syntax is a colon-separated string to set host IP, host port and container port in the form: `[HOST:]CONTAINER[/PROTOCOL]` where: @@ -1487,6 +1539,7 @@ ports: - "8000:8000" - "9090-9091:8080-8081" - "49100:22" + - "8000-9000:80" - "127.0.0.1:8001:8001" - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp" @@ -1501,14 +1554,22 @@ The long form syntax allows the configuration of additional fields that can't be expressed in the short form. - `target`: the container port -- `published`: the publicly exposed port +- `published`: the publicly exposed port. Can be set as a range using syntax `start-end`, so it is defined as a string, then actual port SHOULD be assigned within this range based on available ports. +- `host_ip`: the Host IP mapping, unspecified means all network interfaces (`0.0.0.0`) - `protocol`: the port protocol (`tcp` or `udp`), unspecified means any protocol - `mode`: `host` for publishing a host port on each node, or `ingress` for a port to be load balanced. ```yml ports: - target: 80 - published: 8080 + host_ip: 127.0.0.1 + published: "8080" + protocol: tcp + mode: host + + - target: 80 + host_ip: 127.0.0.1 + published: "8000-9000" protocol: tcp mode: host ``` @@ -1574,13 +1635,13 @@ web: ### scale --DEPRECATED: use [deploy/replicas](deploy.md#replicas)_ +_DEPRECATED: use [deploy/replicas](deploy.md#replicas)_ `scale` specifies the default number of containers to deploy for this service. ### secrets -`secrets` grants access to sensitive data defined by [secrets](secrets) on a per-service basis. Two +`secrets` grants access to sensitive data defined by [secrets](#secrets) on a per-service basis. Two different syntax variants are supported: the short syntax and the long syntax. Compose implementations MUST report an error if the secret doesn't exist on the platform or isn't defined in the @@ -1615,7 +1676,7 @@ the service's containers. - `source`: The name of the secret as it exists on the platform. - `target`: The name of the file to be mounted in `/run/secrets/` in the - service's task containers. Defaults to `source` if not specified. + service's task container, or absolute path of the file if an alternate location is required. Defaults to `source` if not specified. - `uid` and `gid`: The numeric UID or GID that owns the file within `/run/secrets/` in the service's task containers. Default value is USER running container. - `mode`: The [permissions](http://permissions-calculator.org/) for the file to be mounted in `/run/secrets/` @@ -1626,7 +1687,7 @@ the service's containers. The following example sets the name of the `server-certificate` secret file to `server.crt` within the container, sets the mode to `0440` (group-readable) and sets the user and group to `103`. The value of `server-certificate` secret is provided by the platform through a lookup and -the secret lifecycle not directly managed by the Compose implementation. +the secret lifecycle is not directly managed by the Compose implementation. ```yml services: @@ -1644,7 +1705,7 @@ secrets: ``` Services MAY be granted access to multiple secrets. Long and short syntax for secrets MAY be used in the -same Compose file. Defining a secret in the top-level `secrets` MUTS NOT imply granting any service access to it. +same Compose file. Defining a secret in the top-level `secrets` MUST NOT imply granting any service access to it. Such grant must be explicit within service specification as [secrets](#secrets) service element. ### security_opt @@ -1689,6 +1750,15 @@ If unset containers are stopped by the Compose Implementation by sending `SIGTER stop_signal: SIGUSR1 ``` +### storage_opt + +`storage_opt` defines storage driver options for a service. + +```yml +storage_opt: + size: '1G' +``` + ### sysctls `sysctls` defines kernel parameters to set in the container. `sysctls` can use either an array or a map. @@ -1788,11 +1858,18 @@ volumes: #### Short syntax -The short syntax uses a single string with comma-separated values to specify a volume mount -(`VOLUME:CONTAINER_PATH`), or an access mode (`VOLUME:CONTAINER:ACCESS_MODE`). +The short syntax uses a single string with colon-separated values to specify a volume mount +(`VOLUME:CONTAINER_PATH`), or an access mode (`VOLUME:CONTAINER_PATH:ACCESS_MODE`). + +- `VOLUME`: MAY be either a host path on the platform hosting containers (bind mount) or a volume name +- `CONTAINER_PATH`: the path in the container where the volume is mounted +- `ACCESS_MODE`: is a comma-separated `,` list of options and MAY be set to: + - `rw`: read and write access (default) + - `ro`: read-only access + - `z`: SELinux option indicates that the bind mount host content is shared among multiple containers + - `Z`: SELinux option indicates that the bind mount host content is private and unshared for other containers -`VOLUME` MAY be either a host path on the platform hosting containers (bind mount) or a volume name. -`ACCESS_MODE` MAY be set as read-only by using `ro` or read and write by using `rw` (default). +> **Note**: The SELinux re-labeling bind mount option is ignored on platforms without SELinux. > **Note**: Relative host paths MUST only be supported by Compose implementations that deploy to a > local container runtime. This is because the relative path is resolved from the Compose file’s parent @@ -1813,10 +1890,15 @@ expressed in the short form. - `read_only`: flag to set the volume as read-only - `bind`: configure additional bind options - `propagation`: the propagation mode used for the bind + - `create_host_path`: create a directory at the source path on host if there is nothing present. + Do nothing if there is something present at the path. This is automatically implied by short syntax + for backward compatibility with docker-compose legacy. + - `selinux`: the SELinux re-labeling option `z` (shared) or `Z` (private) - `volume`: configure additional volume options - `nocopy`: flag to disable copying of data from a container when a volume is created - `tmpfs`: configure additional tmpfs options - - `size`: the size for the tmpfs mount in bytes + - `size`: the size for the tmpfs mount in bytes (either numeric or as bytes unit) + - `mode`: the filemode for the tmpfs mount as Unix permission bits as an octal number - `consistency`: the consistency requirements of the mount. Available values are platform specific ### volumes_from @@ -2002,6 +2084,9 @@ Compose implementations MUST set `com.docker.compose.project` and `com.docker.co If set to `true`, `external` specifies that this network’s lifecycle is maintained outside of that of the application. Compose Implementations SHOULD NOT attempt to create these networks, and raises an error if one doesn't exist. +If `external` is set to `true` and network configuration has other but `name` attributes set, considering resource is +not managed by compose lifecycle, Compose Implementations SHOULD reject a Compose file as invalid. + In the example below, `proxy` is the gateway to the outside world. Instead of attempting to create a network, Compose implementations SHOULD interrogate the platform for an existing network simply called `outside` and connect the `proxy` service's containers to it. @@ -2051,8 +2136,8 @@ Volumes are persistent data stores implemented by the platform. The Compose spec for services to mount volumes, and configuration parameters to allocate them on infrastructure. The `volumes` section allows the configuration of named volumes that can be reused across multiple services. Here's -an example of a two-service setup where a database's data directory is shared with another service as a volume so -that it can be periodically backed up: +an example of a two-service setup where a database's data directory is shared with another service as a volume named +`db-data` so that it can be periodically backed up: ```yml services: @@ -2100,9 +2185,13 @@ If set to `true`, `external` specifies that this volume already exist on the pla of that of the application. Compose implementations MUST NOT attempt to create these volumes, and MUST return an error if they do not exist. +If `external` is set to `true` and volume configuration has other but `name` attributes set, considering resource is +not managed by compose lifecycle, Compose Implementations SHOULD reject a Compose file as invalid. + + In the example below, instead of attempting to create a volume called -`{project_name}_data`, Compose looks for an existing volume simply -called `data` and mount it into the `db` service's containers. +`{project_name}_db-data`, Compose looks for an existing volume simply +called `db-data` and mounts it into the `backend` service's containers. ```yml services: @@ -2204,7 +2293,7 @@ configs: file: ./httpd.conf ``` -Alternatively, `http_config` can be declared as external, doing so Compose implementation will lookup `server-certificate` to expose configuration data to relevant services. +Alternatively, `http_config` can be declared as external, doing so Compose implementation will lookup `http_config` to expose configuration data to relevant services. ```yml configs: @@ -2224,6 +2313,9 @@ configs: name: "${HTTP_CONFIG_KEY}" ``` +If `external` is set to `true` and secret configuration has other but `name` attributes set, considering resource is +not managed by compose lifecycle, Compose Implementations SHOULD reject a Compose file as invalid. + Compose file need to explicitly grant access to the configs to relevant services in the application. ## Secrets top-level element @@ -2234,13 +2326,14 @@ The top-level `secrets` declaration defines or references sensitive data that ca application. The source of the secret is either `file` or `external`. - `file`: The secret is created with the contents of the file at the specified path. +- `environment`: The secret is created with the value of an environment variable. - `external`: If set to true, specifies that this secret has already been created. Compose implementation does not attempt to create it, and if it does not exist, an error occurs. - `name`: The name of the secret object in Docker. This field can be used to reference secrets that contain special characters. The name is used as is and will **not** be scoped with the project name. -In this example, `server-certificate` is created as `_server-certificate` when the application is deployed, +In this example, `server-certificate` secret is created as `_server-certificate` when the application is deployed, by registering content of the `server.cert` as a platform secret. ```yml @@ -2249,6 +2342,15 @@ secrets: file: ./server.cert ``` +In this example, `token` secret is created as `_token` when the application is deployed, +by registering content of the `OAUTH_TOKEN` environment variable as a platform secret. + +```yml +secrets: + token: + environment: "OAUTH_TOKEN" +``` + Alternatively, `server-certificate` can be declared as external, doing so Compose implementation will lookup `server-certificate` to expose secret to relevant services. ```yml @@ -2269,6 +2371,9 @@ secrets: name: "${CERTIFICATE_KEY}" ``` +If `external` is set to `true` and secret configuration has other but `name` attributes set, considering resource is +not managed by compose lifecycle, Compose Implementations SHOULD reject a Compose file as invalid. + Compose file need to explicitly grant access to the secrets to relevant services in the application. ## Fragments @@ -2413,6 +2518,12 @@ Similarly, the following syntax allows you to specify mandatory variables: - `${VARIABLE?err}` exits with an error message containing `err` if `VARIABLE` is unset in the environment. +Interpolation can also be nested: + +- `${VARIABLE:-${FOO}}` +- `${VARIABLE?$FOO}` +- `${VARIABLE:-${FOO:-default}}` + Other extended shell-style features, such as `${VARIABLE/foo/bar}`, are not supported by the Compose specification.