From 7fed5214ccfebec7da9e739dc6a4e5becde664bf Mon Sep 17 00:00:00 2001 From: Ralph Bisschops Date: Thu, 27 May 2021 10:07:04 +0000 Subject: [PATCH 01/54] Add comments to `wait-for-postgres.sh` Add additional comment to explain code --- compose/startup-order.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/compose/startup-order.md b/compose/startup-order.md index a9b1a5e081..e432ee1810 100644 --- a/compose/startup-order.md +++ b/compose/startup-order.md @@ -68,14 +68,25 @@ script: set -e host="$1" + # Shift arguments with mapping: + # - $0 => $0 + # - $1 => + # - $2 => $1 + # - $3 => $2 + # - ... + # This is done for `exec "$@"` below to work correctly shift + # Login for user (`-U`) and once logged in execute quit ( `-c \q` ) + # If we can not login sleep for 1 sec until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do >&2 echo "Postgres is unavailable - sleeping" sleep 1 done >&2 echo "Postgres is up - executing command" + # Print and execute all other arguments starting with `$1` + # So `exec "$1" "$2" "$3" ...` exec "$@" ``` From 6dffa078a81e60ebad26ff133e807cacc6487bb0 Mon Sep 17 00:00:00 2001 From: glours Date: Tue, 18 Oct 2022 17:40:33 +0000 Subject: [PATCH 02/54] Update Compose reference API to v2.12.0 Signed-off-by: GitHub --- _config.yml | 2 +- _data/compose-cli/docker_compose_push.yaml | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 842e2f7974..4ee496c47c 100644 --- a/_config.yml +++ b/_config.yml @@ -41,7 +41,7 @@ exclude: latest_engine_api_version: "1.41" docker_ce_version: "20.10" compose_v1_version: "1.29.2" -compose_version: "v2.11.2" +compose_version: "v2.12.0" compose_file_v3: "3.9" compose_file_v2: "2.4" machine_version: "0.16.0" diff --git a/_data/compose-cli/docker_compose_push.yaml b/_data/compose-cli/docker_compose_push.yaml index d4dbb14269..72c7575515 100644 --- a/_data/compose-cli/docker_compose_push.yaml +++ b/_data/compose-cli/docker_compose_push.yaml @@ -33,6 +33,17 @@ options: experimentalcli: false kubernetes: false swarm: false + - option: quiet + shorthand: q + value_type: bool + default_value: "false" + description: Push without printing progress information + deprecated: false + hidden: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false deprecated: false experimental: false experimentalcli: false From 8f77e5556761e7e6e1f660eff2cbe751aee68237 Mon Sep 17 00:00:00 2001 From: David Karlsson Date: Wed, 19 Oct 2022 15:52:14 +0200 Subject: [PATCH 03/54] rename master -> main --- Dockerfile | 2 +- _includes/analytics/polldaddy.html | 2 +- _layouts/docs.html | 2 +- contribute/contribute-guide.md | 10 +++++----- engine/reference/commandline/README.md | 2 +- glossary.md | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0784f49836..aa2477f41a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 # This Dockerfile builds the docs for https://docs.docker.com/ -# from the master branch of https://github.com/docker/docs +# from the main branch of https://github.com/docker/docs # Use same ruby version as the one in .ruby-version # that is used by Netlify diff --git a/_includes/analytics/polldaddy.html b/_includes/analytics/polldaddy.html index 0a4b99eb0a..5a0c058d47 100644 --- a/_includes/analytics/polldaddy.html +++ b/_includes/analytics/polldaddy.html @@ -7,7 +7,7 @@ "font_family": "Open Sans, sans serif", "font_color": "b9c2cc", "font_align": "center", - "permalink": "{{ site.repo }}/blob/master/{{ page.path }}" + "permalink": "{{ site.repo }}/blob/main/{{ page.path }}" }; (function (d, c, j) { if (!document.getElementById(j)) { diff --git a/_layouts/docs.html b/_layouts/docs.html index a5326e1efd..64e3e5f34e 100644 --- a/_layouts/docs.html +++ b/_layouts/docs.html @@ -3,7 +3,7 @@ {%- if page.edit_url -%} {%- assign edit_url = page.edit_url -%} {%- else -%} - {% capture edit_url %}{{ site.repo }}/edit/master/{{ page.path }}{% endcapture %} + {% capture edit_url %}{{ site.repo }}/edit/main/{{ page.path }}{% endcapture %} {%- endif -%} {%- if page.issue_url -%} {%- assign issue_url = page.issue_url -%} diff --git a/contribute/contribute-guide.md b/contribute/contribute-guide.md index 94459294b1..5d800b5f6b 100644 --- a/contribute/contribute-guide.md +++ b/contribute/contribute-guide.md @@ -4,7 +4,7 @@ description: Guidelines for contributing to Docker's docs keywords: contribute, guide, style guide --- -The live docs are published from the `master` branch. Therefore, you must create pull requests against the `master` branch for all content updates. This includes: +The live docs are published from the `main` branch. Therefore, you must create pull requests against the `main` branch for all content updates. This includes: - Conceptual and task-based information - Restructuring / rewriting @@ -17,7 +17,7 @@ There are two ways to contribute a pull request to the docs repository: This opens the GitHub editor, which means you don't need to know a lot about Git, or even about Markdown. When you save, Git prompts you to create a fork if you don't already have one, and to create a branch in your fork and submit the pull request. -2. Fork the [docs GitHub repository]({{ site.repo }}). Suggest changes or add new content on your local branch, and submit a pull request (PR) to the `master` branch. +2. Fork the [docs GitHub repository]({{ site.repo }}). Suggest changes or add new content on your local branch, and submit a pull request (PR) to the `main` branch. This is the manual, more advanced version of clicking 'Edit this page' on a published docs page. Initiating a docs changes in a PR from your own branch gives you more flexibility, as you can submit changes to multiple pages or files under a single pull request, and even create new topics. @@ -44,7 +44,7 @@ Help us review your PRs more quickly by following these guidelines. - Don't change whitespace or line wrapping in parts of a file you are not editing for other reasons. Make sure your text editor is not configured to automatically reformat the whole file when saving. - We highly recommend that you [build](#build-and-preview-the-docs-locally) and [test](#test-the-docs-locally) the docs locally before submitting a PR. -- A Netlify test runs for each PR that is against the `master` branch, and deploys the result of your PR to a staging site. The URL will be available at in the **Conversation** tab. Check the staging site to verify how your changes look and fix issues, if necessary. +- A Netlify test runs for each PR that is against the `main` branch, and deploys the result of your PR to a staging site. The URL will be available at in the **Conversation** tab. Check the staging site to verify how your changes look and fix issues, if necessary. ### Collaborate on a pull request @@ -56,11 +56,11 @@ given file in the **Files** view. If a PR consists of multiple small addendum commits on top of a more significant one, the commit will usually be "squash-merged", so that only one commit is -merged into the `master` branch. In some scenarios where a squash and merge isn't appropriate, all commits are kept separate when merging. +merged into the `main` branch. In some scenarios where a squash and merge isn't appropriate, all commits are kept separate when merging. ### Per-PR staging on GitHub -A Netlify test runs for each PR created against the `master` branch and deploys the result of your PR to a staging site. When the site builds successfully, you will see a comment in the **Conversation** tab in the PR stating **Deploy Preview for docsdocker ready!**. Click the **Browse the preview** URL and check the staging site to verify how your changes look and fix issues, if necessary. Reviewers also check the staged site before merging the PR to protect the integrity of the docs site. +A Netlify test runs for each PR created against the `main` branch and deploys the result of your PR to a staging site. When the site builds successfully, you will see a comment in the **Conversation** tab in the PR stating **Deploy Preview for docsdocker ready!**. Click the **Browse the preview** URL and check the staging site to verify how your changes look and fix issues, if necessary. Reviewers also check the staged site before merging the PR to protect the integrity of the docs site. ## Build and preview the docs locally diff --git a/engine/reference/commandline/README.md b/engine/reference/commandline/README.md index 350ad2a217..e20e394308 100644 --- a/engine/reference/commandline/README.md +++ b/engine/reference/commandline/README.md @@ -25,5 +25,5 @@ The process for generating the YAML files is still in flux. Check with release branch of `docker/cli`, for example, the `19.03` branch. After generating the YAML files, replace the YAML files in -[https://github.com/docker/docs/tree/master/_data/engine-cli](https://github.com/docker/docs/tree/master/_data/engine-cli) +[https://github.com/docker/docs/tree/main/_data/engine-cli](https://github.com/docker/docs/tree/main/_data/engine-cli) with the newly-generated files. Submit a pull request. diff --git a/glossary.md b/glossary.md index cee21867c2..ab331359c4 100644 --- a/glossary.md +++ b/glossary.md @@ -11,7 +11,7 @@ redirect_from: --- +
+
+
+
+ Hardened Desktop +
+

Settings Management

+

Learn how Settings Management can secure your developers' workflows.

+
+
+
+
+
+ Release notes +
+

Enhanced Container Isolation

+

Understand how Enhanced Container Isolation can prevent container attacks.

+
+
+
+
+
+ Hardened Desktop +
+

Registry Access Management

+

Control the registries developers can access while using Docker Desktop.

+
+
+
+ + diff --git a/desktop/hardened-desktop/registry-access-management.md b/desktop/hardened-desktop/registry-access-management.md new file mode 100644 index 0000000000..81660f8350 --- /dev/null +++ b/desktop/hardened-desktop/registry-access-management.md @@ -0,0 +1,63 @@ +--- +description: Registry Access Management +keywords: registry, access, managment +title: Registry Access Management +redirect_from: +- /docker-hub/registry-access-management/ +--- + +>Note +> +>Registry Access Management is available to Docker Business customers only. + +With Registry Access Management, administrators can ensure that their developers using Docker Desktop only access registries that are allowed. This is done through the Registry Access Management dashboard on Docker Hub. + +Below are some example registries administrators can allow: + - Docker Hub. This is enabled by default. + - Amazon ECR + - GitHub Container Registry + - Google Container Registry + +Administrators can ensure registries are locked in and cannot be edited by developers, if Enhanced Container Isolation is switched on. To learn more, see [Enhanced Container Isolation](enhanced-container-isolation/index.md). + +## Prerequisites + +You need to [configure a registry.json to enforce sign-in](../../docker-hub/configure-sign-in.md). For Registry Access Management to take effect, Docker Desktop users must authenticate to your organization. + +## Configure Registry Access Management permissions + +To configure Registry Access Management permissions: + +1. Sign in to your [Docker Hub](https://hub.docker.com){: target="_blank" rel="noopener" class="_"} account as an organization owner. +2. Select an organization and then navigate to the **Settings** tab on the **Organizations** page and select **Registry Access**. +3. Toggle on Registry Access Management to set the permissions for your registry. + + > **Note** + > + > When enabled, the Docker Hub registry is set by default, however you can also restrict this registry for your developers. + +4. To add registries to your list, select **Add** and enter your registry details in the applicable fields, then select **Create**. +5. Verify that the registry appears in your list and select **Save & Apply**. You can verify that your changes are saved in the **Activity** tab. There is no limit on the number of registries you can add. + + > **Note** + > + > Once you add a registry, it takes up to 24 hours for the changes to be enforced on your developers’ machines. If you want to apply the changes sooner, you must force a Docker logout on your developers’ machine and have the developers re-authenticate for Docker Desktop. + +![Registry Access Management](../../docker-hub/images/registry-access-management.png){:width="700px"} + +## Verify the restrictions + +The new Registry Access Management policy takes effect after the developer successfully authenticates to Docker Desktop using their organization credentials. If a developer attempts to pull an image from a disallowed registry via the Docker CLI, they receive an error message that the organization has disallowed this registry. + +## Known issues + +There are certain limitations when using Registry Access Management: + +- Windows image pulls, and image builds are not restricted +- Builds such as `docker buildx` using a Kubernetes driver are not restricted +- Builds such as `docker buildx` using a custom docker-container driver are not restricted +- Blocking is DNS-based; you must use a registry's access control mechanisms to distinguish between “push” and “pull” +- WSL 2 requires at least a 5.4 series Linux kernel (this does not apply to earlier Linux kernel series) +- Under the WSL 2 network, traffic from all Linux distributions is restricted (this will be resolved in the updated 5.15 series Linux kernel) + +Also, Registry Access Management operates on the level of hosts, not IP addresses. Developers can bypass this restriction within their domain resolution, for example by running Docker against a local proxy or modifying their operating system's `sts` file. Docker Desktop does not support blocking these forms of manipulation. diff --git a/desktop/hardened-desktop/settings-management/configure.md b/desktop/hardened-desktop/settings-management/configure.md new file mode 100644 index 0000000000..eb1fc029a4 --- /dev/null +++ b/desktop/hardened-desktop/settings-management/configure.md @@ -0,0 +1,137 @@ +--- +description: settings management for desktop +keywords: admin, controls, rootless, enhanced container isolation +title: Configure Settings Management +--- + +>**Note** +> +>Settings Management is available to Docker Business customers only. + +This page contains information for admins on how to configure Settings Management to specify and lock configuration parameters to create a standardized Docker Desktop environment across the organization. + +Settings Management is designed specifically for organizations who don’t give developers root access to their machines. + +### Prerequisites + +- [Download and install Docker Desktop 4.13.0 or later](../../release-notes.md). +- As an admin, you need to [configure a registry.json to enforce sign-in](../../../docker-hub/configure-sign-in.md). This is because this feature requires a Docker Business subscription and therefore your Docker Desktop users must authenticate to your organization for this configuration to take effect. + +### Step one: Create the `admin-settings.json` file and save it in the correct location + +You can either use the `--admin-settings` installer flag on [macOS](../../install/mac-install.md#install-from-the-command-line) or [Windows](../../install/windows-install.md#install-from-the-command-line) to automatically create the `admin-settings.json` and save it in the correct location, or set it up manually. + +To set it up manually: +1. Create a new, empty JSON file and name it `admin-settings`. +2. Save the `admin-settings.json` file on your developers' machines in the following locations: + + - Mac: `/Library/Application\ Support/com.docker.docker/admin-settings.json` + - Windows: `C:\ProgramData\DockerDesktop\admin-settings.json` + - Linux: `/usr/share/docker-desktop/admin-settings.json` + + By placing this file in the above protected directories, end users are unable to modify it. + + >**Note** + > + > It is assumed that you have the ability to push the `admin-settings.json` settings file to the locations specified above through a device management software such as [Jamf](https://www.jamf.com/lp/en-gb/apple-mobile-device-management-mdm-jamf-shared/?attr=google_ads-brand-search-shared&gclid=CjwKCAjw1ICZBhAzEiwAFfvFhEXjayUAi8FHHv1JJitFPb47C_q_RCySTmF86twF1qJc_6GST-YDmhoCuJsQAvD_BwE). + +### Step two: Configure the settings you want to lock in + +>**Note** +> +>Some of the configuration parameters only apply to Windows. This is highlighted in the table below. + +The `admin-settings.json` file requires a nested list of configuration parameters, each of which must contain the `locked` parameter. You can add or remove configuration parameters as per your requirements. + +If `locked: true`, users aren't able to edit this setting from Docker Desktop or the CLI. + +If `locked: false`, it's similar to setting a factory default in that: +- For new installs, `locked: false` pre-populates the relevant settings in the Docker Desktop UI, but users are able to modify it. + +- If Docker Desktop is already installed and being used, `locked: false` is ignored. This is because existing users of Docker Desktop may have already updated a setting, which in turn will have been written to the relevant config file, for example the `settings.json` or `daemon.json`. In these instances, the user's preferences are respected and we don't alter these values. These can be controlled by the admin by setting `locked: true`. + +The following `admin-settings.json` code and table provides an example of the required syntax and descriptions for parameters and values: + +```json +{ + "configurationFileVersion": 2, + "exposeDockerAPIOnTCP2375": { + "locked": true, + "value": false + }, + "proxy": { + "locked": true, + "mode": "system", + "http": "", + "https": "", + "exclude": [] + }, + "enhancedContainerIsolation": { + "locked": true, + "value": true + }, + "linuxVM": { + "wslEngineEnabled": { + "locked": false, + "value": false + }, + "dockerDaemonOptions": { + "locked": false, + "value":"{\"debug\": false}" + }, + "vpnkitCIDR": { + "locked": false, + "value":"192.168.65.0/24" + } + }, + "windowsContainers": { + "dockerDaemonOptions": { + "locked": false, + "value":"{\"debug\": false}" + } + }, + "disableUpdate": { + "locked": false, + "value": false + }, + "analyticsEnabled": { + "locked": false, + "value": true + } +} +``` + +| Parameter | | Description | +| :------------------------------- |---| :------------------------------- | +| `configurationFileVersion` | |Specifies the version of the configuration file format. | +| `exposeDockerAPIOnTCP2375` | Windows only| Exposes the Docker API on a specified port. If `value` is set to true, the Docker API is exposed on port 2375. Note: This is unauthenticated and should only be enabled if protected by suitable firewall rules.| +| `proxy` | |If `mode` is set to `system` instead of `manual`, Docker Desktop gets the proxy values from the system and ignores and values set for `http`, `https` and `exclude`. Change `mode` to `manual` to manually configure proxy servers. If the proxy port is custom, specify it in the `http` or `https` property, for example `"https": "http://myotherproxy.com:4321"`. The `exclude` property specifies a comma-separated list of hosts and domains to bypass the proxy. | +| `enhancedContainerIsolation` | | If `value` is set to true, Docker Desktop runs all containers as unprivileged, via the Linux user-namespace, prevents them from modifying sensitive configurations inside the Docker Desktop VM, and uses other advanced techniques to isolate them. For more information, see [Enhanced Container Isolation](../enhanced-container-isolation/index.md). Note: Enhanced Container Isolation is currently [incompatible with WSL](../enhanced-container-isolation/faq.md#incompatibility-with-windows-subsystem-for-linux-wsl). | +| `linuxVM` | |Parameters and settings related to Linux VM options - grouped together here for convenience. | +|        `wslEngineEnabled` | Windows only | If `value` is set to true, Docker Desktop uses the WSL 2 based engine. This overrides anything that may have been set at installation using the `--backend=` flag. It is also incompatible with Enhanced Container Isolation. See [Known issues](../enhanced-container-isolation/faq.md) for more information.| +|       `dockerDaemonOptions`| |If `value` is set to true, it overrides the options in the Docker Engine config file. See the [Docker Engine reference](/engine/reference/commandline/dockerd/#daemon-configuration-file). Note that for added security, a few of the config attributes may be overridden when Enhanced Container Isolation is enabled. | +|       `vpnkitCIDR` | |Overrides the network range used for vpnkit DHCP/DNS for `*.docker.internal` | +| `windowsContainers` | | Parameters and settings related to `windowsContainers` options - grouped together here for convenience. | +|        `dockerDaemonOptions` | | Overrides the options in the linux daemon config file. See the [Docker Engine reference](/engine/reference/commandline/dockerd/#daemon-configuration-file).| | +|`disableUpdate`| |If `value` is set to true, checking for and notifications about Docker Desktop updates is disabled.| +|`analyticsEnabled`| |If `value` is set to false, Docker Desktop doesn't send usage statistics to Docker. | + +### Step three: Re-launch Docker Desktop +>**Note** +> +>Administrators should test the changes made through the `admin-settings.json` file locally to see if the settings work as expected. + +For settings to take effect: +- On a new install, developers need to launch Docker Desktop and authenticate to their organization. +- On an existing install, developers need to quit Docker Desktop through the Docker menu, and then relaunch Docker Desktop. If they are already signed in, they don't need to sign in again for the changes to take effect. + >**Important** + > + >Selecting **Restart** from the Docker menu isn't enough as it only restarts some components of Docker Desktop. + {: .important} + +Docker doesn't automatically mandate that developers re-launch and sign in once a change has been made so as not to disrupt your developers' workflow. + + +In Docker Desktop, developers see the relevant settings grayed out and the message **Locked by your administrator**. + +![Proxy settings grayed out](/assets/images/grayed-setting.png){:width="750px"} diff --git a/desktop/hardened-desktop/settings-management/index.md b/desktop/hardened-desktop/settings-management/index.md new file mode 100644 index 0000000000..f74e6a0fd4 --- /dev/null +++ b/desktop/hardened-desktop/settings-management/index.md @@ -0,0 +1,58 @@ +--- +description: Settings Management for desktop +keywords: Settings Management, rootless, docker desktop, hardened desktop +title: What is Settings Management? +--- +>**Note** +> +>Settings Management is available to Docker Business customers only. + +Settings Management is a feature that helps admins to control certain Docker Desktop settings on client machines within their organization. + +With a few lines of JSON, admins can configure controls for Docker Desktop settings such as proxies and network settings. For an extra layer of security, admins can also use Settings Management to enable [Enhanced Container Isolation](../enhanced-container-isolation/index.md) which ensures that any configurations set with Settings Management cannot be modified by containers. + +It is available with [Docker Desktop 4.13.0 or later](../../release-notes.md). + +### Who is it for? + +- For Organizations who wish to configure Docker Desktop to be within their organization's centralized control. +- For Organizations who want to create a standardized Docker Desktop environment at scale. +- For Docker Business customers who want to confidently manage their use of Docker Desktop within tightly regulated environments. + +### How does it work? + +Administrators can configure several Docker Desktop settings using an `admin-settings.json` file. This file is located on the Docker Desktop host and can only be accessed by users with root or admin privileges. + +Values that are set to `locked: true` within the `admin-settings.json` override any previous values set by users and ensure that these cannot be modified. For more information, see [Configure Settings Management](../settings-management/configure.md#step-two-configure-the-settings-you-want-to-lock-in). + +### What features can I configure with Settings Management? + +Using the `admin-settings.json` file, admins can: + +- Enable [Enhanced Container Isolation](../enhanced-container-isolation/index.md) (currently incompatible with WSL) +- Configure HTTP proxies +- Configure network settings +- Enforce the use of WSL2 based engine or Hyper-V +- Configure Docker Engine +- Turn off Docker Desktop's ability to checks for updates +- Turn off Docker Desktop's ability to send usage statistics + +For more details on the syntax and options admins can set, see [Configure Settings Management](configure.md). + +### How do I set up and enforce Settings Management? + +As an administrator, you first need to [configure a registry.json to enforce sign-in](../../../docker-hub/configure-sign-in.md). This is because the Settings Management feature requires a Docker Business subscription and therefore your Docker Desktop users must authenticate to your organization for this configuration to take effect. + +Next, you must either manually [create and configure the admin-settings.json file](configure.md), or use the `--admin-settings` installer flag on [macOS](../../install/mac-install.md#install-from-the-command-line) or [Windows](../../install/windows-install.md#install-from-the-command-line) to automatically create the `admin-settings.json` and save it in the correct location. + +Once this is done, Docker Desktop users receive the changed settings when they either: +- Quit, re-launch, and sign in to Docker Desktop +- Launch and sign in to Docker Desktop for the first time + +Docker doesn't automatically mandate that developers re-launch and re-authenticate once a change has been made, so as not to disrupt your developers' workflow. + +### What do users see when the settings are enforced? + +Any settings that are enforced, are grayed out in Docker Desktop and the user is unable to edit them, either via the Docker Desktop UI, CLI, or the `settings.json` file. In addition, if Enhanced Container Isolation is enforced, users can't use privileged containers or similar techniques to modify enforced settings within the Docker Desktop Linux VM, for example, reconfigure proxy and networking of reconfigure Docker Engine. + +![Proxy settings grayed out](/assets/images/grayed-setting.png){:width="750px"} diff --git a/desktop/install/mac-install.md b/desktop/install/mac-install.md index 36f56cd644..ead6eb05f9 100644 --- a/desktop/install/mac-install.md +++ b/desktop/install/mac-install.md @@ -100,6 +100,10 @@ The `install` command accepts the following flags: - `--accept-license`: accepts the [Docker Subscription Service Agreement](https://www.docker.com/legal/docker-subscription-service-agreement){: target="_blank" rel="noopener" class="_"} now, rather than requiring it to be accepted when the application is first run - `--allowed-org=`: requires the user to sign in and be part of the specified Docker Hub organization when running the application - `--user=`: Runs the privileged helper service once during installation, then disables it at runtime. This removes the need for the user to grant root privileges on first run. For more information, see [Privileged helper permission requirements](../mac/permission-requirements.md#permission-requirements){: target="_blank" rel="noopener" class="_"}. To find the username, enter `ls /Users` in the CLI. +- `--admin-settings`: Automatically creates an `admin-settings.json` file which is used by admins to control certain Docker Desktop settings on client machines within their organization. For more information, see [Settings Management](../hardened-desktop/settings-management/index.md). + - It must be used together with the `--allowed-org=` flag. + - For example: + `--allowed-org= --admin-settings='{"configurationFileVersion": 2, "enhancedContainerIsolation": {"value": true, "locked": false}}'` ## Where to go next diff --git a/desktop/install/windows-install.md b/desktop/install/windows-install.md index 57707d50ed..caf44f3523 100644 --- a/desktop/install/windows-install.md +++ b/desktop/install/windows-install.md @@ -158,6 +158,10 @@ The install command accepts the following flags: - `--no-windows-containers`: disables Windows containers integration - `--allowed-org=`: requires the user to sign in and be part of the specified Docker Hub organization when running the application - `--backend=`: selects the default backend to use for Docker Desktop, `hyper-v`, `windows` or `wsl-2` (default) +- `--admin-settings`: Automatically creates an `admin-settings.json` file which is used by admins to control certain Docker Desktop settings on client machines within their organization. For more information, see [Settings Management](../hardened-desktop/settings-management/index.md). + - It must be used together with the `--allowed-org=` flag. + - For example: + `--allowed-org= --admin-settings='{"configurationFileVersion": 2, "enhancedContainerIsolation": {"value": true, "locked": false}}'` If your admin account is different to your user account, you must add the user to the **docker-users** group: From a3ac93161403ed8c3cbafbd861a3590afda5b3d0 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Wed, 19 Oct 2022 16:19:52 +0100 Subject: [PATCH 06/54] ENGDOCS-999 (#15629) * ENGDOCS-999 * share to distribute * share to distribute * tweaks * caps fix * functionality amendment * feedback changes * review changes * feedback changes * Update desktop/dev-environments/create-compose-dev-env.md Co-authored-by: Han Yu Co-authored-by: Han Yu --- _data/toc.yaml | 8 ++-- .../create-compose-dev-env.md | 28 +++++++---- desktop/dev-environments/create-dev-env.md | 26 +++++----- desktop/dev-environments/index.md | 25 +++++----- desktop/dev-environments/share.md | 26 +++++----- desktop/dev-environments/specify.md | 45 ------------------ desktop/images/dev-env.PNG | Bin 62854 -> 92129 bytes 7 files changed, 59 insertions(+), 99 deletions(-) delete mode 100644 desktop/dev-environments/specify.md diff --git a/_data/toc.yaml b/_data/toc.yaml index 72a511ad04..9827ddfce8 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1296,13 +1296,11 @@ manuals: - path: /desktop/dev-environments/ title: Overview - path: /desktop/dev-environments/create-dev-env/ - title: Create a Dev Environment + title: Create a simple dev environment - path: /desktop/dev-environments/create-compose-dev-env/ - title: Create a Compose Dev Environment + title: Create an advanced dev environment - path: /desktop/dev-environments/share/ - title: Share your Dev Environment - - path: /desktop/dev-environments/specify/ - title: Specify a Dockerfile or base image + title: Distribute your dev environment - sectiontitle: Extensions (Beta) section: - path: /desktop/extensions/ diff --git a/desktop/dev-environments/create-compose-dev-env.md b/desktop/dev-environments/create-compose-dev-env.md index b867e7017b..aeeba201ec 100644 --- a/desktop/dev-environments/create-compose-dev-env.md +++ b/desktop/dev-environments/create-compose-dev-env.md @@ -1,12 +1,12 @@ --- description: Dev Environments keywords: Dev Environments, share, collaborate, local, compose -title: Create a Compose Dev Environment +title: Create an advanced dev environment --- -Use Dev Environments to collaborate on any Docker Compose-based projects. +Create an advanced dev environment such as a microservice with a server, proxy and DB. -As with a simple Dev Environment, you can create a Compose Dev Environment from a: +As with a simple dev environment, you can create a more advanced dev environment from a: - Git repository - Branch or tag of a Git repository - Subfolder of a Git repository @@ -22,12 +22,12 @@ The example below, taken from the `compose-dev-env` project from the [Docker Sam >Note > ->If you want to create a Compose Dev Environment from a subdirectory of a Git repo, you need to define your own compose file in a .docker folder located in your subdirectory as currently, Dev Environments is not able to detect the main language of the subdirectory. +>Currently, Dev Environments is not able to detect the main language of the subdirectory. You need to define your own base image or compose services in a `compose-dev.yaml` located in your subdirectory. > >For more information on how to configure, see the [React application with a Spring backend and a MySQL database sample](https://github.com/docker/awesome-compose/tree/master/react-java-mysql) or the [Go server with an Nginx proxy and a Postgres database sample](https://github.com/docker/awesome-compose/tree/master/nginx-golang-postgres). 1. From **Dev Environments**, select **Create**. The **Create a Dev Environment** dialog displays. -2. Click **Get Started** and then copy `https://github.com/dockersamples/compose-dev-env.git` and add it to the **Enter the Git Repository** field on the **Existing Git repo** tab. +2. Click **Get Started** and then copy `https://github.com/dockersamples/compose-dev-env.git` and add it to the **Enter the Git Repository** field with **Existing Git repo** as the source. 3. Click **Continue**. This initializes the project, clones the Git code, and builds the Compose application. This: - Builds local images for services that are defined in the Compose file @@ -43,13 +43,21 @@ Note that VS Code doesn't open directly, unlike a simple Dev Environment, as the You can now update your service and test it against your Compose application. -## Set up your own Compose Dev Environment +## Set up your own dev environment -To set up a Dev Environment for your own Compose-based project, there are additional configuration steps to tell Docker Desktop how to build, start, and use the right Dev Environment image for your services. +>**Changes to Dev Environments with Docker Desktop 4.13** +> +>Docker has simplified how you configure your dev environment project. All you need to get started is a `compose-dev.yaml` file. If you have an existing project with a `.docker/` folder this is automatically migrated the next time you launch. +> +> If you are using `.docker/docker-compose.yaml`, we move it to `../compose-dev.yaml`. +>If you are using `.docker/config.json`, we create a `../compose-dev.yaml` file with a single service named "app”. It is configured to use the image or Dockerfile referenced in the JSON as a starting point. +{: .important} -Dev Environments use an additional `docker-compose.yaml` file located in the `.docker` directory at the root of your project. This file allows you to define the image required for a dedicated service, the ports you'd like to expose, along with additional configuration options dedicated to Dev Environments coming in the future. +To set up a dev environment, there are additional configuration steps to tell Docker Desktop how to build, start, and use the right image for your services. -Take a detailed look at the `docker-compose.yaml` file used in the [compose-dev-env](https://github.com/dockersamples/compose-dev-env/blob/main/.docker/docker-compose.yaml){:target="_blank" rel="noopener" class="_"} sample project. +Dev Environments use an `compose-dev.yaml` file located in the at the root of your project. This file allows you to define the image required for a dedicated service, the ports you'd like to expose, along with additional configuration options dedicated to Dev Environments coming in the future. + +Take a detailed look at the `compose-dev.yaml` file used in the [compose-dev-env](https://github.com/dockersamples/compose-dev-env/blob/main/.docker/docker-compose.yaml){:target="_blank" rel="noopener" class="_"} sample project. ```yaml version: "3.7" @@ -120,4 +128,4 @@ In the example, the Docker Compose files are the same. However, they could be di ## What's next? -Learn how to [share your Dev Environment](share.md) +Learn how to [distribute your dev environment](share.md) diff --git a/desktop/dev-environments/create-dev-env.md b/desktop/dev-environments/create-dev-env.md index 753d3e40b8..1d296a8970 100644 --- a/desktop/dev-environments/create-dev-env.md +++ b/desktop/dev-environments/create-dev-env.md @@ -1,10 +1,10 @@ --- description: Dev Environments keywords: Dev Environments, share, collaborate, local -title: Create a Dev Environment +title: Create a simple dev environment --- -You can create a Dev Environment from a: +You can create a dev environment from a: - Git repository - Branch or tag of a Git repository - Subfolder of a Git repository @@ -12,7 +12,7 @@ You can create a Dev Environment from a: This did not conflict with any of the local files or local tooling set up on your host. -## Create a Dev Environment from a Git repository +## Create a dev environment from a Git repository The simplest way to get started with Dev Environments is to create a new environment by cloning the Git repository of the project you are working on. @@ -55,10 +55,10 @@ fi -To create a Dev Environment: +To create a dev environment: 1. From **Under Dev Environments** in Docker Dashboard, click **Create**. The **Create a Dev Environment** dialog displays. -2. Select **Get Started** and then copy `https://github.com/dockersamples/single-dev-env.git` and add it to the **Enter the Git Repository** field on the **Existing Git repo** tab. +2. Select **Get Started** and then copy `https://github.com/dockersamples/single-dev-env.git` and add it to the **Enter the Git Repository** field with **Existing Git repo** as the source. 3. Select **Continue**. This detects the main language of your repository, clones the Git code inside a volume, determines the best image for your Dev Environment, and opens VS Code inside the Dev Environment container. @@ -68,7 +68,7 @@ To create a Dev Environment: 5. To launch the application, run the command `make run` in your terminal. This opens an http server on port 8080. Open [http://localhost:8080](http://localhost:8080) in your browser to see the running application. -## Create a Dev Environment from a specific branch or tag +## Create a dev environment from a specific branch or tag You can create a dev environment from a specific branch (for example, a branch corresponding to a Pull Request) or a tag by adding `@mybranch` or `@tag` as a suffix to your Git URL: @@ -80,14 +80,14 @@ You can create a dev environment from a specific branch (for example, a branch c Docker then clones the repository with your specified branch or tag. -## Create a Dev Environment from a subdirectory of a Git repository +## Create a dev environment from a subdirectory of a Git repository >Note > ->Currently, Dev Environments is not able to detect the main language of the subdirectory. You need to define your own base image or compose file in a .docker folder located in your subdirectory. For more information on how to configure, see the [React application with a Spring backend and a MySQL database sample](https://github.com/docker/awesome-compose/tree/master/react-java-mysql) or the [Go server with an Nginx proxy and a Postgres database sample](https://github.com/docker/awesome-compose/tree/master/nginx-golang-postgres). +>Currently, Dev Environments is not able to detect the main language of the subdirectory. You need to define your own base image or services in a `compose-dev.yaml`file located in your subdirectory. For more information on how to configure, see the [React application with a Spring backend and a MySQL database sample](https://github.com/docker/awesome-compose/tree/master/react-java-mysql) or the [Go server with an Nginx proxy and a Postgres database sample](https://github.com/docker/awesome-compose/tree/master/nginx-golang-postgres). 1. From **Dev Environments** in Docker Dashboard, click **Create**. The **Create a Dev Environment** dialog displays. -2. Select **Get Started** and then copy your Git subfolder link into the **Enter the Git Repository** field on the **Existing Git repo** tab. +2. Select **Get Started** and then copy your Git subfolder link into the **Enter the Git Repository** field with **Existing Git repo** as the source. 3. Select **Continue**. This clones the Git code inside a volume, determines the best image for your Dev Environment, and opens VS Code inside the Dev Environment container. @@ -96,10 +96,10 @@ Docker then clones the repository with your specified branch or tag. 5. To launch the application, run the command `make run` in your terminal. This opens an http server on port 8080. Open [http://localhost:8080](http://localhost:8080) in your browser to see the running application. -## Create a Dev Environment from a local folder +## Create a dev environment from a local folder 1. From **Dev Environments** in Docker Dashboard, click **Create**. The **Create a Dev Environment** dialog displays. -2. Select **Get Started** and then the **Local Folder** tab. +2. Select **Get Started** and then choose **Local Folder** as the source. 3. Select **Select directory** to open the root of the code that you would like to work on. 4. Select **Continue**. @@ -107,8 +107,8 @@ Docker then clones the repository with your specified branch or tag. > **Note** > -> When using a local folder for a Dev Environment, file changes are synchronized between your Dev Environment container and your local files. This can affect the performance inside the container, depending on the number of files in your local folder and the operations performed in the container. +> When using a local folder for a dev environment, file changes are synchronized between your environment container and your local files. This can affect the performance inside the container, depending on the number of files in your local folder and the operations performed in the container. ## What's next? -Learn how to [share your Dev Environment](share.md) +Learn how to [distribute your dev environment](share.md) diff --git a/desktop/dev-environments/index.md b/desktop/dev-environments/index.md index c34808103d..25ae843ef2 100644 --- a/desktop/dev-environments/index.md +++ b/desktop/dev-environments/index.md @@ -3,17 +3,19 @@ description: Dev Environments keywords: Dev Environments, share, collaborate, local title: Overview --- - -Dev Environments boosts collaboration by allowing you to share work-in-progress code with your team members. This removes any potential merge conflicts while moving between Git branches to get your code on to their machine. - -Dev Environments uses tools built into code editors that allows Docker to access code mounted into a container rather than on your local host. This isolates the tools, files and running services on your machine allowing multiple versions of them to exist side by side. - -You can also switch between your developer environments or your team members' environments, move between branches to look at changes that are in progress, without moving off your current Git branch. This makes reviewing PRs as simple as opening a new environment. - > **Beta** > > The Dev Environments feature is currently in [Beta](../../release-lifecycle.md#beta). We recommend that you do not use this in production environments. +Dev Environments lets you create a configurable developer environment with all the code and tools you need to quickly get up and running. + +It uses tools built into code editors that allows Docker to access code mounted into a container rather than on your local host. This isolates the tools, files and running services on your machine allowing multiple versions of them to exist side by side. + +>**Changes to Dev Environments with Docker Desktop 4.13** +> +>Docker has simplified how you configure your dev environment project. All you need to get started is a `compose-dev.yaml` file. If you have an existing project with a `.docker/` folder this is automatically migrated the next time you launch. +{: .important} + ![Dev environment intro](../images/dev-env.PNG){:width="700px"} ## Prerequisites @@ -46,12 +48,11 @@ If it doesn't detect Git as a valid command, you must reinstall Git and ensure y The following section lists known issues and workarounds: -1. When sharing a Dev Environment between Mac and Windows, the VS Code terminal may not function correctly in some cases. To work around this issue, use the Exec in CLI option in the Docker Dashboard. -2. When sharing a Dev Environment between ARM64 and AMD64 machines, the environment is emulated. +1. When sharing a dev environment between Mac and Windows, the VS Code terminal may not function correctly in some cases. To work around this issue, use the Exec in CLI option in the Docker Dashboard. ## What's next? Learn how to: -- [Create a Dev Environment](create-dev-env.md) -- [Create a Compose Dev Environment](create-compose-dev-env.md) -- [Share your Dev Environment](share.md) +- [Create a simple dev environment](create-dev-env.md) +- [Create an advanced dev environment](create-compose-dev-env.md) +- [Distribute your dev environment](share.md) diff --git a/desktop/dev-environments/share.md b/desktop/dev-environments/share.md index 051a9be7e5..696a61e1a9 100644 --- a/desktop/dev-environments/share.md +++ b/desktop/dev-environments/share.md @@ -1,27 +1,25 @@ --- description: Dev Environments keywords: Dev Environments, share, collaborate, local, share -title: Share your Dev Environment +title: Distribute your dev environment --- -{% include upgrade-cta.html - body="Docker Team and Business users can now share Dev Environments with their team members." - header-text="This feature requires a paid Docker subscription" - target-url="https://www.docker.com/pricing?utm_source=docker&utm_medium=webreferral&utm_campaign=docs_driven_upgrade" -%} +The `compose-dev.yaml` config file makes distributing your dev environment easy so everyone can access the same code and any dependencies. -Sharing a Dev Environment lets your team members access the code, any dependencies, and the current Git branch you are working on. They can also review your changes and provide feedback before you create a pull request. +### Distribute your dev environment -## Share your Dev Environment +When you are ready to share your environment, simply copy the link to the Github repo where your project is stored, and share the link with your team members. -When you are ready to share your environment, hover over your Dev Environment, select the **Share** icon, and specify the Docker Hub namespace where you’d like to push your Dev Environment to. +You can also create a link that automatically starts your dev environment when opened. This can then be placed on a GitHub README or pasted into a Slack channel, for example. -This creates an image of your Dev Environment, uploads it to the Docker Hub namespace you have specified, and provides a tiny URL to share with your team members. +To create the link simply join the following link with the link to your dev environment's GitHub repository: -![Dev environment shared](../images/dev-share.PNG){:width="700px"} +`https://open.docker.com/dashboard/dev-envs?url=` -## Open a Dev Environment that has been shared with you +The following example opens a [Compose sample](https://github.com/docker/awesome-compose/tree/master/nginx-golang-mysql), a Go server with an Nginx proxy and a MariaDB/MySQL database, in Docker Desktop. -To open a Dev Environment that was shared with you, select the **Create** button in the top right-hand corner, select the **Existing Dev Environment** tab, and then paste the URL. +[https://open.docker.com/dashboard/dev-envs?url=https://github.com/docker/awesome-compose/tree/master/nginx-golang-mysql](https://open.docker.com/dashboard/dev-envs?url=https://github.com/docker/awesome-compose/tree/master/nginx-golang-mysql) -Using this shared Dev Environment, your team members can access the code, any dependencies, and the current Git branch you are working on. They can also review your changes and give feedback even before you create a pull request! +### Open a dev environment that has been distributed to you + +To open a dev environment that has been shared with you, select the **Create** button in the top right-hand corner, select source **Existing Git repo**, and then paste the URL. diff --git a/desktop/dev-environments/specify.md b/desktop/dev-environments/specify.md deleted file mode 100644 index 78a07c1683..0000000000 --- a/desktop/dev-environments/specify.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -description: Dev Environments -keywords: Dev Environments, share, collaborate, local, Dockerfile, specify, base image -title: Specify a Dockerfile or base image ---- - -## Specify a Dockerfile - -Use a JSON file to specify a Dockerfile which in turn defines your Dev Environment. You must include this as part of the `.docker` folder and then add it as a `config.json` file. For example: - -```jsx -{ - "dockerfile": "Dockerfile.devenv" -} -``` - -Next, define the dependencies you want to include in your `Dockerfile.devenv`. - -While some images or Dockerfiles include a non-root user, many base images and Dockerfiles do not. Fortunately, you can add a non-root user named `vscode`. If you include Docker tooling, for example the Docker CLI or `docker compose`, in the `Dockerfile.devenv`, you need the `vscode` user to be included in the `docker` group. - -```dockerfile -# syntax=docker/dockerfile:1 - -FROM - -RUN useradd -s /bin/bash -m vscode \ - && groupadd docker \ - && usermod -aG docker vscode - -USER vscode -``` - -## Specify a base image - -If you already have an image built, you can specify it as a base image to define your Dev Environment. You must include this as part of the `.docker` folder and then add it as a `config.json` file. For example, to use the Jekyll base image, add: - -```jsx -{ - "image": "jekyll/jekyll" -} -``` - -> **Note** -> -> This configuration is to unblock users for the Beta release only. We may move this configuration for single and multi-container applications to a Compose-based implementation in future releases. diff --git a/desktop/images/dev-env.PNG b/desktop/images/dev-env.PNG index 167f32449e0ba2306ae1579faf3659daa0937a3e..2841d2e06aea357cfd810c507603ab36c816e7fd 100644 GIT binary patch literal 92129 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 Sv+xc0PfS=^s9ZqT@BaXMKfxye literal 62854 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

}hKrj5Q zb3=khMox`AJO-j{v>ww9K1IwdJyDT%kE$Ii;U%=)xT$KP>fSo3QqS)bRetTC+~AXs zK~78a#`*|@KU+@Wj{x}v`)E2D4Pd%M%FHV^OD?xD-u+%#$K?auT25#!vwD$Q7)LH`xx7`BEy?uvbUJ-4eIl)wHAo zQmHkYICp=5=VWDi511+v!6x1B)TF!kY!fj#d~6m}MMLDCW|XC347AQDu7|BJy$F6D z{q1QUKguInvG4Hc%hG!8(_P-N#&k#_gL=|cs?nfrFIAaFM}PA0%F_kO{+o-;YHV%p z-EWGma6AcOWE~($1HQndWEF>uCa7cg6{I~Jm)03Uzp_rz)tn@d6tjN#I?J@A<%+=M zt+NewA^H(xZSNz2AdF=O%`+qtQ^Ow(xOFPJh24x^*!~EE4R>jR14VgIIkqPdb*M>q zN@cGle&j$$hDis#xhg~_eFuIX`GKz89HV{&02%x&E^Cf>mvZw(MR9en;^-@=tyQhW zgZE6ZKeV`_t1`P;|L`9p^>{7)Vl}LN?%)~&-Q{or4>@2yONX@gNZGCMPd!n`hrzLn z<*g(=m+tR}`)WU(twPadyA)zmZXP#-6p0hGhG$nRk%&Z*MsyfuFexiYwh&$S9@$(w z1m0}JeQ^c(ty~$anabCj&}Pyv)S50d24E)BMlFlsxvVG#f}J_*&9_t@q&zP~bC zh@EhwC0m|^Ey$K4lz&WLdq7j7w&B(4H2)U@iE0FAHL5@B78(pcB9^^Gv=@F_tQs!HLb+ltsI>4QAl*NX>L&P=+w|f`Qjie|WJh8m>nUm-wB9m{n*D{mFS~t(fATDi zmS8w>v8l%@xA59lc>qYtGnVi(MYcT(7F#W3VyeHYtWIGe=L9IgdT=LJ(1il-dPlXg zLltX&jvA#JsCrdBgKMuJ?4b88aH5$xT&aY8B^2m2n?2-hlDLb~a+CL5QE-^GH!S~q z$by>mtrt=PZoZStVoG?UP55v{=t7O%r9e5Qpu2D1+rngg&x6GHfdw@z@mbT$Jlos& zjvBf}eFWaiaW=PGQ@Z4ZtBs7~$W3e_v6j6_Ei3v{{@&ii(}EaFs-bJ;^?!~ut`sIq zGon;L;5f|5>$;>-^ZKJU()KQ2oK@tNK;=hFqU3?9H-~Bji&`19_I#E6--b4A z%k2UTAK4)TQNDgy9#7Ix-qO8*GKc2>`sU{q7aTGReZ}V2Bg@(sRJPCAY+p!H)0w2T zrIx45+dAg}I*4?p$91GiNkrdTyh{!?*HRSW0OjNZqC)V8LB2{Q__0p zocDK^T;;cO69b!IRu$`JAY%arJY67UK|=&XIqV(a@xnG51Tg@FE>0J%P0(Q^VCdvc z4!J|`IA981l|Wt>BlQZBE3}W&z(Hyr3UjCpQe7+r<#Mx%=L8_sZRY z7=bq@ay}A96$H{IcoR=r54<)_{`2S^>F^jmw-sn)4C~%-_|NFL^OoDedg-usO2I_L z_gB|TcBLJWH04|K!SYQ#n>DL%1uAZr%OvT$?~>8y)5|#S6dvD{*uGh$B|qN?Z=tgp z#!aWyMjq2-@W^pC87*Bj`TKfX46J^9jlP*d#1K3|$;^9mA9T47xL-vsFIrX`3W_@g ze=Xn_$+`P|+|M&rjnqwV;gp$Q7U8wJ68HyxpY&|xTRUzInZH|zOb0uX8tKX_gm19F z4Wn39-0r4!8PfqZl@l%H{9#4I~xTVE-%@xjQh)wf_*_-W8tr>*#wz-k_40=IenzF zp~#B_*yUnj#NOV}UXeT1=z{(-#~;C&EMnQjGPSC&f(Cq@XKv5ePmqE0r9|w|-Tphz zCsQ(p*eoVJ%IBT(73<|l>-p`UMC7YQ%rBiCrW}^w^!&ixRd~ zpXE8eW&7Y|7NCJzY0g)sQ3)`j5Dki$A|2N%69X%{1&so7sQzWtfT?Axjk(F|r0YdB zDsy2+RSo*NP*6m8)HdMA&h{4u7;`R&`;-QLt3IUVXCUJYMJ$Vj)xhRLy0kF+TOqZk z@qVJnA*LGt`}Y{3&J}ve5<2u$ zaF(jF=fMaVhq%JHAdwJVCR8G2lK|}rt=5#~n3jzlSC?D~E)Zmwk#n~H^&l+CZDX14 zixQaE*V)xTCa8D9ycsmIfuDPs2xL#D?wOz#W%0G^)j0I3xZ~Bz9$H+>EN#|!$5Z*? zpwpZGkU}|#oS4F_@0xr0_0)Fm#r_pZzW*|yUJpWPo^etuO}gMYD5c@vvt*ZCOQYGnw#BF5(dp={R0;Bi0y)QuNca=PYkhjjZ~r*t7K5#W(-fy$dvir z_vYIvk}nifrvluj#j7=gJDq{tva5yImw?62EnVDk!NR@v-DcS($M!((@ot0yWx{{r zjsQVtE6^FC0VwN}#P!j}!gOed?tx;A+W9Z)Egq)3KD|Y36wVFsd5PPmY8N~Qqa!5t z4rk=NKjJg4a0^Hvu3_P|g_Zy2<+_L$}9} zX`b?VVu1}C0!NV${96d}M3pAz!kzQ=qQ-PTRW#Rc=be63tJ4=3A?gx)osqND&>K+3 zkW1-Q=ka#;_tUSDe|n)`n)Js}-T47R96GDQ`rl<4s|BUrOMg0NHk}%%ub`{%J9}=TMZo1UObU ze;Y0>K?FX*opQH}PSzyd#aR)pk%OVWX4kQ;NkcZ@Z`)^ByLR=K_NtCC#nGW_zO#Yn zJB7AA2Fuz*tjwQb*MSlQcL>fg>vn{~iGP(W*o7Hz*O9N=&2KB!Gq{oo-{d3$C#y?L zc5XeC(sHB3;)$6g&i{ngaISo^?i|>rr4Pi3N2Erv)g}m3#r=_j~yS* znAi*>D|(cXH2C?j8?!#ptSAG$@azLSob!kCr6Unh@DX2^$N}5pE0x8^5`u!%1?C#f z2g)_7&scimmCB}2=ATUMQVFImt8tmhgoEAvi^h`V+ArvmD)TVRVN2DTit*H(GslqS zbFxK!PYIt_w^Kx4>K7o1FCc?{FkQN9>j!b3p0qlT#$yZ(kete`$#UYdIa3jl0S)yq z&D79<k1Y$%VtCQb8%nN@Y^r`yQsaUZ!HpLC9L^v)e1iVYS+2 z>F2ak-p!GTb#)N_qsd3|;%>_0>8t9qXGKEg7h<=~M$I8bd6;(o){VSXIkOq1oFcqL zfa0qFS($aax4Zfvd&=Lsv5M5>51BJU?Gq(z&F9;c)OofA3$EBX4{W7}K$p916|}mMZP)xvGCV zNYP6Zl8g+Zvk_&6tyP43uy!R0U=A|&633iVb%2v*vtK?~vsI8hWc9Tgiq!K%KbTswW-L+8fzFQ(VFp5~`OuNBw0fu3nx1;N)`Z%wQ9sqPo}Yd= zey{hxEBDfpx*d-*m4iiKn{6@^ab7E>@w%*=_gx{+!Z&vZn$rerbbsavgrF>(gu~K0EZSqzJ;21U=vRm9K(8 zxu!=*CQL&E!V&|nVP>Y@&CV}E;?`c*ek8q%dsV1m>`sC(U#bmOmtH@IrkMJthpKP9An z3U*1@)c7~iGH2!H8eG)h-@t0tgIzd8#JQRpN}3BBPpPc{2*7pIxiEBX3NZhCk(z6b zE-{>rbk!;qw8l3Z1cK!KrtT&NpsNBo>{Y{zAstMCkKE-LgIng^;>Vzr@7jI}>ggx| ztl<(}&VZKp9R@pda1mXM>bw~^6=3JIO4y?^wx-vOzo}~bw0qk6dvJkzHHOd?dKSwD zzLzaWq~h7XTbJR`h&!5fC$qzr7Sc|w8hxdATpKh~@q{=xGw^Wk7p1J%p@AN0_W?eS z6PHr%F8ad*=sv+xjGr0j=h0V7T!jQK@B%^2^4p;tUjg zM<%tiE1>TJF0{UB&u&l>uZklR(F&D9hiG;j?mFk2wlaryrV8*;Xk&ddXs6Fn!Lfe;&174_Ck(J+C1or zTWB)-&=|RoVG2zzlm%X%$&s)Us|OfA?cpL$%{=pLuegHd`)yjKigbY;Jf*?5Tl+1@ zOxwv=tZv?$t(93l#~p{~J~6?$b3JS4mdW22MSQo2zr5?59xq9^#>$(9bl41`;1vu~9g5{7 z1+9Fc9egs1Z+CL?JL)w_Pn8qjU8merW-VPX^Xs%KB`Y2XDAj!574ql1EqEoFtJ(NT zc7sjq3o)KO%zh18PFzK?2Nxk%q)|5!Yi|G9Del>Li@L-)5GklF zE!kDc(8i~UHf9|0K*}S)bEWR~c%|^(xQ3bXfZq=_Axx#Rz!5Jw_eTdDN*!)Ew7q_P z+2me(${;|oVdZWWy=~R5{YXr-Q@=n5t+pPl;#GXQp!`6gsQi9iZ%cbAR^~7&|2c*h zboM_1augXHVk!P+0K_S(!71{wx{vDiC13AoAHDpE%c;H+hh4{6SIZi{@`nEbB$yjN z6CBqvlJtON$wFcT6|#L~$+}?&DmqJn(2dooevQ|yPb#4jA#ZBxKoG%w$49n6QkB2k zWG|$80?PB!ICv+Jk|j!?BZ{>UWqd?*1DCYf0NFJ^X06?gLf#)jzUsWgBtIlY1$p-k zE?|a?>*5$kQ29>z!F5pMmFeKVfH0{lwRtF(%_4b~DoN(GhSrzapDT|xQfj-66~!Cc z5a(qW&HZ+jLuqXa0zOzo+5tj7dSHqugRo@6vj^35tc*f+x`op{%8P(Bwm}IM#_j7|* zfwi~TJei|Ha~lMyTx;NL%?)cWc-Ligu~wU|v7N$+Y$Ak|B@J&qMOWKc4^`?07}ZZn z+{;7+Q0qgVSk29vh?;58;KzqhLwBYsdiU0~5r5y1Ts=^-VvAD7aORAxSA6A8b-}ei z5{AzQwl=I47QCsD=IrV}+`kw?!~Ygju10V^oo>6BOPI&H0Iyy=uDTH-fkQ?s z(u8cnP&7b(0_-2bUYsDMhL?v9HS zslO#sIWJ#V9(*PB-Gq|eXhmOjToQy>%o}i2VA+(as9uo$sp7SAC}^$xZWOLqx% zcIRH!K*X_qTaDzrxmLU-R#@_bh+q(kVA+zIg-}OvDM=|zF{2!4Sk)H~&CyZnGHi;Z z$G1ymJ;*kvPkp><>cwUXGUqsV&gx;03h#0o%34`42_Tp|CM!CRClAmi?*JL@iOPcF zX2V+DYE5_SBFaM;V<((m%TvhJlW1_Wt(&Sd+56%B2GAl zOf>9Ji$!lwTJt)H6Az6?mkmmbbMvjXF0jo~_S5`k!N)Dt>2uVNQ{uCe=Vrd-Z(Pcl zygUqRDF>U7F2q{+M1yw8*JZ23j1Yg3NVWMjGc=Dxhh;gVlv3ntL~B%@sxG{L^reHP zieadSWueZ(_@r%b=iZJ5$4QQiU_zcSpdGHf<&h3BT>O~3jn}JPo5}S*Hm(P*cxCnr zU7VV3a^z-&wG3w3oRtG&gNJYSKZwfe%5%v+EQiRjvr_f%-ADADSRpEhyG2`lIWs0 z4Q9#;X(l5-iDNCe;x45-V%JV?T@guj@9Nmse2i2Ce>YX;+F|*^uU);eYZ!oAwe)d4 zxMV0(SKBnLmG<{kdb@++&{2cW_0_ z#7r2;NI2Ou5>Q5XnuDzg7A1v`K;XOxgO#YI0F%mRYIh54I*&5yw1;KShPSIs_C}b@ z71T*_XFiMuZ!{%Z)NeQ?NsD}3+@rx+`X?)RPctUkE%nz1>dKY((F?6SWVE0{)zINQ zrrt_z`WOfoJQIl-Qz6H+PdV;CVT0O=n+qGa_o5_)=$Lx;xWWQ9s|W9v*(224eM25R z3jh!07U4xh1GwVzowUzP?x4=z6tvSKnFOdRgs%W>9s@u@m1BWP;T~={(t{f6*wjt5 z>#7UPpZMkzu9-k4c(zp89(uJaxAK@|Z&nOm3Gz6hDp+4SS9-%9Z5rjmd}zLN^D}Vt z9<=l?z}S_g*BbWGrt56ayKAP-yN8`hSZzONnTpR#UdNBi!(E}?y+X?G=4xbZtX%}? zMr@S~NP!d2L{0G#<73yBP0r$xeTcBIbb*SV3}sO>uGqw~df7;PwkKi($T}GnI3e?= z;SSu}y@O>D^8K7;w9mpx(+#p!X|$U1)C5Vc6m;PX7s%)z#0Bc2(-A5hM=Ra1YYWR4 znZC^)Y5RuXb$0SerEiRNLhfZY_2!gDq$_J*7DeGLVsRa$;a0<~_g#|GLGXBFoYp+j z%i_EK;UV)VQIl94&~+;@RGt1c4-C7+4YfB(b+5=+a!HDX~ctA>No40>s=l# zjR)QA$24ljA=y^az4sr2X9tJyrT7LLBEI~jptQat)O3|M$Ix7brBC+-3_$XTy#+eS z7-LR(_ZOXgw3cd;n8&~BcqglcSYbVo|6m(|+ZM_D1)aSn8Z;@g3Or$-Ey-Y1t^HA6C!xQMvIlf5#K${%Cn{1!P z{S(4Ff!}IU{a!$U7eHguf4KQcADxM|lvyr+y5rvtJK zf3IO6#rq(6@|h-Wwo{a=9Rpx8@2q!OgqR~vxliD6MQhEsFAULmCC6J6c+2`SoCB}{ zjpt5#TfAWUeXBEalUV-s8gxm#P;;PI1qzG|b2V1SZrchyba8Yw<|-8i;1Q{SkY`h7PNQhvsLsRIDVBo?mIwmH8zf0x{M zbfmbO_$SLB6bl6ria%100=qoRo+=10Bg^?JczdMdyMv97a9?CMpBCNw|9OE=?r|lF ze(Jp%nm(QOflgoKlVP8JLVRKR2M)a{NL-?myE95;HC><>K_qV5tZhk^lI`1m)ix#0 z&zE{0WF0CU#sgySF_H}YMR=hRtWj=KybNY|k!=l8>kT5c!MJN=i__6;+S-kmvFqU2 z>RJDU;2H0wqS0%$LS<1`uM}hY%k(ULjKfoRR{`KpKB|+uERFlkzBk}OE#mqVYB-x{ zh`{j}N+1GDMcd5dC1Ke5DizyA8?f0!*t)l6Yl{WxRq5{iJ@WR}_&#m!(Sd}Y+r&s; zMfC(|H-ceZA=wIX-B2Hc4Y%3eC>>AvGK=z>W|dv3Xs?d99=t=|=ZJ&FaHwZlrOW$@ z7*^bpy#ep_#UP_Y^X0y0W;PZkW4!!R0m^azVD;NZO+hclxAiWt(Te)4R_9ow6$dI* z(G^?k5arvcAJ41B4@X|iA3!{pvB}5mt0j7?`i$y(6GT300hp|%-_RbSy$Y`BLLKm8 zkkRnh4i&a7S8lvb&;9v{nqfoL@fe5J^30AdAgEN9e;Yq-f_SGyhsS&}MG)r02isXd zdH*0Rd9P(|1Iq1~`^~-N!rEjG+w-G>Ss>)57kN0g!8sz(CX%d2Fpa|AJF=hzWcgoBwa%5W-5sQ z5V$*HZ%jO5mV-*4D|DhY~T=M-EU=@M7S8m2A5L#Qzy z8L+G00MQU{2)g0q;98KUNdhkmvc5zSvQFRE%Q|*81?MU@=;O37Gv+-Bzq*)F-M1#0 zok+6j%!7-urN=Vq0VVcW+skiLN@jqc0%rADtuO6wY|pLQVj90oB$!?ekVbxZn(x#s zyQ{EURo3UDx(wR=KAWNC1t5j^<_Mza6v9B;d;7c451Rl>RAD_LbEh}od|pt+_$9?0 zF|>5}C_Jjx)SvKP0c?_<6Va+9;LKq{m+W|=dxox8S|s*LE4UT^;yKQqAeUOd=1M-| zE~?lZ`g6=fe@I~B5GipY>k-NjH&2|~BK6>2T}Qa}OH0FIOjT01(3WsA;mL+9mzip_ z2kOSE03eIBauuDDP|hsObtoIhjiT}Os8xA!4#7?PPQf*j=h?-_ zhNP^$z3)S}d^X}T>hSvA{L*={DC0QuY4HGI&(CVksods#w9MOpCcg+l|bVZf7cQ^Q7X$21j+>j3$9a=Yy1C z`;b$3p4R+88EP*#q(*&Re0n)5GWjEh|J@Qf1^51tSs*2rXO`!kdPfa3z;W+w$@?b< zdcYDo`)f3Y4cawhqLCjYan0$HQeB8*2l}UgSehB*z|k^i6w~)eC&=@`AyB zI=g<9=C5w>7S(7%k(Gwt8ER-IxxIJum$GkhgUu5&_;eI9b!?lnYt^r95Nnt_treA( zCU-r#HK6!|>6+dBcToSi&ODvo2E--5?-c{j4|<7}-uzQNCy#X1IH*83-u*TQ-)IT5 z?aEW}^0}m`AT6fa>=$^`b}Xoe<&W$~Hw8P&1ot_IR1+m@^*`_7Uw3tztpO-Gp&@Ry zhrV_WiQGHKkmY+Mc=ys- zg*pf$!4BK|T6; zV)R0bx2uZ6h!b2>Wp3xSFsus2?;nZyi;!fpK?BeNFPqv#_hz=}KCOF#u9HDKgsO%& z$VB;7On)*xWm&5cm=jr)j`L_a06b!7Z1qy1#XTl_*A z7PxdZOebkwSzOT8hl5azG!}?X`e0BArf~KQa!}p7uOlaTXWr_Uv6sv@nC^3JR zC2!cBtLK8cxDOK0VKTCrd5@6_Ky$E^5-%R=5+7(0?Z-{bFMRg)+%nsd?zdiQ?Fb-8 zcL^0>6bN#{$~1V+1xXPQJs5&uqX>~S3{1Z@e(p7^&wF6ONWj?^}xF#2(*!CsZ=y>JheDnA~ z88!bt7$bTM0_4>a4a?Z0oTj?B->%*3PUM_@^5_c1A z0X@;^0?Naeky0@5dENPYIZIL~qUhEqyxJW8l6>9coD1|=K_p?22N0&_@sLwez_*i- zQjYPzCj3+o3>YtsS<@WvSeL%K0;!ciKu2YJg8OsoEcF<9tgrX0!Zq;>GmfJ2Z<9G4 zRK4TZ8z+x<0X6vqPpsZT3b2^`wvd8uWC0xvmAJYT9^}mUza(BgI#2TZL3_iHt*x|M z9>BPeOIOn#ugleZI{+eW3b8LhPB>_iL{Bsi(dvHhkihn6vZ<4;usxxoXNbWfqUR32?zbNSwIn&PkEv02+!xfWhpt;Es z<>(9#>$p;ik;QUCN=HFi%{0JWN2p!%%k*nTXBJxAzEMU+QHT}bd9_T4n}#8rwv;o0 z{9NVVN7ua9&nQRt03~6~HP@ud4~DJl8R9zuC^==1l8$~p&%OAoEl|v&^pV0^Qz97ic=Ky4D8RCB6p|2xreP_h!^}H7j3Ca*0ByEA=?%H z(Eh7!Hu$z%vI)0PcP@)LE%O-4bCv6jdb&;XnF*D(DCHcft7oGxUOl^RTxSF!q|lQ# zzMgB|Oxog)Qu701qFB%YkM>;6`>Lb*vIox_DTVj$ROTs?4(YNzZ^NgO(8U>|tqsbE z?Cta$y9!Ig48YOscY;XJTYIS>shp`#m^SIQOcnom1ld2a)*t1}gD^$N^nd~95oyjs zbV`W%EpV-&T@#UZk+7JHxkrClJkllM>S}CCU98SO0m*R@O|Ye+w6CC`4p47R*1Wnn zr#2>)AJy|jir&VE(IO(FC~D1wBOIYiZmGCQNMUaXbKY=X8dNM6LB8SND04i>x^|hV zGEuw?5HbTGN1UDysiei}dKzgvg2Ax1E^taSsNB)6k17cb z)b7>&RVIiP@3RM!T@;IIOe@mvwV?K3sq8g^z1Tj4$<{fowscmpY8$H&4KBk&x2qku zS!EOK2Z8jso99yENpmx|Mdk}ucndvr4QCaamXZSeQ9av-gD)!rT7kC^D>SJwuZ^a# zx_+KO|GSpsif3`tkJnvhiQdzI%UoNle?(Sfd^&`f#`h`nyRQnVParn4mtzW1r`g#| z6becg_j)hAnMebwvj5F@o~5Fcf_QmfJS$wO~<;)=9C{$)cU6Ob3D zwe{^-ec`E%VPcIG&Pni8koG9;%{uSHolo&*K2J@NG5>xb&_)m{bq{KXeV51?8FwG} zNGnSH)6g5>Cnzzy0O*q-2e~!3^RjTAZOZtYOIU^T|M;nkosd0Uv5z@0(^~P^-97AwEwYk7{akz z{=a%B#H%-{QRJGg=}=@q!L&)*uM?TIpcX6IZWfgK9DryH{Wa=YTy3#=m{)gRIW|wmSncC8 zfhVUy-hW-%qsX-$3VbAG0Fk}AnfkNeobr6e5Gk9(J{y)L3bej8p7JR3`lPGPRt zj^_rhR!ov@^(`QPOdsFU{x?`ew~M#L^Rk1PD-WZp?v?%`n##_gC*rwEG{KE#fXb9! zXR`DUyz!K$Ex9D}*jM)G(Gw;MowVEC02Gx??Df+<1CC$rUkTkxkTn+vd@f;__Xpei zot48xxj+9IVC}b=Ey%k0#Q-N{6FPdBhXuCfIF{#N)GI(OspiNSV&uA_qp}h0zjwbj z706wgh1Nxq%1rtH`oFqJOA7&EtFxyLncsJd4mf{H$?6wGPeJOn9|Q4bzJ`|`iOSKa zG=nN;B>*ib&l~m)*;mX^JcGras8SurTFl(4znxoAH~84yKS!Gt{9 z>|6CXTiQa@-pV$r2LGk2@KqAfPQu>jxpD5qi;R_`^;fyTYuD;p^X(aQBJrxMXn_e39augG;#n`8a|3NFG@h$QJVJ@C78IxX&E zP9?}KO;bntMS~9i0;BX6elzpNJFb5lLoyWP(*q&59LJA}i!guw&v&(%DnFt636mrZ z10P6!Hthj4?LPh=^O}`%lz-I!#Y2|g^IyNMLto>crwS|^QAf+$%8yik!fufUSAtjm z9aSnItg7w3uZf%)#_*OTcddi>{;6aC-tzy8X zef9qwhyK6(NTAcKK;YJA|G)$G1M^1jYdhc5Du;+-oXGbq9m9KTPva>DQ~#Z0fXrRU zpX}Gzpk8da6CzT-H@pE@$h%l#Ru1`4F87KXJn!%)K8ZsC@jK@w|J`Q*|I|q>qEVdL zbaD@7aQv97rDolub;^&l*!_-fq1!5z#gDWkJ?v7j7PoL2l~ zG$QL~GmH`}^>Wv2a6axa84=fSe@1{~7`(fozZ|IyI5tM&MEPU%C!lEUF2Q$Y@yQaJ zH+kbe8LUCo``@wtFY?|qtjQ$`7yW30BBC2RO*d{ET@a9}pr9h4qEsOuA~p2T2`Eja z=~h6gDgsgyTBu1VYLrM5LVy4fF_eUWlmtRZazEVtp4*=1-aqFa{=gsRn_07F&1&<$ z{~DZ-==VZ}iBTj!wIClfGwSVXbfOj9C^)NjpfU>>6urQCsj&lM`O3RBp=iF^uNDe@ z1Ff|P`3`MJslnR)$P%&XC;f&O8u=Hw&?Mg+%{M3Az;3y8Lp(~jy_az1(huxsu6d@w z(484OaTog1@ffp&vJ_Owa>u~q7ruj-;?$;_ovU~i5+z+UD26=yrya}N6tVZ|S7l){ z8My(i=I46r04wP(s(vzF5XtRm{GHEZ{G;XR99Zm^@vX57D6e|52rct&Rv#jXuk2mntnt zDW7Ky81?Y;mG4SK)_H9I=2Ytsc)fEj9UBylXMhd%s6gg_2B`d>glEP{duVlCIDn!V zebfMZ>-%&D|5@7S=?5%b)qMF8u=WO^|0;?CGp8kf-`T=HqrTi|C?X0x_xUUQ2hewo zOFbsG0=4)^jC;Ng0IY2Ly8=Yq&)N3U{_}Javrzyzi}>4)hMS3+0WU3Ud%#*=c>G@p zzFsdoCw?IJb<{in^veI03yE>;=a&FxcGCleff&cXfIxwjti8{Hv&H|z7i(Ju0qqOy zQ9j_M^*?hg5;_X>o*0=1D}-pnKY7B0r8^I_CSyz!p{+b?!`&F4O?{<2-_k{%3^3LICA5QMTtLU5 zmtwJTwn%^N;vBxk4Kl@vuAfB@Xk?)B9m6((05KtmrtJ+wn~y;LyAiWCfLFWqDuW}g zzl|JCnd<>Rlz(^koH7FYcx14bX*sZIM5$hSNx1t_M~R}bHz`rFd=1VlCbNmlhA5v8XJB2Bp)H>A+U6J^-Z2A{D{p<-K!tC?Qx6PHDu#G>Do z$(9!xcYnZdFqYbHDV7uJLztFj{cm)uhr$eyo)ENDLEp^yyCwdD2-W5PgXLcYbQZ&- z*7=}8WsJc_tQb*M&Y9yn0)NyA5_;r4A%)BOE_P0?U;@Ofr9%|=XM2)SdJ zbS#v%?#jj{PIz?(wEldSg8sLDe(3|4U4hZrc2>{81)mZas@c3<7}p9P##CPfXhIDK z6<4mb5U&7|gY_8ffd6mpPBoR*K9=nED?b7E{;Ow`a!wrA%1j>BWJ23QCQP~R3d!Oc zsHpe+1WQ;{%)ytbM^If~RATC|ZdZ0)wYPezdYj1g!HaZQg*2})WBwj7oNlwGO!!V~ zUtNJ+^G}=ni#0@&ToZ;_!#WLxMlJtGU~tm_Dkio zQcW#qclw^zgnPwmRCW3NVrMLWX`r!O*J@7%u3Czk7xf=8S)VE zPKSX+{3;hLE5dYjEK*?CM7h>oDAo6gsxeO1W|$7hdqrL7U?$_Yk?Sei2)l^kCUXPR}1(Lt7z?r_F}*BNPiOg%G-Oqt+Yn*LpeCoZ#!l=Ewce>X!9}MEA5mOzLGE zzfDJ6na@|x@fzi2xYe4cJNv}RZAyBV0qT~riJpg0YTMnDZ&Qp2;P(pb}+wf=%z!xY2_}>dVk#8@<`BFBUwB6=z2fK zlds&;kxCJ=hTB+03^M{ct6^sGF5P8)?&l?&96yTmZah}2!I%T?9a@^bfgKL@=BRmF zXWzH(5hINI98FKP2r1iFE*1LbFTmV4GuK_bSm_0Qcgv_(ISQN1RE|VHw;uFwhKcV+ zJ8mN?PH%ws5b$`Q4;WmFm&{9#mvnq87Qxlt7~2TzK;zn1IUu-mEM?5 z$6(X8oXC|Hn-RKcI|`VJ?x+L4eB8$QB}WA>hVXt-a+XlJKtz94ZESnHcY70w1mkG0 z!OG&B%t>)LnHFDO?SfnS?8(tQbCRnNF4&;Xug_k&PPrl~m*Y;i_p+SUsu>SK6uw&= zUf$O-x_moL?i$Ko);IqJ^gEF>-xG!%ZgO=j&@1}mtbsnOeIeb=czHTjY_{O`J>9=m z$lGq{`LPgAd5rwkBi`!X?p8-eJGcEJRw0$YHzVQMd-x}6?fIo+RkhT?(qAPpqE@Z4XKKKydrPU}UT!h+qG&QB*v zm<8b)TM*QyjL@_R9@%RH+JI=C5X8aPsLuahprC5K+}pC@Wcqa9mDAg%Z)yBcQ`W5Y zJUZH0Vaf*r$X*!vD5gp8nFwx!f5s2gUmeSK?`eV6O|GmWWb&=<#%fdQo?^>~AFGvl zv*93U+(*V2@3BqPV)ybwAei1QAuZ}`_P@W>!`rr8rf;#V^HU0CIosT?akP343ceb4 zV)xaPc3Yj21iev?cgOsioeY9saK`4F-E}CHZpUG$fyp4EIEY?vu4hU6j-E!+pOqrU zltPCCN!}kz(9;-*dQ4YobJ_6Ui<9O8iS3XXEWu_Ou)nx)|2>%sKWrbpG?f-;za# z52=Li*;bzuV7C>MwbhBhv*Vwfd3So5(iD;x6%B58J!d0{eXg1dUq~E z(x;KHDry*MW`7s*0+#G5^wjpSi&buyy!>u;WzGFp28g03ZVHjql=pY(c7F|7rO3wG z-R*{#zorlTu}ZQ^j2L(@vnsN!Dk1rfz5k;(cF7{_-Yxn~zk%0f8Ug)bEYjM!+^x0V zEcnN%%uJDb@8dJ*gF;SSTaXC{Z^)nXgz90p7gu&AXLt|g2~o@Gh~OR1T(06j52wi! z%sbb+5^_c&=Gh>%%;UfvqnXW7H88aRM4!z6cW&VSgr4jFs#A9PJDHH~Lw;}z9eTyF zFN4qQ=W|~)a~aR*6$D0H^&x*mDurcya{}bi*BG)#!~#8YlkyhyZKmot)t>pwj;ZE? zNaq7>`m`djs+lRt0VsM9%!_=~%;;-8}vH0s5(YoS-Z!nNG5 zgo&JE{0LdDVJ*M%^{wEHiq-wF6osU`=JUR464H5JCAlKLd|aJxF@PP>5T*9Y<2DbJ z!N1_D!8hH!r56HAh4x&n#XQL-eMTm`X>YsnxfvU+_8ZdicIq(<;#PsNP&>Zmz}Qpm ztr~BQUi}zQ%m(qg-~5dzT_6V%21Dxn2+<2Y^$XO?B9cP+0!ttDB|J}xkDol)S_GyU z`nSB3^Xytbdduum&uM$n+vp|Fg<{liF&9?<^{8DZCW?kIPjvnk4X5And=W;D_VuGY z812O#XTWt{??NtqB&r-|81{h-3}*4Kecoo}VPbY6k02q0jk|4 z?qn%v-tl8V?5x?Lk^CJ_v8&YneQO0)1?2vMI|Z&0tBq{&Bg|Q$aunDL_v~Mg4LF&0 zg6S-vv2)8y#?}5U)zi5OWk!DHaQ?45W&e)N|6gVa|JV2=h>xGY-{82xYMU_3U|S3C-iB;<^da8+ zS@G|@&~E}P9g}DU-t;tFfk&`3_?@?IZ}2--XUT{afrlT*sw_mY-jl;1+&%>FES#=J zzJ?d>{a1Ig-DVC{{=21*2+0tLU`=D>dGE=rI6M8A?tg(M1OV(8JYxD1oA<4r5*YDq zCrF^hjHX3j;#x%Wj9EI-t7@JsK>J@606gEE8E=xXWWwt&cBNoh4y;%=tX%$jn>fYN z(%>0ce_!ZoVgSM3;8__Y8UmlDtWvTTHqLT8`WNugL+b*p&mUwzV%Z&+Sgh!P;tgwF z{clSU?l=CrNFeuTT)L?`&p`TgW;d_V0>hNge)6F&XX?sD zFF^E8@QBfiZ=1~3nByd6h)nj4Oo!2|?M}yV-|<8yo{;K^63zPWf|{+P&v66EQY@M+ z@7lOzi>bpgJeJLoSQ6(>@1yMF77Hw`Du>xQ6dw>o-qVV7sOyP}zV7I}GMD_X)GsKQ z3a{zTcpC4le#>IgQhf;gCOFO>-eT>BCXX4n5zC`I-)L8swjz2MgOQWrm5>|m+P&%| z8vYpN$@}i=h}EOxAsyY;AGX|w8Q<~Ui13v54f3qU+;ylSuXA5h;DDs8X@yK`lw1Jg zn`+qmXtL{IAN4CbUja9#rlo}7K72{^mK`|ZDbSos+WX|Zju+dn`{t>O#ybBIAosf{ zWH*bW91j-hc$}8i@3I`KE$e+6FMZ=1R2j!6XZu1#RZpFf+-7VHVLdJx_we>}Xo$vh)^Y&D8yg5?UZ60zZqTsB#| z0G!4hr=hdI>IMmzr`h(1-yQp*vFm$QfbsWTnm2+n*v@y3UrQ_Zt8+9kXua|NocrK$ z@@wdu_<~PPTBW{pv>$f-0r7^8rd{`2qR)T7+;6Z>_5uNcc>b?)^cFLk@;<~N2C*FU z30Ur3^=6nE5I7&u@EA^&7?3{#*(l4Y87%(^fwR}myS@K9n&x(kRffS=tes}BL+Q0_@D*Hbh4d;DwcnFdU`9|h9RWdqh z`@WMMA>xpf2rMVB$w#ePz~;9hQIo_G6_sOaUi%LkpQB{rKK$Z(2c5aiLV_|4b{k49 z2O2-fdcW0JjdXFVMOPEZ>b*SD*c(v$AG1@w*zX!rWH^KkqeoDiJ}C1X)mO_HUJ&=_ zm9i(&t?O-fSDJMo9{V-cC!CKvYWfa%?AOgo^gToJT8MXkBdKESN~FyZ`=g$;LkkY9_cY{^&d&y4UrGN{Ao4r7II zK0QHv;AE3zIi7J7j!?&I@;gBE_CAc8p}qw3H>1zrnLa!BgEa-$d*=^%buM*4=;#k%OYau59}kohCxF3=xy2(IBl^83{;7R{FHcg$ zt;od*$OZa~$3#c2Jd2qsx`coqJF`S+@bPDhllgl$IeC9-{MA$t*J~2DT48N8WWef7 zD)~xyUelsxDGs>*s|I88hi;e(A!8w7hxcH{;l6G~(!kZ^e}+jFLVjR%D1S=BqELHV zo8+9_czvs`(_B$%FwkW3PdNwV)TFg@7e1z$3?|4q`R;%IyGe*DbdLe#6Ph4coBkmL+}Qip0M>n9_;I+Z~wxtf6$;_s30A zXxL>L?rlFfM(e0=DgNGzzoi?H5%B3gT`;o$ z7d{22zl$wk$s@=xZw(|w3s8I^v857Q<>b1=L8Nrv>$f}5`aTBOtMZRfV?3rBCsbn4 z{`eD7XZ)^#J@DKA$^!s^Q);y`FlFFNO$wCJC`bTJ)pP!i0cMDk{o{~l2^Q0g{ zaxnElIi~uYNQO0BOUN+xkmBfg8P|$ORUQuoe5wS`7*3*?yCbb%EGTgn`U8PqI|Dn-H)ik)KTo7HTyYbBy#(CCn^1ZKl zj2=75or9i2dZb-x56OsHh3HU;NxTWq2sJ>_o%4A98JVix9k0`-*0KQsp>Ab#;gpxpd&MG zO%Dja{pH`{JF&YJerrpJG{{}8uawy>^SI6L(S3Tr%*G~BFxZjQC6j&$N_y!n@jJs8 zzm+c#uSu&txcM*h4#%t=;Dw`FS|`)yhn0K0BQE-^mv0>dX~(&ZAuY~2k(UxM@Wfl; zEUCs>FPEho$SzC!1WFU$tXI=C0kfP}V`dKMxTTcKtlbG!FtTTUREuDK>QLPmL{NoDE&rfg8}kf1LcA8W0cMqOMw5h6*p4f}?AOMlI|fE$sm zoyIBUN(l8)gR7Pk?|dweU}fIv^}%{wnU`%bt6ZDYKJ$G`nR4Y*a>Hj2%Rq1W>9}du zFA}=Vln+qt(ABPhOBLS5igyi;SfpgRo{KO*>WwZGhzqg@MouWvxP8uzzaIB;vTWfN zrT4KKy;0>#e(>>p?Ze{AA|o0$vAT?G+&&#W1v_Dxq|VPY9PfusQ*+DHsKt*1o9!7y*;y*BiSib1Txmu#JXBnJ~f(W z`|Cu`RcBKsCcD`mhCv!h39h`U!pZ@(pKf@)A0wrffk7Ev7Ol{oqH?a->wKP za6X_-exYSWjo-Q^L`@CF28P<$7G0v#^uj!Qb7<~yp7bbE z(NDU|+*N_Zc}~#X2y6`Iq6DV>Fku629b~Eq!VPkv3Xd_FUmklQtMJPff2CC*8ps~kF zvn>vP_s-&DotyWemWn`Xro*?|3n{_ofjwzrL6aWG+E;6rB`hAka(v1N+(-_W=HGYh zKgzzp^={hhWDIv+`0X_Fd0$@s<9m8yhUf%Jy-cekqqpo6%*EHI@r>48y%@9Prl9j} zo_&Bu*6IMpI^^P(*r*1+x$I~k>X!-tb&g~k9Jk1f7hK_F- z{#*4g1&I#M59XAtQ#otTZ|y4&By_q{`N*7lK^mJVp9yZC$5?kPm^rzFPpTa{96`aw4a+ zEy7xFCjPzual1A7#bQW$v4$Alj8j7??HLii@gD402XXdYVbPq!wwgc5_wIkx%ukw1 zJS{HV{A-SEy;2`M44M^^TI(v-od(6NYjm<6;y;2UYo4?2K=Wp|B8YOQS2!7|8_CNi zkG%E~ei`w{P3V+0dlq1G2M!+y>SzyLzgLb(I;O6G{RVaz-XHp$?o|uUuqbnzdiLy0)`Y0B0`5-pZ`QUpd#?0WfvE+It%@W*`D4%mKJL@B{>T z^{Z>6DRV}SQ8qynA5BEKg0S%k(OF=<`EH|a+ODd0 zj~xOv_tytZG)(AwH!!9zwj9diKhy_z5OI<;J9jmI{_Gh8oH3=;DK|mRaBm@MGUHbt=l(!KPq-RjBRWz_mCyeG{3^aRy6U&~f+{hh(?`Xow~J}QYGk5oyyjuUPe z8jPMjb3_vJ(&3k8n`1y~0yE^JJJ93`WY14UZ_H0;Wgmd*gv{>co0HyUj+u9PPhOZk zYL&}LvjNy2U+W{H@VE1)m!S0nd0ze)QcypFBZz!OOzmn+pRR}ccn2>E41F_e-kZe( z8Y;Cp7wxPX^zq1bl%b8-a?n?RnK{0m+O+(BMS!&=a?5lX`yse0Dmktz(_$eK*6&KR zE>?avSl1o(HoU8<=jOi4w6712!y=tB3w5wE2+R-km-Y9;B!frds7c7(4A~{$joXW< z9g+lDl=$8}8IVyT`mF2=0q=bs-45jvfQb=X=g!J1yXj^5=?=CS|W{hLR1M3*ym(S^u1^LZ*+%cAbL9T zA89ncZepTvnRso%n$Mr_@el1T`tWg(+w>fMXz=}RK@QC0h_^wl9#Z6rW_+osFnEtd zR))K^%&xR7*QANpD>nQXrj=!PrxT?yT15OYU76-L1B>^@29pmp-u|A1i>I!TNMs#s zSdkQRhYuX7*_AIpe-W_fJ>;Y1VgIQj8xIW+=nPh9SbN552b$` zQcs-QL$J3Px6Mt_S&v@qroO9^FC$`ByQwR}dtIR-P6c|mxkHor-m8#?Nws5TA@9Uc zOHUe;dcu8^o6wXG)X9)KQqv?PIV?OK~dV9_na|Y{XG5kYiWs(*O)b#{f1|rr~ zPq+=lc`To*Lbo){4Sk|cGIAQHOYIH9N}IS2z6Yh9MNJ5xJk{6h)ak8FfCefJmZ-Ol znJ4b(h+ZCI*eAS9+|>$y+f-cZQ-CY$#|gf^QUHohn%MoyDrcX3)J}Lvr1Oci-=W-< za+Q;}O{aYyDvN{fdiG+U|JJ-ec>Z=SpmlJBe7JybMuX3zI^Q6ST)it{=6@ZJ-%4B6WH^+<0QH^Vb3PMn{Mh4$)YxpFb(fvVkpMmlRP#MbnG0O5ux( z)Hy{>E8pZpr%=52BF7iX^1>GjsZU7bHH+c8yqQMoB$km!?ZWQQf1h>i)D5G<7~ zoj)LEoPF&jEYUG^+O5aBIE?{9R0~2!?pDo@zAldvLUvVYpYzkX%`6HW3s;9-BAsrV z3m6mbK`_&r6!UN&hY1+;q_{DqXjwk4D>smy*cN7ANxEC-(~#$Ijk@;3b8$v|uPi1X zUa~%*38~ayuglb)-!QMKtR)w&rcgV4?ON&`L);h_eI3-anF-X?z^*P)D^0D7UpBmx zl%D{E1pI+c4X~DnjwbV+o1m?5O=c3RuDK5MVFF5cKWh6sXIUlLQ?0 zI=6bYU|Q)$NDxNK!BU#-zD#-B5cNr7RS|Q@p}s|JaVgXb^EC+b=Gh2#F!E9f@0Pkx zlmD;M1+4q*i9q@p#X-t6a(yW~lW>_xQ=A<^LB4FkZE?~V!6uvu&RkuuXz_!E2egGW85l6stU*ew5FCHVthdXqsmYNwPEAvlFBQ}%vl(1s_2V#h`Ph(0VXAl_11+o3MrC6+0vHKB*c%+*Xzr5L zIGjnLP6<0!&XZn=4|E+L;EE7~;Y0OgE4|T#S_J3pLXzRZ#V;?S6}U&{m#EcVsn(jr z=y4bXw&0Lono0<)bErRfg8ex@d<++@mO-|O(nWdcZCq*YN=mb?$7oW6FEFMgEeO#{ z!8kX4D`_lvw50QGyCw*NNKGpuIrKu*=v2>S_sx3v5w5OJ)x4r?S@%94sj8LsNdoJ= z|AN+V@|0d5H_Snc=Ps#T4*^ogLR*%P`OR7!p6r?Q;d&~+gwMB8&*!X4j$7uslU}o) zqA%EE=n^#Avp1}+y{=NcD_pk_>l?(pHT1d#KO1tHnjJm>WtLD=wbGatzsPOZ3$~Wo zU0-lMHQ#PPjRf~cX9YIB)`k-s!^e8Ct2bb@eWdDfLU}WD8QmKehOR6h_y2}Mm6J** z8CCm8Wc^bM2LThiK)E-PWjbFLdj88 zOb(IB=dG&Sm3CU>j!}Ii-&`Mf*iy&3l=*I>_vGi*V4FO*qi zNkF5|jOIa}?P;5}ui4pHE_Trrx8WG^`NEl8<=^OIZ-q5qT%4GpnOm(Y#gb7QUzj~P zC8_UON-c{S!p&_FqZ>zz&4?2lo?(G#c-W#gRj5x{-+C;fIy&<|1uEVNky3zU?CD;jHQKLt1K@|%T9fx@z$<0Xwm3x4hVbQ z)LlsSR*Qmi5pTr0p`}&wOZ1y_bE_B|2W)5>J+1)OkTsT51|LUDERGwy)oQMUFT9{n zU5W5tq{#7qP{c&4yY8OXb#&;qVJ-dNt zL?Q~IayBWAj&je!I0}& zqNLE7$}u=8+p1PmSYG(KgV_N}um41byz}2yqc^Cta`RnMW#`o)9TH(;kGz~|DqLCXAOtv=Y8{aKo z^p1?&U%9c=O>KpR>74$+F4(GuC>y8Wv~Ee&0NDXZhyxxtRtC9mgwry^wmP zm=wB;!yFk>A5w_)J1nk{bj~#d`(?MFu$WV(>yFM7aWAqvNv423KCMrWNH01xq!9ys z{<~91Iw%^~U2i|+RP0Lqpf0ee3z2>0IT|D{d!X4|uzc57!Qan^(h$*l-l$#t#yWifi z!wH80R%pG?_TUE(lm*JAtF9NiTrFna(%dhIlnc2uZV5Cmh8OOtqxBpB0IlZ&Lde4@ z_vwixs-367bToS~zI$o+h|J&&aq)5OffvJq31*?sh2vmaS&7N8=PwddyYxYyAcEG+ zM?vc2CmBXx@AU9_!@20Qr#q>0nZDV13%|uE=88AJ9$1`s`>4^rzpL(7sV?Gsks*=m z%YHD#mu-Dxxatq-qk0D*ShMYxkrx=xGg-|^^C5Y$6^j^^pJT~Q%5ba zp+*stCB8S(beC^2=G4e<&2clIt!)7v6i0(8-I^*`YP9*B?RmC0TJq)h_l@NMlqvc$3BNuDUrKACe`E#3lQ0{OInz|O@;tr3$VIrl$giX@-O2gYv0XJ4 zl$MJ8QW=@i2W6b)HE{EM$yVqv|8jcqq5YyvB{LwqNO)*!3gVIwh+@|EOO;axQg6Zg zkCh6uNqePl176$s0bppW@D3-VxDt;ebFMsUC)HpBN3PIc6OOjw5cD9Gyp-uG-9cP% zq6CJY1cpUgp1=B~{7`ErMt0tdJU{pT2Uj_yV{q1JNF%v<9z|XG^d9>@>|FnVU=nn^ zd97Y{w2lv|8fU86F`^M;<~)B<>pAH?5F92@(XGBCVj!WHA{kwn{SrnC;$}3I;9!JV z-;jDmop%7!g#1>2qiC^uG*0w+!7(0jnILPxs-ud_@D>QMJ)E>}8h}cj(N?FY&m9j5 zRYg^8_)SF$F*jA^_`}xIhJ*06gUc;Uf&Qe!MZbMa%QhSmaqF*6D%rX+Zi$|3T6|e9 z!&+z3O6xI|J8Si$igpY)1>zE9t;FFgO;f8uAT_{6!30gKklpin8((D|&^D`h!oxtC z$rCW*W3xn@q8rzL7{xOp#GLj`M>5ankO+i_h~$B2mCFqan{i)K03^f+=Ea-x?isVr zeb8D1DfZRuH)&y_L#)!CbuK9AdCyiYmQ?_=?kE(4D2d+@A3Je`FZuqc)c(@DUH@j&j_o#NNkNL^x z2Y*EtOAQ_2|Ee1oMb6B+Rv*pmB2*_$(emFq$~seAt&_K;(CQyb!Y<5&USJG94Y6_q z^M8<*8g2i%PVJq#oO{kgs~enR>XIY7(vnaC@kSYB8#YbLl>5N#pM|(G2Fcntb1^gw zb&j52YQ8ZDBlJYy+4EM$3dlD0z)XRWhAc#iHXi6!sys?gD2~|Sv@e5!eI34>V#X=> z+%J2^RyqQoZr|l=FI=kn%bM7N$MgUi(eyKBYngaN9kDkjL^H{Vez|;XRih5$c0L%? zRd!U5Ic5?U{RD<&(QBbFobLz7VFz3ELjFV5W98-ws0)XdLh(Q4SiKG%z%fI zERzU9wBwCLo%ZE%s89lfSc?nqAP`dAMkeP#Y{}Sl&FRoNaCyTf5poxBy8aNxgk)t2 z9OJY4o`t1_G8PdERDwC}YH5EB#K1DwW?lkx0Ym3PVas&#+dK!KkdJ@IV+6kCrH0J_ zZf%`A-7Ylr8yU`J6MPMRk#pd|kxCiph4wN0Atq5q-_qjRPRl(j^+GX8AWEE?HFeEz z_nR;Xf=#=*7S8N5mB1WjjUr0m*gS$b&`^6j&g;sVURnA<%iWP*``8)hyj3g|0Lxvi z?VmUAC!t;5#;q^Xw9(HsM@OuZJI!EMEDw*eatWsZr|{V+d)0Q>m^(34s$b&W4IvMm z<#+skRiKA31v)>$4hJ0$^10dV)kJs3_L`pPGLd}cr<*1TD-7oc66Fm0R->lpse{p> z4GsG5LKdxT41^Duu1537WDMqQIQP=oR^V!$VWvT_zRA zhYn77W4hoM4qUU6sn#g)ke%_iZmQY`%%uZ+?^X^hI%jf*HM7sEb(LlDcXK}ae%(V! zM-3x%51AKu_lq?FF=$iGPmivZhN&EEo73puK4;Cld&_@r)xq7EXzcJM02or{Q}}$V zWU@mksaL)I^NOxeHT#J$^009QhP%`EdpbYy2CgQpGF1qeGt1g?NEUW5ZCUcJ!xhzI z-rDn-7~c1QFuULry1`60LJudnZfVv!3ub}7KE@gFW23_gL5_(jGx796ItnKfUKn1E z-1xSB3AVmkMlG!|I8jcL&Mbn)nEfSYh5Mg%wW8R=0c(vZV6VjO^K|Df(QJMqg6Cp6 z{zx8lpT?isHCGx`Q;`-0-IFtQZ`v`Pe`u$iwYZDpP~!&nL1wAD)u?ZdTw`@Yx0<%I7U%m~PTE zDCd;fzpK{yrp|3t#==wOh4KYqq*?3G*wG4n3RDvlEqzp(YENu-$iM%&%46>mw4*d{ zEF2eXof}mcIA{JgXQZlb`&G;43Xf@XQq+2JEP%4dX{eO1vTR}6*}uLHL>jy$-ZKuv&fTXWerwXEN;;)Z%kjzsuYOm_cqX)-cEyuR7b>quR zWITd=x9y@$b57;2f1i59CU)I=vrH3}T8*vFi zUx!^BBvk0(ZnEghDU{5Sq6ldndVlnI#!a}Q7{cWwmffOQhQ5n`sfA6DOzlUHtBC(~ zehK1E;(>8gZ3qv?=@HHDe87S%PcN@J!M;^XmfGhZuV_}!YvLqOPuJ_(+!A(eUe!*p zu7UCoeUBnHHp?`EfvsxwY2$_>=tN_86<&*(#Ijj&r~c z3hzQtED5Y{O%8`*;vK3p0gZ>d%A+^F6SXz_9$nRlcC@hmvC?5b_Rh;qU?^U9V?;m3 zL3cqYs_d$=IBgrBXWvk8JcXm8B+efJlPULIb;z?k_EHoJr+=D8YlhM1 z6Cm%^-76=qo^;EtjV`4X80^nLhwu+^RQQ91_59snbXR^GFn6`pDNwbVfhR|M+B!ay z=->VfC0%36=PhW%i8&eX0lsK!8gObpzN`PPI0a?28Q_wjqV2J?%Vz*6q@)1O|>}h{?|i+ zT}7vSw8>F$6?;MCYJRC>;4r1aF=oKF{>QvdS#bv2`0MU_Hfl?!28p~|N5P~+x|IXfUb z?N(PT!W@Y*bI-`E8AZu1)xGjSL1lo-+BWAe;ts<2#I~`Q-B26r1?zn4`tod8pq8hXY^z|z@DNE%#^6!j$xMk5H`AqICh z%ci;-cRCX4JvufbmnLCp=n*(~DL8Z>e!wTii(-u~XOF}FzrWVZTjgT+7- z=uOAKzgoPV%w>XWb) z-VvJ?X8W`X(6~RQnSWxTW}oV9&GZ93^#}Z$b76;X)>O(g4%KYS%yKHPfgez);4e0B zrmGcJO3gJ<&xpRUcG~$q9MgL~E`bsIXlF#k zaj67{`ZE`A9mrW2p;>#@XayriTXMpAUmA4Ih^;lmE%t8Xugtbm#NQUX5 zNI4Cz*Q~Idm`_`sloQ5lfwmdz&AcQG&yqzh_cFZTn((L_+9;`;laji z;c8*Ey?dc{^;Z+E#+=F|sp*C_@hNd%2NeboAh4|axS+%SUgSPX4ZYJCsha5X*LD9(m3Z^Z)dYWcuLkA=-cq)Edr;+M7gTj76c ziS4#q{klk1YZ|=x@I^lFXNz3r%=%$OWLDhs?nBta#I_3YLip~(!!{~|;w{wa%%d?- z>Wc-4NCS0pyjScuQ~Wx3Fmv53Go7EmNP=b=7(n(RHE;(#7UC=Thkj07s+DQ963=Cc zr`97?W0GA~D}50;>kS1&=Op4;hr~scJmzQsED9AGwLP_ez=beaxGatioT-;rDKQA$ zxTpOik{mK$iQ#OlX5uIP?Lt(~4|@ziAMDhi?xc-}Ow3dM?SGrz^U@bXAo;kX! z^~2kN<7KtnLtjM3)H!EmKFZvZ*efT#4~5?`^QN_NEaLxHE9D#Y7=2b zes(%>fJRVSGx8R8%*zRudz&;hGDWGtb{7&2J%$aVFfNpgZiDSTug;LGhuNl3IeVu$hI4% zMvfYO)m;;ciT&kIN2N(bO>Q9BPfamN@)qUrOyMu*{F1+amDre96!D58qj`mFWhE`sgY1xHU7XFP}=gRpL*@Faa&$gP~9B0Cea`ZhPa(N zawA`T{dCcpi+CWWW6wR>bbjMiFrQb%9qDkRmhdml3amRrAK!7mT`Ip!DqY?hu>`aeb51UCd?`2pIy6+YV3!xW?jYAfraEzt1n&xpt5!nQMH z9_8kb0|jQv7epire3!M~jaIXQ1i=?X>z3l`fz83w55=k!rXHt2uP6hpg}?rBcC{{# zuNEHlPEpZNO!C-TwB1=Q((Ihq2Af&awG{MJ1^D`9#zJprzr@DkQ%G6i2~oqiI%6<6 zF8TB9r2a0V+dqn6ZIoH2#B~)*f9xRY?%V<>Rd98y4jT^J^Ik>tD*+9E#lI$Ig83)B zyNrfx;0_UTtK`k)w zrve1-e&rQcbmFWSn21;B_wTP1u>n2N(`KrV--J2IJyw)@aUP+%L3qHt&)<8iR##b}d8zE#{y}D5YdAW)ODb4ne7i?iK z%Aig6T))U4yWhAkG-qMm!^& znFcvba8l2<0>G{7e{R;9q$h}7AB-P2%_iL1)ld}X6cSPErF`7ms44Qi`?d?2>;cmE zdv_$i!0z`(I_za$P+6asY4#Avx=?IZq(_%^?kff7DpQ zWs>i{)=HfOVDDGLY*mdx8GOFJ>~l|PvnWaWk_D%>$9OPKSdJNAmtasp>txn=* z5(7QQa}r8{hZoJ4`oiGQ5hdk#cFH+udrwQt?kuaeBLv; zMiDYyO=w{x9%!^Qmn>CEQ+>ews#oj@>r!P( zw(jT_h$(m_#`)0k>1er~x!Di4L4}Md?K<*>1!Sk38|@UEguOnto1{M=h>5M<`{m-O zvCMfU^)XS?V9-$YhGdzW9a&xuLd?%{KJW(B#&8P5wpj3jz-mgqbtxox{Jl#p`#S?7 zp^{eTp@5~%$>#<`M|`4Ku!uLbK_#pXp{6GCrVo6664#YlL!g~V#%kcwBoH0m`A>pl z3&51~ral2ctB*bJ7zNr|w;dJUW7(V0-UI>y=7roxxZ2W}gGon^&uxjDWw}e!mTG{C zDE*;INDq^Ba{tC9#?YxaFX~NVOuN3Yu)4 z%6%xLwAn?65 zQ!~H5YhT}w?^pkx>*BfI=Y1CUv(|doy4QNf2Vdap1Y5fgzULf$8CG*^Pq|we9_?lF zt2DXg>r0HS_srj~2nkeO5FNS3XlqPA$dLO*-(NqQn`8gaLc7dfMXGBvjc)N(Wqy!B zFEt)dqRqlf92D(w>w6>eChpg52Lo5LEXP;@{f_qCf7a)~>dR~NyXUKC9)#tAtPlF6 zg!jz58a4F(jJJM8H%OL^#j3)Oiv>RQ{c`@(V;C zd2zR_L2XN#%u0H_1kOQn^wy@)N};q!jJqFc?{_Z9+%>=C^K)}X3|yVMxJIpYQh#AT zA`_5C4om2Rv6FHv@WnrQVlmCOZTJ7M_&|2mIM>p&MxS`mlI^Wisu#bmdx!?uUi<~- z>G}=j0TpXE*PxOE4*IZ6YnV)l@D>Mu-&K(|`AsI^H}{4#nj5H?6?~I@U8boCu^jWE zsuqXAY?|k_p>k*a7Zdo*U|BB5kRcDfkHcW1)X2 zTcBOlbZQ6)Z2cK9M}Yvz!waB z!N3;`e8IpM4E#S}V1lRV;i?_K>h>rDI`9EybL&65E&uIUP<~$7IF*O>@@1R^cn!cq zK>ZtATkb7oYDKuvm28ikk3K6Xz<4G5DZnn#HYin4>IF4Rgss=ehxOc8+7t}P^g(|8 zU*`eT{<4Dboh#XkcR|+bg;gwFgm%7>W=nsP`RBClim@$PHZ*8MJ+PgLLM?Uw+tB9Dc%3&}?xM`JP{X_Vd3j=ssJj+{ZZS%i!mx zR*8>gcaQ-&b-ZiozVvy{#~|SU2_5M;l_tvK+typ3Hf6aIaD%sY0a3F57G9qhuN;M9 z-nreQ%Yh2M1Cc#8+G<;Mw@s+Hp?1CG+ut`zyqXCU8w@zvD@q2ii3VQHOb&28GyN6+%EG*hG)qGjB|KRMt!%G$ z&yuM~8BMC<0WU15qbg>SQ4Pvmx;Y$Ek_H4xnH>P(0-!=RR4ZquKHohlh{ z2?{2e-;yaEpDq_&EieaYq5O+x@skAxooIC&iRORlTn#+@a%Qprh}0&ZFT_sIM-fQU z?LH8d@1n1?_hqAv6w3>Nip+e5ULaG6cLx-5<|HfH3+-RRZn=>j-A!F8!un}}k|~x( zC5P@zL~=sr$nd7UHci=$M#QX#hbKtnspji@Mx9d<^g*C0f~L1gcqB@lurNO!%|I*W zD1mS}Wik-M%doUcVlIZ~7}VWemP1kNz}D6H0RwOB9K)WVdH*yOAwH&!eOCnCMh}22 z?>}XQW78WM_pC@UCLK6o7?Ckz({Ys>ov|8R)wGl{()6bD(0_)7EhDW#C%+Cm&CKg{ z^lG+|M)6KC_@_`_nFCch9JzkR@y$0OxwZ}9{Z#1INz`Bzh>}`ovQ|%}dW9&8b@`69 zi;yt17u(eS4tr_>3)_7=9p1&#mgK#ll6iEJjT%bzreh;Bcks7NAphN0J2KY%{?xfH zfxP^i5f}h);ySUNF!}k?(?(5(2{%HAE04obS+|5jO#R7W#)vq>PQ|3-biK86AE*^)Sj!4ReN3Ysp=pYh5>Y}4rl5GQrG)@E0Gd(#Rri!V zwUWJqDNe~Y3^bRK(e%MQJ7V2&ofU#Hqr9Z@W6TtrnWkd;DtMf-f%N|5k?@;27+3@sV8Kr!#ZD7 zAoi=2G=~UIjL${I-Ksx{7daeim`W~zdHWh(@w=bo!st(YmVCQ%C42k5L@V{Ms;ytT zbrn`I9E6%SeiwPf@n!$4`{ic0GP8`9i!^TD_ztf7E}w(59KHR0dBSZGY&8gN1PNbv zs&n+U$NZ*db(HD$w}Erc?>8b3P`D`ynK;H^g@B3l$)T)+oG6Uqpin!`jbx)3gflAV z7(9exmM`(t^%*Kb4B+NjBRdmkNs&Y5LuU5=Vv_M}%kb3!?7Nuq$#TTD;L(Laq1b)W zT56jw;>6l@D)3AcAw&cYw>2b|3`l~H=g+376G-aRZKw|fXjsjI85p|7ubltJt3X~} z${l;w4|9Pw?zd;UzdQ&W{^D_YtuSP2GI~lA{pKeb1+HnLFn;BU+oInDHp?tv_1s7n z)|8;PskYNvQGL`xfLRNG<1}+&%WnVv^K7l8&5%E41))`Y=3uViE_#6ziZZA+BZ+%% zp1}!sTs4_8V-cB?FQ>lGJ2+Yi^t2>T7<4F4FK(tmp1DO4VimDJK4Jm&>!`M;XSPXw zJuqlUy1h&t9HJL~sM|Fk8_tYTV;lw2?=2~!}c{}W30WXunkVMfZd4n*~TbuY%0~kNblnPNH ztA)36=%Fs0DHiHFAB1M>q)K0I1Pm8TbsvH&>JOQyq6KZ^EZFDB?M>y>OGlO59oy=T zk7mDvKq7-G`p6skbyNloy}I(q0$}}Eoi8p+^SI6R8+>=ixJ0!UZ?t9>;n*eLZgYZ{ zO^93|);E)X_BOeJrD z#`CRC$^&;~9OS;O`z@3bzP*PZEbx3&K?UOiV|JP>kU!9gazTmskj{(4}Eekip6AyLuQg66O5Y~dI$ys+L zP5(n~mh3lTM<}HhgIXFV7rkKx`^(yLS)xk+BFVLzobS{MLiU}9hb3{#m*&QhyfB$` z7?s8w9*ut9`D=7iCA&oOv}JKHj>7mb!dO~kn0)Q;*VI|qc>Hd_spx~PS>E=O2`ly4 z24#zA^pcy+9N=NO!xO|%K5f&h;xVhgoQrmwmN(iJh>D~~!j>v{lY<5KXua+Mpv{ix zNhJRA_Dm1?Gt)b62+XeArB3^97^jr+0W#D%w0|ldM(edG>rSx->$FcI+`U=XIeNVE zcw1IrFlnUHBn3HO=F9<;HdS7qmugZobOW6^2J2Oq5`^El@~ob~3&SbdLpQI_{ZM>} zy)VAUfbIjv)|#vNHZrI|5V1xxA2TYNsBoqFmU7CPkXkS^U-Z3K#SOdDqeLZgsLbgt zRh7%&nu0)M*Fs_YxV4Kd?wTg*Yn6E%qp?li*kL`Qj>l2sas86RWZVbVtq69B(b*_9 zmRtro|0pfEicrgN&dmgwiHX^KD z(-^i`WYt%P%A2J5X4k(yj@fcPtE=>H?f9#l!p+{&Gwc{}onD}x`ug+!mR*P(2ToXM zO|R6;q+CK~WLW8%P8gfBXi|YJlZ`y5qdb|rO$zJ%sNstF{vvtug=>$hB(nzq z!Vq;PhxEd!-#tI?F*3$&6)3UrXN4JTUUA|*?kR^cku2JmhScF^oxo{pM8?U7$y_U) zU}#btfiLMje*j5LP|ij2pt~!GUeMtJlsXgCI8VbuKm{Cz0-R^?*GpG=SFt_! z-UiZS$GqRg`x>i_GXY!xhPWF@Roe_7xckWoG|yPPlW+)o9dHkBG{9nJ3Q2wB_CGS! oz%tA3`^UWS|2m#KE!D0v+1Xrx2*fYnG7kEeqw871>42pF0ju&~6aWAK From a0a229f34436dfce0db2725bf29e3b131cafd34d Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Wed, 19 Oct 2022 16:20:21 +0100 Subject: [PATCH 07/54] 4.13 feature work (#15740) --- desktop/settings/linux.md | 2 ++ desktop/settings/mac.md | 2 ++ desktop/settings/windows.md | 2 ++ 3 files changed, 6 insertions(+) diff --git a/desktop/settings/linux.md b/desktop/settings/linux.md index 42033a3c5b..82d09b2881 100644 --- a/desktop/settings/linux.md +++ b/desktop/settings/linux.md @@ -134,6 +134,8 @@ Click **Apply & Restart** to save your settings and restart Docker Desktop. From the **Experimental features** tab, you can sign up to the [Developer Preview program](https://www.docker.com/community/get-involved/developer-preview/). +On the **Beta features** tab, you also have the option to allow version 4.13 feature flags, which are product features Docker is currently experimenting with. This is switched on by default. + ## Kubernetes Docker Desktop includes a standalone Kubernetes server, so that you can test diff --git a/desktop/settings/mac.md b/desktop/settings/mac.md index 54900c0751..35832596fe 100644 --- a/desktop/settings/mac.md +++ b/desktop/settings/mac.md @@ -163,6 +163,8 @@ Click **Apply & Restart** to save your settings and restart Docker Desktop. {% include experimental.md %} +On the **Beta features** tab, you also have the option to allow version 4.13 feature flags, which are product features Docker is currently experimenting with. This is switched on by default. + ### Enable the new Apple Virtualization framework Select **Use the new Virtualization framework** to allow Docker Desktop to use the new `virtualization.framework` instead of the ‘hypervisor.framework’. Ensure to reset your Kubernetes cluster when you enable the new Virtualization framework for the first time. diff --git a/desktop/settings/windows.md b/desktop/settings/windows.md index 69bd701710..2098bfc1ab 100644 --- a/desktop/settings/windows.md +++ b/desktop/settings/windows.md @@ -207,6 +207,8 @@ Click **Apply & Restart** to save your settings and restart Docker Desktop. From the **Experimental features** tab, you can sign up to the [Developer Preview program](https://www.docker.com/community/get-involved/developer-preview/). +On the **Beta features** tab, you also have the option to allow version 4.13 feature flags, which are product features Docker is currently experimenting with. This is switched on by default. + ## Kubernetes > **Note** From bbf63cfe5a9cd568cd7119dc2b0c859a870bf846 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Wed, 19 Oct 2022 17:20:40 +0200 Subject: [PATCH 08/54] Update settings documentation with beta features instead of experimental (#15535) --- _includes/beta.md | 7 +++++++ desktop/release-notes.md | 2 +- desktop/settings/linux.md | 6 +++--- desktop/settings/mac.md | 4 ++-- desktop/settings/windows.md | 6 +++--- 5 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 _includes/beta.md diff --git a/_includes/beta.md b/_includes/beta.md new file mode 100644 index 0000000000..483cdd8026 --- /dev/null +++ b/_includes/beta.md @@ -0,0 +1,7 @@ +Beta features provide early access to future product functionality. +These features are intended for testing and feedback only as they may change +between releases without warning or can be removed entirely from a future +release. Beta features must not be used in production environments. +Docker does not offer support for beta features. + +For a list of current experimental features in the Docker CLI, see [Docker CLI Experimental features](https://github.com/docker/cli/blob/master/experimental/README.md). diff --git a/desktop/release-notes.md b/desktop/release-notes.md index 9e7066d041..0fd0841270 100644 --- a/desktop/release-notes.md +++ b/desktop/release-notes.md @@ -693,7 +693,7 @@ For frequently asked questions about Docker Desktop releases, see [FAQs](faqs/ge #### For Mac -- Docker Desktop 4.6.0 gives macOS users the option of enabling a new experimental file sharing technology called VirtioFS. During testing VirtioFS has been shown to drastically reduce the time taken to sync changes between the host and VM, leading to substantial performance improvements. For more information, see [VirtioFS](settings/mac.md#experimental-features). +- Docker Desktop 4.6.0 gives macOS users the option of enabling a new experimental file sharing technology called VirtioFS. During testing VirtioFS has been shown to drastically reduce the time taken to sync changes between the host and VM, leading to substantial performance improvements. For more information, see [VirtioFS](settings/mac.md#beta-features). ### Upgrades diff --git a/desktop/settings/linux.md b/desktop/settings/linux.md index 82d09b2881..3afea5f719 100644 --- a/desktop/settings/linux.md +++ b/desktop/settings/linux.md @@ -128,11 +128,11 @@ Type a JSON configuration file in the box to configure the daemon settings. For Click **Apply & Restart** to save your settings and restart Docker Desktop. -## Experimental Features +## Beta Features -{% include experimental.md %} +{% include beta.md %} -From the **Experimental features** tab, you can sign up to the [Developer Preview program](https://www.docker.com/community/get-involved/developer-preview/). +From the **Beta features** tab, you can sign up to the [Developer Preview program](https://www.docker.com/community/get-involved/developer-preview/). On the **Beta features** tab, you also have the option to allow version 4.13 feature flags, which are product features Docker is currently experimenting with. This is switched on by default. diff --git a/desktop/settings/mac.md b/desktop/settings/mac.md index 35832596fe..4cc5e02386 100644 --- a/desktop/settings/mac.md +++ b/desktop/settings/mac.md @@ -159,9 +159,9 @@ Type a JSON configuration file in the box to configure the daemon settings. For Click **Apply & Restart** to save your settings and restart Docker Desktop. -## Experimental Features +## Beta Features -{% include experimental.md %} +{% include beta.md %} On the **Beta features** tab, you also have the option to allow version 4.13 feature flags, which are product features Docker is currently experimenting with. This is switched on by default. diff --git a/desktop/settings/windows.md b/desktop/settings/windows.md index 2098bfc1ab..4115561c8c 100644 --- a/desktop/settings/windows.md +++ b/desktop/settings/windows.md @@ -201,11 +201,11 @@ Type a JSON configuration file in the box to configure the daemon settings. For Click **Apply & Restart** to save your settings and restart Docker Desktop. -## Experimental features +## Beta features -{% include experimental.md %} +{% include beta.md %} -From the **Experimental features** tab, you can sign up to the [Developer Preview program](https://www.docker.com/community/get-involved/developer-preview/). +From the **Beta features** tab, you can sign up to the [Developer Preview program](https://www.docker.com/community/get-involved/developer-preview/). On the **Beta features** tab, you also have the option to allow version 4.13 feature flags, which are product features Docker is currently experimenting with. This is switched on by default. From 002a8d76a7cd6f6d403c846044e0e5e9102820e9 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Wed, 19 Oct 2022 17:28:46 +0200 Subject: [PATCH 09/54] Add documentation for new --installation-dir flag for the Windows Docker Desktop installer (#15712) Co-authored-by: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> --- desktop/install/windows-install.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/desktop/install/windows-install.md b/desktop/install/windows-install.md index caf44f3523..5168bd42e6 100644 --- a/desktop/install/windows-install.md +++ b/desktop/install/windows-install.md @@ -151,13 +151,14 @@ If using the Windows Command Prompt: start /w "" "Docker Desktop Installer.exe" install ``` -The install command accepts the following flags: +The `install` command accepts the following flags: - `--quiet`: suppresses information output when running the installer - `--accept-license`: accepts the [Docker Subscription Service Agreement](https://www.docker.com/legal/docker-subscription-service-agreement){: target="_blank" rel="noopener" class="_"} now, rather than requiring it to be accepted when the application is first run - `--no-windows-containers`: disables Windows containers integration - `--allowed-org=`: requires the user to sign in and be part of the specified Docker Hub organization when running the application - `--backend=`: selects the default backend to use for Docker Desktop, `hyper-v`, `windows` or `wsl-2` (default) +- `--installation-dir=`: changes the default installation location (`C:\Program Files\Docker\Docker`) - `--admin-settings`: Automatically creates an `admin-settings.json` file which is used by admins to control certain Docker Desktop settings on client machines within their organization. For more information, see [Settings Management](../hardened-desktop/settings-management/index.md). - It must be used together with the `--allowed-org=` flag. - For example: From 2e962ceb04e4f280da14e61d58564ae032576bc8 Mon Sep 17 00:00:00 2001 From: Lorena Rangel Date: Wed, 19 Oct 2022 17:33:47 +0200 Subject: [PATCH 10/54] Docker Desktop 4.13 release notes (#15887) * Docker Desktop 4.13 release notes Signed-off-by: Lorena Rangel * Update desktop/release-notes.md Signed-off-by: Lorena Rangel Co-authored-by: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> --- _includes/desktop-install.html | 18 +++---- desktop/install/archlinux.md | 2 +- desktop/install/debian.md | 2 +- desktop/install/fedora.md | 4 +- desktop/install/ubuntu.md | 2 +- desktop/release-notes.md | 98 +++++++++++++++++++++++++++++++++- 6 files changed, 111 insertions(+), 15 deletions(-) diff --git a/_includes/desktop-install.html b/_includes/desktop-install.html index 7b3ae50bb9..086470b9d2 100644 --- a/_includes/desktop-install.html +++ b/_includes/desktop-install.html @@ -13,7 +13,7 @@ Download file

- Checksum: SHA-256 996a4c5fff5b80b707ecfc0121d7ebe70d96c0bd568f058fd96f32cdec0c10cf + Checksum: SHA-256 2452d4c9e315d36ad4cade724c962dd18515b8e2f0c2e7f66290648e0319d72b @@ -31,7 +31,7 @@ Download file

- Checksum: SHA-256 41085009458ba1741c6a86c414190780ff3b288879aa27821fc4a985d229653c + Checksum: SHA-256 5a9e7b810bc9937a0945f9cbbb7ec00c2c5c386b5897c59c1c93187eaf0f2081 @@ -49,7 +49,7 @@ Download file

- Checksum: SHA-256 7eb63b4819cd1f87c61d5e8f54613692e07fb203d81bcf8d66f5de55489d3b81 + Checksum: SHA-256 f33037ef7b02946d5714012398848654bd7a759ee729b0346acc46a8e73a76ed @@ -64,10 +64,10 @@

- Download file + Download file

- Checksum: SHA-256 4407023db032219d6ac6031f81da6389ab192d3d06084ee6dad1ba4f4c64a4fe + Checksum: SHA-256 aa1d4ee1c2c72bf7be05c88d33d8f1f6344ab4e6d9de52f50367d9e799641102
@@ -82,10 +82,10 @@
- Download file + Download file

- Checksum: SHA-256 05e91f2a9763089acdfe710140893cb096bec955bcd99279bbe3aea035d09bc5 + Checksum: SHA-256 6f70246d11d06f123b8011eeafb7b0a161d60764719b44b817a49dee7da4a06e
@@ -100,10 +100,10 @@
- Download file + Download file

- Checksum: SHA-256 7c6b43c8ab140c755e6c8ce4ec494b3f5c4f3b0c1ab3cee8bfd0b6864f795d8a + Checksum: SHA-256 8aa42c18d643b5dc333cbea096f9585d89b912344a26fc9ea902f30d2c5140d8
diff --git a/desktop/install/archlinux.md b/desktop/install/archlinux.md index 2ce758f5cd..a205e80752 100644 --- a/desktop/install/archlinux.md +++ b/desktop/install/archlinux.md @@ -8,7 +8,7 @@ redirect_from: This topic discusses installation of Docker Desktop from an [Arch package](https://desktop-stage.docker.com/linux/main/amd64/78459/docker-desktop-4.8.0-x86_64.pkg.tar.zst?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64) that Docker provides in addition to the supported platforms. Docker has not tested or verified the installation. -[Arch package (experimental)](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-x86_64.pkg.tar.zst?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } +[Arch package (experimental)](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.0-x86_64.pkg.tar.zst?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } *For checksums, see [Release notes](../release-notes.md)* diff --git a/desktop/install/debian.md b/desktop/install/debian.md index 09fd24d413..e3682e6194 100644 --- a/desktop/install/debian.md +++ b/desktop/install/debian.md @@ -9,7 +9,7 @@ redirect_from: This page contains information on how to install, launch, and upgrade Docker Desktop on a Debian distribution. -[DEB package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } +[DEB package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.0-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } *For checksums, see [Release notes](../release-notes.md)* diff --git a/desktop/install/fedora.md b/desktop/install/fedora.md index e4ea36b7c8..74b258ad3c 100644 --- a/desktop/install/fedora.md +++ b/desktop/install/fedora.md @@ -9,7 +9,7 @@ redirect_from: This page contains information on how to install, launch and upgrade Docker Desktop on a Fedora distribution. -[RPM package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-x86_64.rpm?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } +[RPM package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.0-x86_64.rpm?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } ## Prerequisites @@ -31,7 +31,7 @@ To install Docker Desktop on Fedora: 1. Set up [Docker's package repository](../../engine/install/fedora.md#set-up-the-repository). -2. Download latest [RPM package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-x86_64.rpm?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64). +2. Download latest [RPM package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.0-x86_64.rpm?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64). 3. Install the package with dnf as follows: diff --git a/desktop/install/ubuntu.md b/desktop/install/ubuntu.md index 2615857ce5..fd1303c2d4 100644 --- a/desktop/install/ubuntu.md +++ b/desktop/install/ubuntu.md @@ -9,7 +9,7 @@ redirect_from: This page contains information on how to install, launch and upgrade Docker Desktop on an Ubuntu distribution. -[DEB package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } +[DEB package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.0-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64){: .button .primary-btn } *For checksums, see [Release notes](../release-notes.md)* diff --git a/desktop/release-notes.md b/desktop/release-notes.md index 0fd0841270..a0fe704c23 100644 --- a/desktop/release-notes.md +++ b/desktop/release-notes.md @@ -24,12 +24,108 @@ Take a look at the [Docker Public Roadmap](https://github.com/docker/roadmap/pro For frequently asked questions about Docker Desktop releases, see [FAQs](faqs/general.md/#releases) +## Docker Desktop 4.13.0 +2022-10-19 + +> Download Docker Desktop +> +> {% include desktop-install.html %} + +### New + +- Two new security features have been introduced for Docker Business users, Settings Management and Enhanced Container Isolation. +- Added the new Dev Environments CLI `docker dev`, so you can create, list, and run Dev Envs via command line. Now it's easier to integrate Dev Envs into custom scripts. +- Docker Desktop can now be installed to any drive and folder using the `--installation-dir`. Partially addresses [docker/roadmap#94](https://github.com/docker/roadmap/issues/94). + +### Upgrades + +- [Docker Scan v0.21.0](https://github.com/docker/scan-cli-plugin/releases/tag/v0.21.0) +- [Go 1.19.2](https://github.com/golang/go/releases/tag/go1.19.2) to address [CVE-2022-2879](https://www.cve.org/CVERecord?id=CVE-2022-2879){: target="_blank" rel="noopener"}, [CVE-2022-2880](https://www.cve.org/CVERecord?id=CVE-2022-2880){: target="_blank" rel="noopener"} and [CVE-2022-41715](https://www.cve.org/CVERecord?id= CVE-2022-41715){: target="_blank" rel="noopener"} +- Updated Docker Engine and Docker CLI to [v20.10.20](https://docs.docker.com/engine/release-notes/#201020), + which contain mitigations against a Git vulnerability, tracked in [CVE-2022-39253](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-39253){:target="_blank" rel="noopener"}, + and updated handling of `image:tag@digest` image references, as well as a fix for [CVE-2022-36109](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-36109). +- [Docker Credential Helpers v0.7.0](https://github.com/docker/docker-credential-helpers/releases/tag/v0.7.0){: target="blank" rel="noopener" class=""} +- [Docker Compose v2.12.0](https://github.com/docker/compose/releases/tag/v2.12.0) +- [Kubernetes v1.25.2](https://github.com/kubernetes/kubernetes/releases/tag/v1.25.2) +- [Qemu 7.0.0](https://wiki.qemu.org/ChangeLog/7.0) used for cpu emulation, inside the Docker Desktop VM. +- [Linux kernel 5.15.49](https://hub.docker.com/layers/docker/for-desktop-kernel/5.15.49-13422a825f833d125942948cf8a8688cef721ead/images/sha256-ebf1f6f0cb58c70eaa260e9d55df7c43968874d62daced966ef6a5c5cd96b493?context=explore) + +### Bug fixes and minor changes + +#### For all platforms + +- Docker Desktop now allows the use of TLS when talking to HTTP and HTTPS proxies to encrypt proxy usernames and passwords. +- Docker Desktop now stores HTTP and HTTPS proxy passwords in the OS credential store. +- If Docker Desktop detects that the HTTP or HTTPS proxy password has changed then it will prompt developers for the new password. +- The **Bypass proxy settings for these hosts and domains** setting now handles domain names correctly for HTTPS. +- The **Remote Repositories** view and Tip of the Day now works with HTTP and HTTPS proxies which require authentication +- We’ve introduced dark launch for features that are in early stages of the product development lifecycle. Users that are opted in can opt out at any time in the settings under the “beta features” section. +- Added categories to the Extensions Marketplace. +- Added an indicator in the whale menu and on the **Extension** tab on when extension updates are available. +- Fixed failing uninstalls of extensions with image names that do not have a namespace, as in 'my-extension'. +- Show port mapping explicitly in the **Container** tab. +- Changed the refresh rate for disk usage information for images to happen automatically once a day. +- Made the tab style consistent for the **Container** and **Volume** tabs. +- Fixed Grpcfuse filesharing mode enablement in **Settings**. Fixes [docker/for-mac#6467](https://github.com/docker/for-mac/issues/6467) +- Virtualization Framework and VirtioFS are disabled for users running macOS < 12.5. +- Ports on the **Containers** tab are now clickable. +- The Extensions SDK now allows `ddClient.extension.vm.cli.exec`, `ddClient.extension.host.cli.exec`, `ddClient.docker.cli.exec` to accept a different working directory and pass environment variables through the options parameters. +- Added a small improvement to navigate to the Extensions Marketplace when clicking on **Extensions** in the sidebar. +- Added a badge to identify new extensions in the Marketplace. +- Fixed kubernetes not starting with the containerd integration. +- Fixed `kind` not starting with the containerd integration. +- Fixed dev environments not working with the containerd integration. +- Implemented `docker diff` in the containerd integration. +- Implemented `docker run —-platform` in the containerd integration. +- Fixed insecure registries not working with the containerd integration. +- Fixed a bug that showed incorrect values on used space in **Settings**. +- Docker Desktop now installs credential helpers from Github releases. See [docker/for-win#10247](https://github.com/docker/for-win/issues/10247), [docker/for-win#12995](https://github.com/docker/for-win/issues/12995), [docker/for-mac#12399](https://github.com/docker/for-mac/issues/12399). +- Fixed an issue where users were logged out of Docker Desktop after 7 days. + + +#### For Mac + +- Added **Hide**, **Hide others**, **Show all** menu items for Docker Desktop. See [docker/for-mac#6446](https://github.com/docker/for-mac/issues/6446). +- Fixed a bug which caused the application to be deleted when running the install utility from the installed application. Fixes [docker/for-mac#6442](https://github.com/docker/for-mac/issues/6442). +- By default Docker will not create the /var/run/docker.sock symlink on the host and use the docker-desktop CLI context instead. + +#### For Linux +- Fixed a bug that prevented pushing images from the Dashboard + ## Docker Desktop 4.12.0 2022-09-01 > Download Docker Desktop > -> {% include desktop-install.html %} +> [Windows](https://desktop.docker.com/win/main/amd64/85629/Docker%20Desktop%20Installer.exe) | +> [Mac with Intel chip](https://desktop.docker.com/mac/main/amd64/85629/Docker.dmg) | +> [Mac with Apple chip](https://desktop.docker.com/mac/main/arm64/85629/Docker.dmg) | +> [Debian](https://desktop.docker.com/linux/main/amd64/85629/docker-desktop-4.12.0-amd64.deb) | +> [RPM](https://desktop.docker.com/linux/main/amd64/85629/docker-desktop-4.12.0-x86_64.rpm) | +> [Arch package](https://desktop.docker.com/linux/main/amd64/85629/docker-desktop-4.12.0-x86_64.pkg.tar.zst) + +
+
+ +
+
+
  • Windows: SHA-256 996a4c5fff5b80b707ecfc0121d7ebe70d96c0bd568f058fd96f32cdec0c10cf
  • +
  • Mac Intel: SHA-256 41085009458ba1741c6a86c414190780ff3b288879aa27821fc4a985d229653c
  • +
  • Mac Arm: SHA-256 7eb63b4819cd1f87c61d5e8f54613692e07fb203d81bcf8d66f5de55489d3b81
  • +
  • Linux DEB: SHA-256 4407023db032219d6ac6031f81da6389ab192d3d06084ee6dad1ba4f4c64a4fe
  • +
  • Linux RPM: SHA-256 05e91f2a9763089acdfe710140893cb096bec955bcd99279bbe3aea035d09bc5
  • +
  • Linux Arch: SHA-256 7c6b43c8ab140c755e6c8ce4ec494b3f5c4f3b0c1ab3cee8bfd0b6864f795d8a
  • +
    +
    +
    +
    ### New From c4014cf2226122023b4aa2b2f164d824e2c1c639 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Wed, 19 Oct 2022 16:45:09 +0100 Subject: [PATCH 11/54] add release link note (#15917) * add release link note * Update desktop/release-notes.md --- desktop/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/release-notes.md b/desktop/release-notes.md index a0fe704c23..844092c3cf 100644 --- a/desktop/release-notes.md +++ b/desktop/release-notes.md @@ -33,7 +33,7 @@ For frequently asked questions about Docker Desktop releases, see [FAQs](faqs/ge ### New -- Two new security features have been introduced for Docker Business users, Settings Management and Enhanced Container Isolation. +- Two new security features have been introduced for Docker Business users, Settings Management and Enhanced Container Isolation. Read more about Docker Desktop’s new [Hardened Desktop security model](hardened-desktop/index.md). - Added the new Dev Environments CLI `docker dev`, so you can create, list, and run Dev Envs via command line. Now it's easier to integrate Dev Envs into custom scripts. - Docker Desktop can now be installed to any drive and folder using the `--installation-dir`. Partially addresses [docker/roadmap#94](https://github.com/docker/roadmap/issues/94). From 0f34b82c9bc110ceae1b8ead94c029f59e129750 Mon Sep 17 00:00:00 2001 From: Jerae Duffin Date: Wed, 19 Oct 2022 07:48:32 -0500 Subject: [PATCH 12/54] updated repo topics --- docker-hub/repos/access/index.md | 30 +++++++------------- docker-hub/repos/configure/index.md | 43 ++++++++++++----------------- docker-hub/repos/index.md | 16 +++++++---- 3 files changed, 38 insertions(+), 51 deletions(-) diff --git a/docker-hub/repos/access/index.md b/docker-hub/repos/access/index.md index 4c0a5e39fa..cd02b50ab8 100644 --- a/docker-hub/repos/access/index.md +++ b/docker-hub/repos/access/index.md @@ -4,6 +4,8 @@ keywords: Docker, docker, trusted, registry, accounts, plans, Dockerfile, Docker title: Access repositories --- + Within your repository, you can give others access to push and pull to your repository, and you can assign permissions. You can also view your repository tags and the associated images. + ## Collaborators and their role A collaborator is someone you want to give access to a private repository. Once @@ -23,38 +25,28 @@ see the [organizations documentation](../../../docker-hub/orgs.md#create-an-orga ## Viewing repository tags Docker Hub's individual repositories view shows you the available tags and the -size of the associated image. Go to the **Repositories** view and select repository to see its tags. - -![Repository View](../../images/repos-create.png) +size of the associated image. Go to the **Repositories** view and select repository to see its tags. To view individual tags, select the **Tags** tab. ![View Repo Tags](../../images/repo-overview.png) Image sizes are the cumulative space taken up by the image and all its parent images. This is also the disk space used by the contents of the `.tar` file -created when you `docker save` an image. +created when you `docker save` an image. An image is stale if there has been no push/pull activity for more than one month. For example: -To view individual tags, select the **Tags** tab. +* It hasn't been pulled for more than one month +* And it hasn't been pushed for more than one month -![Manage Repo Tags](../../images/repo-tags-list.png) - -An image is considered stale if there has been no push/pull activity for more -than 1 month, i.e.: - -* It hasn't been pulled for more than 1 month -* And it hasn't been pushed for more than 1 month - -A multi-architecture image is considered stale if all single-architecture images +A multi-architecture image is stale if all single-architecture images part of its manifest are stale. -To delete a tag, select the corresponding checkbox and select **Delete** from the -**Action** drop-down list. +To delete a tag, select the corresponding checkbox and select **Delete** from the **Action** drop-down list. > **Note** > > Only a user with administrative access (owner or team member with Admin > permission) over the repository can delete tags. -Select a tag's digest to view details. +You can select a tag's digest to view more details. ![View Tag](../../images/repo-image-layers.png) @@ -99,6 +91,4 @@ You now have an image from which you can run containers. ## Starring repositories -Your repositories can be starred and you can star repositories in return. Stars -are a way to show that you like a repository. They're also an easy way of -bookmarking your favorites. +Your can star your repositories. Stars are a way to show that you like a repository. They're also an easy way of bookmarking your favorites. diff --git a/docker-hub/repos/configure/index.md b/docker-hub/repos/configure/index.md index 27d6105e8e..693d522e92 100644 --- a/docker-hub/repos/configure/index.md +++ b/docker-hub/repos/configure/index.md @@ -3,55 +3,46 @@ description: Configuring repositories on Docker Hub keywords: Docker, docker, trusted, registry, accounts, plans, Dockerfile, Docker Hub, webhooks, docs, documentation, creating, deleting, consolidating title: Configure repositories --- + +When configuring repositories, your private repositories let you keep your container images private, to your personal account or within an organization or team. You can also view your permissions or manage your users' access to those repositories. + + ## Private repositories -Private repositories let you keep container images private, either to your -own account or within an organization or team. +You can make an existing repository private by going to its **Settings** tab and select **Make private**. -To create a private repository, select **Private** when creating a repository: +![Repo make private](../../images/repo-make-private.png){: style="max-width: 60%"} -![Create Private Repo](../../images/repo-create-private.png){: style="max-width: 60%"} +You get one free private repository with your Docker Hub user account (not +available for organizations you're a member of). If you need more private +repositories for your user account, upgrade your Docker Hub subscription from your [Billing Information](https://hub.docker.com/billing/plan){: target="_blank" rel="noopener" class="_"} page. -You can also make an existing repository private by going to its **Settings** tab: - -![Convert Repo to Private](../../images/repo-make-private.png){: style="max-width: 60%"} - -You get one private repository for free with your Docker Hub user account (not -usable for organizations you're a member of). If you need more private -repositories for your user account, upgrade your Docker Hub plan from your -[Billing Information](https://hub.docker.com/billing/plan){: target="_blank" rel="noopener" class="_"} page. - -Once you create the private repository, you can `push` and `pull` images to and +Once you've created a private repository, you can `push` and `pull` images to and from it using Docker. > **Note**: You must sign in and have access to work with a -> private repository. - -> **Note**: Private repositories aren't available to search through +> private repository. Private repositories aren't available to search through > the top-level search or `docker search`. You can choose collaborators and manage their access to a private repository from that repository's **Settings** page. You can also toggle the repository's status between public and private, if you have an available repository slot open. Otherwise, you can upgrade your -[Docker Hub](https://hub.docker.com/account/billing-plans/){: target="_blank" rel="noopener" class="_"} plan. +[Docker Hub](https://hub.docker.com/account/billing-plans/){: target="_blank" rel="noopener" class="_"} subscription. ### Permissions reference Permissions are cumulative. For example, if you have Read & Write permissions, you automatically have Read-only permissions: -- `Read-only` access allows users to view, search, and pull a private repository in the same way as they can a public repository. -- `Read & Write` access allows users to pull, push, and view a repository Docker - Hub. In addition, it allows users to view, cancel, retry or trigger builds -- `Admin` access allows users to Pull, push, view, edit, and delete a - repository; edit build settings; update the repository description modify the - repositories "Description", "Collaborators" rights, "Public/Private" - visibility, and "Delete". +- `Read-only` access lets users view, search, and pull a private repository in the same way as they can a public repository. +- `Read & Write` access lets users pull, push, and view a repository. In addition, it lets users view, cancel, retry or trigger builds +- `Admin` access lets users pull, push, view, edit, and delete a + repository. You can also edit build settings, and update the repositories description, collaborators rights, public/private visibility, and delete. > **Note** > -> A User who hasn't yet verified their email address only has +> A user who hasn't verified their email address only has > `Read-only` access to the repository, regardless of the rights their team > membership has given them. diff --git a/docker-hub/repos/index.md b/docker-hub/repos/index.md index b20c575e9b..79d811c82d 100644 --- a/docker-hub/repos/index.md +++ b/docker-hub/repos/index.md @@ -13,7 +13,7 @@ Docker images are pushed to Docker Hub through the [`docker push`](/engine/refer command. A single Docker Hub repository can hold many Docker images (stored as **tags**). -## Creating repositories +## Creating a repository To create a repository, sign into Docker Hub, select **Repositories** then **Create Repository**: @@ -31,20 +31,26 @@ When creating a new repository: > > You can't rename a Docker Hub repository once it's created. -* The description can be up to 100 characters and is used in the search result. +* The description can be up to 100 characters and used in the search result. * You can link a GitHub or Bitbucket account now, or choose to do it later in the repository settings. ![Setting page for creating a repo](../images/repo-create-details.png) -After you hit the **Create** button, you can start using `docker push` to push +After you select **Create**, you can start using `docker push` to push images to this repository. +## Creating a private repository + +To create a private repository, navigate to Docker Hub and select **Repositories** and **Private**. + +![Create Private Repo](/docker-hub/images/repo-create-private.png){: style="max-width: 60%"} + ## Deleting a repository -1. Sign into [Docker Hub](https://hub.docker.com){: target="_blank" rel="noopener" class="_"} and select **Repositories**. +1. Navigate to [Docker Hub](https://hub.docker.com){: target="_blank" rel="noopener" class="_"} and select **Repositories**. -2. Select a repository from the list, select **Settings** and then Delete Repository. +2. Select a repository from the list, select **Settings**, and then Delete Repository. > **Note:** > From 442300bc47da43403e0bfd07c5d6828afc471067 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Thu, 20 Oct 2022 10:06:42 +0100 Subject: [PATCH 13/54] HD patch (#15923) --- .../hardened-desktop/enhanced-container-isolation/faq.md | 2 +- .../enhanced-container-isolation/features-benefits.md | 4 ++-- .../enhanced-container-isolation/how-eci-works.md | 2 +- .../enhanced-container-isolation/index.md | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/desktop/hardened-desktop/enhanced-container-isolation/faq.md b/desktop/hardened-desktop/enhanced-container-isolation/faq.md index 3e4f5b72ff..d51ae2e2bf 100644 --- a/desktop/hardened-desktop/enhanced-container-isolation/faq.md +++ b/desktop/hardened-desktop/enhanced-container-isolation/faq.md @@ -32,7 +32,7 @@ containers securely. For more information, see [Key features and benefits](featu #### Will all privileged container workloads run with Enhanced Container Isolation? -No. Privileged container workloads that wish to access global kernel resources, for example non-namespaced, inside the Docker Desktop Linux VM won't +No. Privileged container workloads, or non-namespaced workloads, that wish to access global kernel resources inside the Docker Desktop Linux VM won't work. For example, you can't use a privileged container to load a kernel module. #### Why not just restrict usage of the `--privileged` flag? diff --git a/desktop/hardened-desktop/enhanced-container-isolation/features-benefits.md b/desktop/hardened-desktop/enhanced-container-isolation/features-benefits.md index c912044c86..5f147871b6 100644 --- a/desktop/hardened-desktop/enhanced-container-isolation/features-benefits.md +++ b/desktop/hardened-desktop/enhanced-container-isolation/features-benefits.md @@ -191,8 +191,8 @@ mount: permission denied (are you root?) ``` Since the `$HOME` directory was mounted into the container's `/mnt` directory as -read-only, it can't be changed from within the container to read-write. This -ensures container processes use `mount`, or `umount`, to breach the container's +read-only, it can't be changed from within the container to read-write, even if the container process has the capability to do so. This +ensures container processes can't use `mount`, or `umount`, to breach the container's root filesystem. Note however that in the example above the container can still create mounts diff --git a/desktop/hardened-desktop/enhanced-container-isolation/how-eci-works.md b/desktop/hardened-desktop/enhanced-container-isolation/how-eci-works.md index 153c922bd9..c3d466aa1d 100644 --- a/desktop/hardened-desktop/enhanced-container-isolation/how-eci-works.md +++ b/desktop/hardened-desktop/enhanced-container-isolation/how-eci-works.md @@ -11,7 +11,7 @@ keywords: set up, enhanced container isolation, rootless, security Enhanced Container Isolation hardens container isolation using the [Sysbox container runtime](https://github.com/nestybox/sysbox). Sysbox is a fork of the standard OCI runc runtime that was modified to enhance container isolation and -workloads. For more details see [Under the covers](#under-the-hood). +workloads. For more details see [Under the hood](#under-the-hood). Starting with version 4.13, Docker Desktop includes a customized version of Sysbox. diff --git a/desktop/hardened-desktop/enhanced-container-isolation/index.md b/desktop/hardened-desktop/enhanced-container-isolation/index.md index c04864f9c6..767f7dd8cd 100644 --- a/desktop/hardened-desktop/enhanced-container-isolation/index.md +++ b/desktop/hardened-desktop/enhanced-container-isolation/index.md @@ -82,7 +82,7 @@ When Enhanced Container Isolation is enabled, users see that containers run with To check, run: ``` -$ docker run -it --rm alpine / # cat /proc/self/uid_map +$ docker run --rm alpine cat /proc/self/uid_map ``` The following output displays: @@ -105,9 +105,9 @@ With Enhanced Container Isolation, if a process were to escape the container, it Since Enhanced Container Isolation [uses the Sysbox container runtime](how-eci-works.md) embedded in the Docker Desktop Linux VM, another way to determine if a container is running with Enhanced Container Isolation is by using `docker inspect`: -``` -docker inspect --format='{{.HostConfig.Runtime}}' my_container -``` +{% highlight liquid %} +docker inspect --format={% raw %}'{{.HostConfig.Runtime}}'{% endraw %} my_container +{% endhighlight %} It outputs: From 8773df7f1655ee9a9dc918dcf93be551e0ae3eed Mon Sep 17 00:00:00 2001 From: Bruno Sousa <107440821+bsousaa@users.noreply.github.com> Date: Thu, 20 Oct 2022 13:02:02 +0100 Subject: [PATCH 14/54] Add containerd release notes (#15921) * Add containerd release notes for October release Signed-off-by: Bruno Sousa * add bug fixes header Signed-off-by: Bruno Sousa Signed-off-by: Bruno Sousa --- desktop/containerd/index.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/desktop/containerd/index.md b/desktop/containerd/index.md index 04bc1ceaa5..561dd59740 100644 --- a/desktop/containerd/index.md +++ b/desktop/containerd/index.md @@ -209,6 +209,21 @@ View Tags on DockerHub to see multi-platform result: ## Containerd Image Store Release Notes +(2022-10-19) +New commands and multiple bug fixes included with Docker Desktop 4.13.0. + +### New +* Added `docker diff` and `docker run --platform` support. + +### Bug fixes +* Fixed a bug which caused Kubernetes not starting. +* Fixed a bug which caused Kubernetes IN Docker (kind) not starting. +* Fixed a bug which caused Dev Environments not working. +* Fixed a bug which caused Insecure Registries not working. + +### Known issues +* Listing images with `docker images` returns the error `content digest not found` on ARM machines after running or pulling an image with the `--platform` parameter. + (2022-09-01) The Containerd Image Store is shipped as a [Beta](../../release-lifecycle.md/#beta) feature on Docker Desktop 4.12.0. From 8ebd41f2f6628065e15bb3dddf7757c349f08115 Mon Sep 17 00:00:00 2001 From: Craig Osterhout <103533812+craig-osterhout@users.noreply.github.com> Date: Thu, 20 Oct 2022 09:46:57 -0700 Subject: [PATCH 15/54] add nav buttons and fix title (#15890) --- _data/toc.yaml | 4 ++-- get-started/02_our_app.md | 16 +++++++++------- get-started/03_updating_app.md | 14 ++++++++------ get-started/04_sharing_app.md | 14 ++++++++------ get-started/05_persisting_data.md | 11 ++++++----- get-started/06_bind_mounts.md | 14 +++++++------- get-started/07_multi_container.md | 13 +++++++------ get-started/08_using_compose.md | 13 +++++++------ get-started/09_image_best.md | 12 ++++++++---- get-started/index.md | 8 ++++++++ 10 files changed, 70 insertions(+), 49 deletions(-) diff --git a/_data/toc.yaml b/_data/toc.yaml index 9827ddfce8..c9388dac4e 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -29,9 +29,9 @@ guides: path: /get-docker/ - sectiontitle: Get started section: - - title: "Part 1: Getting started" + - title: "Part 1: Orientation and setup" path: /get-started/ - - title: "Part 2: Sample application" + - title: "Part 2: Containerize an application" path: /get-started/02_our_app/ - title: "Part 3: Update the application" path: /get-started/03_updating_app/ diff --git a/get-started/02_our_app.md b/get-started/02_our_app.md index 79b1e5b9bf..79fc922e50 100644 --- a/get-started/02_our_app.md +++ b/get-started/02_our_app.md @@ -1,9 +1,9 @@ --- -title: "Sample application" +title: "Containerize an application" keywords: get started, setup, orientation, quickstart, intro, concepts, containers, docker desktop redirect_from: - /get-started/part2/ -description: overview of our simple application for learning docker +description: Containerize and run a simple application to learn Docker --- @@ -111,10 +111,12 @@ If you take a quick look at the Docker Dashboard, you should see your two contai ![Docker Dashboard with tutorial and app containers running](images/dashboard-two-containers.png) -## Recap +## Next steps -In this short section, we learned the very basics about building a container image and created a -Dockerfile to do so. Once we built an image, we started the container and saw the running app. +In this short section, you learned the basics about building a container image and created a +Dockerfile to do so. Once you built an image, you started the container and saw the running app. -Next, we're going to make a modification to our app and learn how to update our running application -with a new image. Along the way, we'll learn a few other useful commands. +Next, you're going to make a modification to your app and learn how to update your running application +with a new image. Along the way, you'll learn a few other useful commands. + +[Update the application](03_updating_app.md){: .button .primary-btn} \ No newline at end of file diff --git a/get-started/03_updating_app.md b/get-started/03_updating_app.md index 38af3cf3ad..9b228bf6bb 100644 --- a/get-started/03_updating_app.md +++ b/get-started/03_updating_app.md @@ -105,13 +105,15 @@ much easier than having to look up the container ID and remove it. ![Updated application with updated empty text](images/todo-list-updated-empty-text.png){: style="width:55%" } {: .text-center } -## Recap +## Next steps -While we were able to build an update, there were two things you might have noticed: +While you were able to build an update, there were two things you might have noticed: -- All of the existing items in our todo list are gone! That's not a very good app! We'll talk about that +- All of the existing items in your todo list are gone! That's not a very good app! You'll fix that shortly. -- There were _a lot_ of steps involved for such a small change. In an upcoming section, we'll talk about -how to see code updates without needing to rebuild and start a new container every time we make a change. +- There were a lot of steps involved for such a small change. In an upcoming section, you'll learn +how to see code updates without needing to rebuild and start a new container every time you make a change. -Before talking about persistence, we'll quickly see how to share these images with others. +Before talking about persistence, you'll see how to share these images with others. + +[Sharing the application](04_sharing_app.md){: .button .primary-btn} diff --git a/get-started/04_sharing_app.md b/get-started/04_sharing_app.md index 289841cd6c..87c51a7ca2 100644 --- a/get-started/04_sharing_app.md +++ b/get-started/04_sharing_app.md @@ -94,14 +94,16 @@ new instance that has never seen this container image! To do this, we will use P 6. Click on the 3000 badge when it comes up and you should see the app with your modifications! Hooray! If the 3000 badge doesn't show up, you can click on the "Open Port" button and type in 3000. -## Recap -In this section, we learned how to share our images by pushing them to a registry. We then went to a +## Next steps + +In this section, you learned how to share your images by pushing them to a registry. You then went to a brand new instance and were able to run the freshly pushed image. This is quite common in CI pipelines, where the pipeline will create the image and push it to a registry and then the production environment can use the latest version of the image. -Now that we have that figured out, let's circle back around to what we noticed at the end of the last -section. As a reminder, we noticed that when we restarted the app, we lost all of our todo list items. -That's obviously not a great user experience, so let's learn how we can persist the data across -restarts! +Now you can circle back around to what you noticed at the end of the last +section. As a reminder, you noticed that when you restarted the app, you lost all of your todo list items. +That's obviously not a great user experience, so next you'll learn how you can persist the data across restarts! + +[Persist the DB](05_persisting_data.md){: .button .primary-btn} \ No newline at end of file diff --git a/get-started/05_persisting_data.md b/get-started/05_persisting_data.md index c0297c7592..c7b5abed59 100644 --- a/get-started/05_persisting_data.md +++ b/get-started/05_persisting_data.md @@ -156,10 +156,11 @@ need to have root access to access this directory from the host. But, that's whe >If you wanted to look at the actual contents of the Mountpoint directory, you would need to first get inside >of the VM. -## Recap +## Next steps -At this point, we have a functioning application that can survive restarts! We can show it off to our investors and -hope they can catch our vision! +At this point, you have a functioning application that can survive restarts! You can show it off to your investors and hope they can catch your vision! -However, we saw earlier that rebuilding images for every change takes quite a bit of time. There's got to be a better -way to make changes, right? With bind mounts (which we hinted at earlier), there is a better way! Let's take a look at that now! +However, you saw earlier that rebuilding images for every change takes quite a bit of time. There's got to be a better +way to make changes, right? With bind mounts (which was hinted at earlier), there is a better way! + +[Use bind mounts](06_bind_mounts.md){: .button .primary-btn} \ No newline at end of file diff --git a/get-started/06_bind_mounts.md b/get-started/06_bind_mounts.md index 237375895d..1bba3ef3cf 100644 --- a/get-started/06_bind_mounts.md +++ b/get-started/06_bind_mounts.md @@ -118,13 +118,13 @@ all of the build tools and environments installed. With a single `docker run` co to go. We'll talk about Docker Compose in a future step, as this will help simplify our commands (we're already getting a lot of flags). -## Recap +## Next steps -At this point, we can persist our database and respond rapidly to the needs and demands of our investors and founders. Hooray! -But, guess what? We received great news! +At this point, you can persist your database and respond rapidly to the needs and demands of your investors and founders. Hooray! +But, guess what? You received great news! Your project has been selected for future development! -**Your project has been selected for future development!** +In order to prepare for production, you need to migrate your database from working in SQLite to something that can scale a +little better. For simplicity, you'll keep with a relational database and switch your application to use MySQL. But, how +should you run MySQL? How do you allow the containers to talk to each other? You'll learn about that next! -In order to prepare for production, we need to migrate our database from working in SQLite to something that can scale a -little better. For simplicity, we'll keep with a relational database and switch our application to use MySQL. But, how -should we run MySQL? How do we allow the containers to talk to each other? We'll talk about that next! +[Multi container apps](07_multi_container.md){: .button .primary-btn} \ No newline at end of file diff --git a/get-started/07_multi_container.md b/get-started/07_multi_container.md index a1f286796b..6cd6d05e48 100644 --- a/get-started/07_multi_container.md +++ b/get-started/07_multi_container.md @@ -281,15 +281,16 @@ no real indication that they are grouped together in a single app. We'll see how ![Docker Dashboard showing two ungrouped app containers](images/dashboard-multi-container-app.png) -## Recap +## Next steps -At this point, we have an application that now stores its data in an external database running in a separate -container. We learned a little bit about container networking and saw how service discovery can be performed -using DNS. +At this point, you have an application that now stores its data in an external database running in a separate +container. You learned a little bit about container networking and service discovery using DNS. But, there's a good chance you are starting to feel a little overwhelmed with everything you need to do to start up -this application. We have to create a network, start containers, specify all of the environment variables, expose +this application. You have to create a network, start containers, specify all of the environment variables, expose ports, and more! That's a lot to remember and it's certainly making things harder to pass along to someone else. -In the next section, we'll talk about Docker Compose. With Docker Compose, we can share our application stacks in a +In the next section, you'll learn about Docker Compose. With Docker Compose, you can share your application stacks in a much easier way and let others spin them up with a single (and simple) command! + +[Use Docker Compose](08_using_compose.md){: .button .primary-btn} \ No newline at end of file diff --git a/get-started/08_using_compose.md b/get-started/08_using_compose.md index 0010a87110..c1513147d7 100644 --- a/get-started/08_using_compose.md +++ b/get-started/08_using_compose.md @@ -352,12 +352,13 @@ for the entire app. The containers will stop and the network will be removed. Once torn down, you can switch to another project, run `docker compose up` and be ready to contribute to that project! It really doesn't get much simpler than that! -## Recap +## Next steps -In this section, we learned about Docker Compose and how it helps us dramatically simplify the defining and -sharing of multi-service applications. We created a Compose file by translating the commands we were +In this section, you learned about Docker Compose and how it helps you dramatically simplify the defining and +sharing of multi-service applications. You created a Compose file by translating the commands you were using into the appropriate compose format. -At this point, we're starting to wrap up the tutorial. However, there are a few best practices about -image building we want to cover, as there is a big issue with the Dockerfile we've been using. So, -let's take a look! +At this point, you're starting to wrap up the tutorial. However, there are a few best practices about +image building you should cover, as there is a big issue with the Dockerfile you've been using. + +[Image-building best practices](09_image_best.md){: .button .primary-btn} diff --git a/get-started/09_image_best.md b/get-started/09_image_best.md index eb11362a2e..528ee5b7a0 100644 --- a/get-started/09_image_best.md +++ b/get-started/09_image_best.md @@ -275,9 +275,13 @@ COPY --from=build /app/build /usr/share/nginx/html Here, we are using a `node:12` image to perform the build (maximizing layer caching) and then copying the output into an nginx container. Cool, huh? -## Recap +## Next steps -By understanding a little bit about how images are structured, we can build images faster and ship fewer changes. -Scanning images gives us confidence that the containers we are running and distributing are secure. -Multi-stage builds also help us reduce overall image size and increase final container security by separating +By understanding a little bit about the structure of images, you can build images faster and ship fewer changes. +Scanning images gives you confidence that the containers you are running and distributing are secure. +Multi-stage builds also help you reduce overall image size and increase final container security by separating build-time dependencies from runtime dependencies. + +In the next section, you'll learn about additional resources you can use to continue learning about containers. + +[What next](11_what_next.md){: .button .primary-btn} \ No newline at end of file diff --git a/get-started/index.md b/get-started/index.md index 63c57d06d7..ab5b62e3bb 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -187,3 +187,11 @@ Refer to the following topics for further documentation on all CLI commands used - [docker image](../engine/reference/commandline/image.md) - [docker container](../engine/reference/commandline/container.md) +## Next steps + +In this section, you installed Docker, learned about Docker, and learned about containers and images. + +In the next section, you'll containerize your first application. + +[Containerize an application](02_our_app.md){: .button .primary-btn} + From 746afc20c5af160428892ee54d7f46713976faab Mon Sep 17 00:00:00 2001 From: Jerae Duffin Date: Thu, 20 Oct 2022 13:57:16 -0500 Subject: [PATCH 16/54] updated subscription --- single-sign-on/images/sso-domain.png | Bin 26960 -> 56842 bytes single-sign-on/index.md | 10 +++++----- subscription/upgrade.md | 11 +++++------ 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/single-sign-on/images/sso-domain.png b/single-sign-on/images/sso-domain.png index 0e6d4ab8dfa952f93b1239ac5a36a29fda5191e3..b39772b85aabf1f9b7dbf15926c433209aba3a31 100644 GIT binary patch literal 56842 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 literal 26960 zcmeFZS6EY9)Ha%}8ygBJLMQ^FL8JwdCepU3NTiq00|L?solpaA1W^&t(3BPdX`#1J z0z|qL={2DVQbPzmgq9QccfPB0d7kGy=iA@JeL3f zz!iwb69WL?0vG@|gSc>(ai(}Fa|Zx83((UtddheS06+l%3;;j}fB*mx6ac~iKy&~E z0DwRN5DWl92fzUUI1~WK0N`{03IISs0VoUrMF(I304x-M#Q?B$01*HnLIFe!fJkSI z1fW9!bPRw_|1%^23Ibq206GW+0D+(&5C#OIgCGD91PX#+KoB|z4gkTSAUFmDr-M)c z5DE%HVL&K42nzsVp&%>#=i3I}1}AUYfZfJ2~g2nG(J!{Gop z914eH;BYz|1%RWVa1;iPqQkKOI2H=WV&GUhoCtsup>QGwPNXxe2&Y5gbPSwM|6@)7 z6a~Pb0CW@xfC52LAPfpbM?nB62owdupdfS<9DssDQE&_jPDh~tC=?Wh!k|!e6c&KO zLQz-@3QI>30VpCAMZ}m2mlL# zVj&nTgpP#+uy80Aj={p|SQG$@f?`n^EQ*fB0?-dL=_{L=pZN^ zgkeMg!|`+oln%i#yv1-59S)_#F$~Kx3`$2q=_m}t3XF@VW1(~`hB0HtMCn8*orqzK z&KQ(Vhtla7#?e};J7Zx0E_!O1`2YadeE=zL(|F#QTSWP_ioK#%k*1?U%x*0GX9Gx?}v)f+^wTm;W_y)M0PTd z#Jnn%?K(4*;=2zI4JuWA~nr)Qj`4`;{`e?2mPX$ zc^Akye!&{!_vakT#j!}5$Fsi~hbj_If8Lqns$yn5d7dLMF`gcrBmWsE?O(*7PscvO zF&+VqUtx^LS9Sw`F7G?{|M}YgmnPXPUvWMl>N6}KAWO}IapmFpUY{j+urAETG7|82 zvARS=W}yI@AG1_T92|oWi_;&Xqo1U$QQv*~M%(}4#t4%TS@%qso-S(~ zD^%L|=Qd8!v$nQSJQ}x1xt-_X7!nc?_&!h|DiQU*QccP#F!nX@Vf(wm(QDZcO%;qz4lTK??7HsB{0XZ$k{3H! z4M?0^{k7#aJ3ah*&! zjb>R=TED?Om6Ss?wF`m*%1G>(+RNUj`}Zu*WlIKlBHsS$Dz?#xX+ZdQxwguyHh&dp zT8%E5qK*b>sVc3vL!okM=cNn>Lkq#l8&b@(5%6hbrKWtM_H;b0h~@adMQ0srf#%-Y zJSd~v=fY|~pF0wn*iLphVc4as- zobvzmOW*mZu`z7adWE0ACWbl2tj1;|NJ~>J*){p$8wzU6Y21GzEL;0$_SlAb*l*Uc zKNj_#GRECg4pIEv+h5IW+{pG2*z@4HOI=O5-H$V(VIi5wnu zAg8Qi^m@OpZkhEzFS<;b;=b}{uq5$ZH)m2*iK9mTRa-6`An}Sj`RMKFyhnAW!oZ-n zR2vf5JE2nbb9C56{tcH-pLZBXN$Sk|qe8QmIH?adtIw{+|N6DMTCPkzPh#Y+5CwM( z%v7EDELbFgz?ALFWjtFIH*49dB+T(@i)P{W1+QG>sDznoW$QTYKwS0U#wWrqSAuQD zP@^@S`59bx4JnJI3YMXlOngW!c3AZ964n2rv(U?e+%mj1Q8xnqEQNP)D9^Aj8vT0eaKClfc_ zs2Kr|EIX=Smk%JR?P%+8jD%Wd#LyQTN8iByiB!J+4e_WKS+pNFG}~S9X)aFVF?I7N z{L0{y#&93$zg6#(!|#FDk6!;t(@i{#p=6GZxE>f2B864QN-CuMN#wIV6Ux>2p{%kG zqdR2oH;-g(j=|N;wjp#Q_xzV`Kwd8+)+}pJ?$^0lp9oQc5l|Q4lWporb3G%`SjQ5b zfhkcQ!p|Ni5tyV;YXp~rAMIN?-s>qpdOaXE(j@@HrL*?ZT}k09f<^F)VnRBy^sE53(yC0e`q)kSyP_O7MK54E6{kj$d2kZs@Xt36un&(gK?h^j#^R@M3mC2}KV})FG&xYMAJkxh_cjSy{sPXLYM?=kH zWreT{!Qx6^3-xB{)_Ss7Ug z_=}SenY_Yz`3s_Xg45Q=>Yd-;&;h^=XQ0E*krZt_OmPrgv=1{yoo?2aC)vF-kvQF# znivCH{st%2A#7#^{y>1uQO3rQIa?vI;(`o{7yw^hTJQ2rHoGl_Q-wB!Vqh!t0akg^ z!q!Ewd&c3NQ4fDgt#BC#gv4N9!O7v}&MUsMx?6RB(1>*eshYX9^*+L#l|v0bIi)Z-m;0g>SUOAqH+ z?s~6DBBmkb&7vuT(KF z6-5Zs`pKlUb*4|kt0gIytXur`r30HNYQU4>1VDA41CfS)GFu@Q{jDa)j!@Lb#E1V}V z_f0lcpt)|CY9ETSio4nf{9rVST(ed0p0?W}AQatN3B&~ay(ijqS zY9T1#gR7v*zNwHO2JfayzAj0be-3M+NahsJ8kyQ%uCM2Lb1GdWC%<^ed2n{nBlPg! z!_k}RXKhW+d4jdQ z!{2l9EBwf4D47Za%clvAom@tz#a}IvAXYg~>7?_?891~MtX+mwDW@)@ zr?JOKc1QZW`f?Dd#X=FQNo$b%?FUM6Y0AtiwNFnj{mBb$^k(y}_WMQf>f+dgq^{)& zHb`p*rp5PD+^&F&nAdI>g@^8IkV;Ajyl?S+YV4KJnhLP^m1xb@fQO=kCRM0(oPT~g z?YSg}`r=v3=kM~BQwWH=dEI%s)Sbm@Sqowbz5davp+{P27?b=ESR7eWJTn`#eza7x zT})u=C%f69nPJIGldO5jt<-I*mQri*F6MNjfwq?^Uy95*t=F4-fB3{an0NM??<(O+ zP(|L=AMamKua<^$-I6a1Oe01a%NJa&9h~Ypc)#rZ)Q5X5O7O}yRBvwu!|uTD0drbw zP}AQN6a74LRJ;1vc^0V=B1UdO5nZyuT}wRVabDf91#ApkUp2GXVAb&^Sh+O0{n*~W zY1C1Fq49g(c>95UiM7L!od1&FcJVXCXQx*@)}eff1<6(SJS13;&nXMHnYRnYfp$pSj|)un-&JnkshV320_m-K(Z_cQ{WU*((wE(q)IRL{t=uLb_`J@m z`RxLY`X{#2G1#W4ByRcSI6yZ!d3pTX?TM1}gKJ{eSl{VO#Q1S=(M}RvQhA2q=^N!>rCQutknkBdQ?Dmez z(2*ni>{+VOn&|@`lLHG51HReW%y=QS(exhSMiYZ?^!ba8)f=KF@*dwR5eP!v0ODs;U-$-&m;HAbct$U+pScnm3^J-1kD?(Y)qA0$|+&Ul(3; z@w0X~F!J%frO_H+J?9ku>K#M1zuldSL;i7R-uVp!@Z` zPj|`nK3hdqEcK#%m4()LZc)fJaDmFyT6Cg0CX0i;c;2G!6QX&)+Te9fgP>n_%EO;} z;)_|bm&P-@X1m+99TQ78jDw$L6Yd=5VCs!?pKnC?J?edev&xX`o)oe^5i6^@(}RrZ zG9-o#cXVRO<~Gtp6~EiDZ6cIpwc56<_dCc64`=DH{M_dJBKy8LEZGSeSgD{l{wN!> zW+UPScXVjJ!#*yTU{8;^SUlSmKN)d-`A11VUC z-D$R)j!|jKWT~JvwY7D6n}??Ej)K)SLx43g$dPoUZF(uhPv zb~I|+6`%9TgX|a}2qn>#k;NB#+HNbE3B@Q6A+lBn!LQy1B*)y^)j9c7WXz^6v_k4Z@EtmUAwaZ%gI(O7E0!n8;3|ETl%} z-t|W5@qdWT)GQxOT+@bN`->2?sW&$^bv-tn_Yna*u>`7;G@Dz->%X$@8G1;#YKgYsN4>(#^LP4cB$M4FYT=45i$&P znm!KpwJ%KVS7!uY5ioCT#JQ((JX?ZEbGjh=zEK0Wjb8cnh~~Q@2_oVfKkunnj$I#P zlBR;ODGr#U=?%O7#$i_o_N2E7*ynT-2T{K0>^)?6zp&!Du38ERr)vyea7 z`E|?A19+RmB1W`h6t*JfA$cLt7bPsh)O^kR>iaEmpXB?By<4^%m+(}7kyiy&Sd`m- ze;L(}fm+%$bp=@_r*37JHEDc!om6j&c=Yo1F#(^dec|C^Y_e@+9x>o3dTWHWp-9)f z-D=|Z{0312jVG=Gf8>!h9Yf@Dm}^>IY%c+5THU$;sBM#)IJA4cI4qOzbI5^n z`lEdKf`)Tms8`#3iW%^Zlp}|x3$J!uyPg&2*DMv$wRRZ6XqpL&pbF-s~6*-?y&P&Yr&ARR~Sws&a z1C~Rc)Zd{>??VmTrjUY6&gmz)B^r(favTfG5(ho5-1YwP>%SD`fAQ@Z*OpsR9nTBQ z9%yU%HL(cB017uxBTJDR-!>P1VDC-_LG4!OUe9QTagOi$8uxcdb)r_ASOpJ0F0xZs zxB3^dQi^ul*j|Te55MCQ&*o32H%b&1SRPg2tdkaw7B%cV1mbcpj>3C+&4fyZr`>Bt z7eBa^{ndW@ERFewo%1{FP5FKE;wM|m!sN%gXI?aX95Y*n*C|D)cM?dSS`cxOr_uHuFmogdgF`JL2~}qTopX` zezF~ai$7yI#Rg%7quq3Y%WhiIM;E>YR6W%)Nrna}O?NZ%*>dBe0;wPt;gjPKtM-fy z6~PAA1+kP_4xaNSe0jG>24Hl6sKlb9e!r0GBC1}Y-W(%BMp>T^+qui1u-FiiuxOhu zkGUIfUvCoMFVZq^xSbPcFWA<)XeN3C?rWj+QIEGn%BUgq+uo3UU?3cc61q(Z;~XAO z9gAG)(o1+_JfrkOSjI9UbL$ofrA%tE3S1Atz#QH=njN`(4R{CUtsI(UN02*3u_DZ` z`yBR+LNxiSnST*mQhq6IGhwIvZSG=lMoyM^(;o)!6=NRVigh#K%?6X?ZSOA3UKc{- zg-%u}L=i(=ts}RPo`l~)@mdGahCur(8SldmG!u*e4Qmo~nCWb7geIk#WQePr`VsHd zHF6@E$t`TDwp7JEZ((4o%$o_r_@kMiwJSAExPd#s``ICQ#P&YzVO_;l4Q1j$e6)~a zAIp#Xt9ZXgyw<2*bTC*Arx#njBbH@CQD?Gsvt}%SqxiiJ7&s<1@LI@^nNEyV^ce1; z*r61chaI~ecey!)rY;`3yzNae_}W=MB6>Rcz)_YN*PVVnG=AyXHc#Qjom`qmTil@h zu;kUTNa%{7g1!tXWpB5lj>YJ`u94P}>5V;*hB3zYj?%- z?!F%Ny0?MZ-U5i>#=85qerVL`BmtZ_A^0KC_z;)XaG-A?zVpjjE9%JRKq)8~dF$>v z*9mhG^Pp5K&E&TXI#*q-r}ep7d!K4hv_} z4*!RC!__R&JCT%-DIRNFK*Ct0V6RE_pkGy2essv=@xsqW>}X>ryR3}I-xQMK6V$0A z{cFj)3EO3je$9&=D=LBH@W$eT$e-muWpXQ2L`m%kpH#Z;+!{18jUOfG1==K5XS zkv%y8wkBUBxpY+Jj@8eXoB5YcCq%9ENJ+A5Q zH88Z}vWB2J9)Izv$^6zvXu((08j2~41@k8tVKY}qY6^D^0u?k%oeit-euM9H$WNza z;qtm_b6}<~|9lmJ+dYl#!is->Y1_>HSj;4E#C!D}??2s_o`@CR7cXW`3}E>(00O;8 zOjqgh&X-Nx+OuH_UIF=tjy~sIO@6E2x;FW(b|pHX#_ge2(0Z{!mytOzM1&$2va_M( zUjISHqY-(psZZmy{{Dmao=C~ZS}9#yy%@{3hIjoXs3VQy;YKXD4JBLxiEp4l+OH{I zXO-dDImmD=JivsTH7C2AFeiPMQH~0 zRYOFpO8m<>*8ZWySEe(O=X!nu#+#<(d9&vPS45ZZ$#bdyTOD#c>r>(Wo*rMXwG^xI zp633^&FUJv{JE9~Er^j~4IuJ7g^ z)S`=Y#z`r^V^(;bfWCaevWRu%p3oTSvRsuHTgF&pc!^OJxJ@#ARj#i0j&19M(MVgF zqZlNAG3hV$8ZlBhu5w)!w`r1{w_g9YJt%6}8?5zh0L$TrdFDv%WLv^KRlawiRFJH+ z>c8EV_w`0{3>?}U>mVKN-Clo#Y#u@W-YBV!VSyE`W`Vo8$`;qZ_u*KJH! z#%U%Ya|`)k$I^%!^Y$lO$F1^!=bF74evjI$I)21-+69Ww{IF@Q*USBC$(@O{O$~C} zD&Agjmd41}O&+Cn_e|#W4u8Hz^xU_xj}ZB*r_xRO2&Ls8KryJBt#}Yg=%_|Zu{bFE z{CLMjH?KP1Cs%KQKiIuP3a?cPy5c;sI*3RnSPB%iu0?x0+!=jV7__B_`?&64wan%% zY$=Z@NBD5+lVe#)Q0;AX_pdNLho2gbp@e%q?8g@UwZCC=wR55+yccHQe1Sg6%w+mZx?MPCpLMhaqZKrD7Sfnjj%QP!pLW-vu<(Dbe;GI2CskDV3 z$62N@&3HEliVfeb=4r0Kd1#ci>MS|=*4rL7kg2L#TFjif=p;LK&8~9u6eOZ1<9dWz z@Y7v94!O^ghb^48^rSShOJnCJHO|IFr?ckE9Cj&BYm(HAgT@M2viTRLHb8bh;-c-Z z@!aI+M%VYp-4ww~J2a_z8ZnxE(Qm^MADfyXAh5OkFJ9Ozh1c?Af=^ zX5YWvDnx0|m3eaw8+2l2fxhq_30%7sj5Se@Q0<9z$~0IVMo-%pp7EN2y8;nC*_x@k zU28E@72pJsAMfAgriD_N&Ilu=ayJ{XE0-J84+fSr*vY0-*eAwizwj`hu01{0F1*(g2s#jt_M z#IIWZHn6ul&NO6}BVR^R*;Cq}@2Nru7^{uUgk9*9t7b0nfVlwwIN}?kxzzqg?4Cju zI3Y)H7@WVGLEF7^a>!i8e6%;boD2@shKN+(>A=U@WS24#gA6+NN-$P zor&>NZ~Ehc$7D5U|I}oc$1#!Pt;S@u1#k%}hF~VO>=Bq0Fy3NkA~+BSBA%7_wV_U>&Mm|rlK807`312yTL~x4+gUuu^Me*?1Rqr#i#*wO zQi;;ITydv&Rs-4;b@9`cha1bEY%N&7^k+%H!4>0N#`DETYfoA4#$qt;moF7o{9RPU z+#Fgb+^`oBa=%Zrrm1SQ+@V`@)cpiC8`f3K48JiOJtUXl$k!I&(LOu+%)aq1751PS zER!lr$Yl|v2)#?Z>NoSgkq_C3c(jkP8RGrI@1! zhM4ym&JHlAkPBNV7vuh^TEoW!xorng9HZs^dGl5xh5BykrH?gSXQQp`6#5H?++z_) z4=v3JKH){k6#MkXNi}V~QpLw1p8a-dS)amE^Y!t6@)8$p^yWgY6C%OwkogIn2>rs;LoE1&(;t&HXFgFOcDoz?J!p!&~zyiSpdB{@KH+ZqIe4vLN;< zZl?vQ4j0zqbE*BMBj6i}i%Q4PIz}z?LvwnXo>?A_i?v<*c{GQ~R#VloX@GvW7rX$b z5qy4~fm0I2&wkjyj4x~NydJ4r92E3lMs4JaZ0M-H`n}v%JZlB*L~psPfR@p+xaTw?O$ZYKPe=yO{zL47!b*yv13xM zj~%LPa?pJlP!7fJ86b2$uuie&LDHhbGu+3#FgxHmg_*nPnBKAx9A)8Rb)j(65cu=A zVz*D}{z?2$4*L=3`}di+p0Bx^v3z-$a4FLOH#Z*U_w>+s6}QyJW6ycjM_|YLxo~)Jh0lQXh^CPOyEuR?&Cj{SWGQxR! zv3B?aZ7<&CXXMVe3W+lgq?s@-UK{O;^~JmD2SbV7HtX!~b}bpe@8-JK)sP`WVcj$h zzh|aC*{$A}Ijpku_s8BJ))oO59d3A;=5DVK>TBeU-1`vvuqC*t)zW$pCZ@8a2nxGI zR-0+{-9hIM;lqZ%4*Gca6eMTeP5ZM%54mEp!X_ee}vebK_y83LWmO6ZIN84St za+U#i_xt>w8NWj^`;q$0-)b6Limzd;S0~wDk8akKKi$o{6`}kcIB=j!r8O<5 zj6w2C`ky}HWDPctTwCutBc)1i+G?UVsn$#!Ab&rrwqu9{Zg=leNgONfR+}oj+k4!< zn@+mh>sgL&f4gk$3W>6FQS4m`)*7o4LViKBCKx`?6xB0oO|xs=$=xql~xHnX)1kYCIH;C zb##>_&##^mM!}cOLZ%*Omkqmm)oU_p=?|ho8QfbJtC$O?b&h{@q+husuCp;$R${bM zE3pwZ9eC)eGH%*8mft%w*H1R^zU*R3#(6?c*3z`#E(=06@381jwrFkcQbj%q>;*q1 z{#!VkMoM^va}jC8u@tclx>Kw5FLujujRNc>%TEPVoEih+jE|^6t#@gnB`Q8q2n#fD8r|q z$y$PHe@D%QsIkZ%W7d(3V`0QTe-_wAOL+HbSi4fLqJ;-EsgiX52zEZT z6!#ZFEaP8K1UZX<>L>gKm8fJSPz}|fa3{@|mmwQ*24+c)l|a|g^Zk`Y7W(7Dn(tQg z?DsS{%wL9~6?Ip?hHia>eRWed@V~`kHVt%miVPn1&0!T33Pf6tL}RWkyH9+WAo|tfnzLssxc9mXA`XA9lJz=ZJuYHi zr=DqvA^P*P?<~@|w?<8iKgwQqRcMLY%r$J0Gu%YT?X7NJitSf9(CfB~#GgsP!~2Yx zkK>ERcxJ<0eS#LW(s^$tM<;OB;+yvfk)@sc8fBtm!=cwb*2ZVruA%NyYa_-D#!Yw+ z-P^B>X(DCprqPOr=grU=0LQ$~O`nFP;kxeD>3SjTFZ=Uxq2OOZ?p_XU!0hRVIoXzG zCpJaYc$GW`kot?%Qk}1x@UQhi{ny#dQ~Y^EKj0`?K^eIZUr%2;z2&YP8vSyae09hyb>_68^?l~W#MA^y+3ru3jPw5Dd3a7GYrS7n>2s8cbe>!BVc6{!CTA1;j zIOqRF%cIAx|EXL8l>bNi^8XMqf45%j_c{KAZklRl1$Ztq<$r*+X-CdZ9@y0ZBeYl6deEnZuwDg zRq1re44huv7i$nmTFrX+{bmp-k+_j;-pVA+uc*!+) zymNJ&N(swAqo?tUm9!J$1aJim_?|b9B}C?iF4E3#By0{#r$JA!*^@11T1Z%djb8FT zG*1;{l3}CLFfNiCKHjmqH{vI~iw?sbTF@f1BmvV;^B*hj5-M+52b5%oK31eIJ!nkHJmhgSqaSV!jzv0C z>mon*sy6kP?(L1oQQ8w}<5U6q9|bD<1JMOYV6b-$!A+&OPy+ADtP||>31uP{5Bef1 zcSw26J=u6K z4%t5?i%a@?609@5feY1C9i541@Za`JFF&KFmN&*~gp!Bjrs_YYogSBu!c6nrq;+x- zHZ(T}8HRTGyW;|*U{X*bDlH!45K#_OIZ`*5HFl-Q1R1)jFtytZfZLWVM|+Uk>pm+T z2Si5(VHs2P8awcYZDTEYUnjL6C~YKH@(|c`|1Vn3Rr4&W7?jg|`1*VTRBA)nBApYns3djTAIpT#|wnN%MLy5r_ObHn@kA{Is-Fe zV!kWh8xOPE^;p<&yezKg1Pra4Y5BldxGLQ8gWz2#tgxgYVS6mHxhh68+BsFXdY6r0 zT)iaLXla5F*5t2>H? zRz|3{Z)(ZEtjlvQ(ltvvXCLB9o*wecPC^up3jS?x@Y1r|jmvesOkz4BcTMXMcGhXb z#)FmsE4h90ZnD0vh-x-qzM z_reF=!8Ljh?f4{)E+ZLwY!!5UEN;2IbFqnjx(!bD;8b-(FW~PqSkq;vJT3 zz%qTvgZ=qVe24K(!eVZBXLdU*8l8D%)JFV9ij)U~?@Aoy^?E+WEP!jTj#k%*b*8DK z=X&S(<4MabJmb4Hf-S?{^og?&TP=ZQ`+rnc*xI*bbUFZ;C&)ft4~GeZTjKJaN|wvC zm8O++uO~}Zl6SIDW6h_4jEle8 zzaLG*pLX}(le{0y*Wy9xtfVXR;=-AKcZPu#7%JE`PKH_^{gJ`+r^wXIbyVnYnT})0 zX8lo}TiM>!No%_@-UCi(BzG_jLRPaZeK6tWJVkzS*pYSCr?JBMCAs58byUPyzm^e>FOz4t7*^WO(mF*_Fu zm2~?>+XxmuzR#gmXAf$1r1%6g5-&Hh)}fb;L+YbRR)?a`JD>mJVT#3v)g~P*$IWiE z{I=Lb8{Dq7fo*2*)1D1nKBh!bJdQ7e$pZL!{!2~ro5$If+)_t@5sbcrq;T4^71iT@ z+=a%-oQ1M-mRqNAhsP?v+^+!uZy4HJyBo5HSk2B!2USihi#DWBG6lz$$l4V7{w&N! z&vP8+3o8Y!UbR#TlKM@Ruylhr61AC;Z--q#Xt&$ld*_X`W zo##hB%(H;2g8!#}S~%0~Zq;My2W&=i-YUYs>%!g(4jcYGl_C zW671Ko(VGp<__q7Bt+i5vU{62GQTKxJHe#0j`GyPo?>DHRywS#a{S`=NIn%OdHCSn zr-m!foPy_-xG&+g#aQGf^mE>(7{7rg*?iYJD{sp(B7Oda-7&hQ{$mh-b24SH-G$>R zL$l`B8zf*gZ2cPJ z{uge!Gk49CGtancP&FQJFFt6z_rh%iC0229$~i>M(y1!hbkd| z!vfL0KH7^~2g?+~062kUjW(ow*Va7N0iI4|e5bhK&rB{IZM0C=Pc^G}KFhMrhMhXn zyb#ed3?CyS!UnZ*$=W3InYjiXc$m6jv{;R}u_TzCwEyb?a1|-* z%F8?X^Zf-^-A~J_X0r3#^(v351V`sHbiN&3D`M6bBD6hH68J=^$b%l~bUerDb)1Gd zPi^eO4${phx(FPhj@jFcGGL1B=N9DB(DA}iKU(z!ueyDdlV{V)#?a%qZj#0+v!M=| zBj97LBSX5E&rL{qnLVrw?>K4k{SPjRW2{%_8D-4H_bw{tz}&B&1sL058TjR(M#@`n zlV^&Yx+&k4w!QoFl1+iWSM%&hYV{l7-(!(w_itG`8{#JARnih!noqdFLF8XeGnpR@ zJq6URt;!$qxse?wpY;1d``8(*=kN$^HQi3apt^B3qK=sIFokjdb(Kj0UEu+{i(?+D z-)uDl+VXA$ovHIkQwkjLaCaDZzV*J3~%y^9t3|w*fhDB0Yh(?0;kry z($J5(nwSBbleNW&=9qUT!E7CaZhRflt+|NIK1ZUVp~=RYlfT?{XkvZ)RQ+5vbMdhb z11;q;GR-c24BW=%D`By~xK(bL_;LLTSWb8>lA&XNX&A_#cilkcPN~W5UCps*ksV7X z;5P45^jD>EAFVpieAo|&9G6FW{!@RO&ib+;@P(7iO0jjuq|;4-;GAwxd)Qmt!#k>> zZmz(H$W}2>Y%z0X47y6<#UD7?$)L!~?`LgeYHfe;6fv(xBQ$XX91r{~t!6>D!3G9xclZ8Ve7U&F48-5w%be4J8vz)gj1 z0#6MYIElmdU;2gCHhKiEXECgqQNe;8+%{I9IPFf`H#SYj@l`S7E9RC3{$v9mFGkcy z{Jgo2)5Ffql<{>`*ig{vNT3poPY#%WiPWN3Gia-K_YXaKQa$7UsAxrOAwj)$aQ`Yc zY*RS_`6s9n2$3H%Y1`?`VKu9@`I(iDStuNMW5nF4ye!1 zNoo_2=4Vd9+KvL0ZNYYftTl$%V(9)+_1XRzo=vghDBs%$=%M%YH1RVGr;1qoTW7<7 z5qVdG&pyK49DDKR!GY;%e-!-;S?w=IciDm4)Lie|0Zpz}mbQmv;sViR_D*$4x?I#v zw{=Ea%vsN?gMF!)nkbvz4BVes;EiW6&C*glN>XOf$JicHUmHu!+S#;n2 z@D^}r4AuAVme|t1efN8_ACxjb--&zKtjqpI#mrvlCzZpMiaoz@u7%Zfc#~J&KNDA2 zkNIN>>(}9u8;ph=l{heSp6VoZ@X4=}_eUzHryJGG{j*^NwuL6`OiA|8e&;uB7Pms5 zRzCA`i1^d~@n0@0dqe6ddb-~J<*K$_pUYTm^9tsC>~yx% z)1l2YLt`>p`JAM-U4MjA+7%l^+(!#w?{j*+oTIuEFi(ihu2fG&R(m)#{!7a#i)QM2 zpW|kyY$SBgHoX|r>b0>d;HpXaaR z44q;3f-NwQWTA@I#+;ws1TM!f!@75ji*(C`tz~RXo()PH$hj}kx_zxtxoVS!iY;HR z%9Uu+?v6Q+Xs-8mu{SS_p{p|Alu=sD{mZLL@S&;Fw_6GZ^@#pgPC&5x$twks z`vJqX(pQ(g(+VmLLC0T`pJzP&1*5Gjjzw~*6327`)28GuI($eEsW35k-QWtla0HGJ z>#Lx63&Urs_UX3$n?>u~++Ni-6rFE35F7gQ#A-xyx~*9|zg|+<QiVA5#4Vxj>d=C zAaGb{sK2msIvMw3>a=s_z_q)H^$2Y06D}=2!3K0J@3Gav9t+7{l4DT~J>0!SZt1`2 zuW{ajZ2Etb1e}COWprhS&DhqV^9L4H{CY|9l$1615=l*w8is@lgdT0*BYDd&4u34A zISjWSSIFQ&iJi2Us>HLoYCm=sb9xoawN5wQ1n}gg<-a&!+>ujM`xpCns8y|hGf0Rz zM%VYjx|;_QfCl(rm#D>IzKmRB$Y{bn6XL$RZ=il~`S^GXNs6kw062I#^#lh%r|55m zs7el_mzS4E@pwKlz^gRs@PCcrjj#Ss)A;|JKKgu{A=3Y90T>Nn|ECq7VTAvezfRCG zI|d%mtpf(2(9wH4a~J;#;kPw;<>bu;*k>hy<5{~6TdVtw(&M6et#cXp4RgbV z^hMWFN3)8bvk&_N^}n4cN?-N~eX7#B*cG$CbKS!d@A?{#nu-v!3rfEcAJVE-H#pC- z^;Dcyicjib?zP6K{<*)VSaT7*7DCE<<@|l5@EjJH%j;clt;d-1lf*@zAiiM>xrfR2 zV!?(g|KRSy$AhyZcv==4`h5IzEw(vD4sxZ#&QIcBof*8;K9-r^D7@uAiJ1&GsEg@$ znF?wu>&FPledDn$cy`Co?z*4G%`kqViErT3(&-=O&pSVwc)axGrDqt@KATYT8X%#0 zj}NhjasdAra$OJe>j38WpPGNq7*q60XNR(&AKX>51WvCKA_q-5b8Ym@N+x-HQmRPo zT`7_jfp258ORks)=PBNOYy2^OHUjalPf*K!>SaptUiTzUoI;~MBnlbE&9t*wx|svj zsi2siIPL!Ar^I6!q zjgC&$S4@3P?Tu)f8qM=}^EI(dk2moM>=EdGU%WT;PacEYvU!(B6Vc`ZP~U-rJ5TEQ z`PYLR8}^ozqwUTIJC;^6bdE|69xw`0j&i*HMwjBcZ~`E=jL_a|vligLLVKGRb@g`& zMzT$txDxK&@IAR}E;i~vQ$J83BWK|rfKLeVJ2YZhl%?$^E6Mjio{>cqc(TlISw38L z-^dCMaw*LOMg|)-6;I!YXXf;;q?hbScqRjBi^ymXvkH7Warj0?Kv;|a#`}Vt`;Q0j z9f)!2r^c77(QfA=Cs231{K^edqi=XWTLFIAh$KAIVsI>{a&KD|4?o z=kq*U%Tvq=m#~{H*Y_!K^mCk*K^ZI|@WX;qbnX<7K5ryy=D8@u{aLpW%Voj^pI81x zcD9IwgwRQ-)8 zyk6c`9Ks8!`xJ3i|EPN}J}2-D^6wS7v8y{%z+1@i3Ezm#Q9erxqKs@y5T`oqq1HMf z(oTl5hn3R-;N{vqsFsS1w497S(Wqw=tcTibKV3DKOZhckfTE~g* zsXogIt;B0ez_IEQt$;8)$L7}4hlg(m67h8z+!EMmeBE?A)QA1Yw>tOl4lm#VxF0(q zBz^Xq_7BN(YI<4#f89go<*Qm|%lEcIJP$fc<$LmRI-0M%$8e7pH*UQz{Ffq{m5YByY4WaFjV-#D7fMdtH7qCrG?)M>n0{ArQbjVTxvVG44%g<}s(Q zIU$&m3AMIP2DyFblq4P+I`kx~jPYDOdN}yqw3o+p=|{wBk3J;j?2e&}f&C+20)GrS z*!V1nWax8xc{jEqU4%|$rHObQlk`!nC-IW5?CEz}ZX7OzkpA+SA&q9ce2y8k*@X&kq zVOU6@da0gBb^}`K6x8k4c@RSGAF>?|9i6o#gle?=%PeJ=AlPqnpP-y~gyJ4#zF?Y0 zo@kr+_OQos#U8p>m%nPz-?i+pktRry`OG!BJ8E9g^;>RtOX3>6=;s}?#K~BwBXqCV zuZVJZ`}(EOc#^o=wU$q;MD-but~;%D%Y~SR^HU?Z)xNRNZ&L-a2C_EJ-M{QKm_NWv zw_+N^gyyalK+7>B^KxUMr+2reI2XUFeRk+?lUl+FEi2uEtX|96T4Ab{0nX~T`39+t z>T|ol2sJ*vZ$}grjiGzGtM)faU_e7b-*hR&FkExXCw-j7{Maj}O+ zD4)5r&ldemG-OA%@Y1Fd8N1}S^^OYT+S^;mD0?7UUSO{jq(W6-O7}144<7c7lO3&b zo#<^#^6{yF*e#TPFbTFk@mY&+$(eWZI~KAw#l}6Je^pMdWGOc?E>^r4KVQS!3isj+;)kt;q`WCWK% zRlCC~@$<-r10~Qlz^k0K%a8nLExC-!hq*-7IAuGFb!}w=#Hz7bOR5Kfao^Mm;eFE4 zZfjh?)7V_O5*C8#q{78xr95c9sau(XM1ysa6%b z5b97ad060Xy-?5N65nzd{Wplo)SMuF|5;oY8ym1PzKRuzRW-tJcnFLuTrT8#wj*7$ zHIWl|5}>+-L@FTkqj~R;lVSoEjMqh37q1k)`m%4X{PkXAUtO~b4;A*4)YgoJs5jQQ zW^au6*eS+t5zkFbOz7VmcEsCFO^G-=DL~ zr1c^iApC_0mZ}&2b|R&hoxO@Sh2StIk)3t1s23q+<1u~snqx~iO^(@nkAjlT3%}Zk zQrg}YCYeb|#EN#|1GS4Ul*6K6c2c5?eO=+36N8TakEAzS=3K=xPee)F%0!Hg`nY=d z$-f%?F4y0C$C(7JbchAnwf$3blN(6KbjpBdRRyH>>u525xm@E!yt_Yq3)iuN5pUhW zo8zP3So8Z8e>(2h_sQp6ZXTp-#S)QVeN!1IM`Y}}vIXVL3(WV&Mu=$r#6o`fhkH17 zE8be(KE4|rz$V$<)Q5$5sBRT}5u?4>^1M%D5Rz`0q21rjDEVz=M2fN8g=t)uTc2TO zKaO}gN>b~fqy<2y`PGNxXU_89o;>#*NIIO_VuRXUOnIpv)R!g%-)s!i7Wx&v%>t4? zq)~203B|R}{)TUlmHJRA>{}q9K=Rv(Jspa&D%=fAc}w}oHT!GhRHp-KB}4pZ8|U@0 z?hb{3cwyQMmjfa^+j!-@drkiATL;w925;uMX`Dr(pHE|YDoDWC-4|(J-0^B(jBIbz+XqL_63$ByR9X|8?sxb#Vo_?*G=V`rrt0cm zX&pWI6;xwXoL+H9(#Ifdni)Xln8V+jslQTg97}V$K9)OJ^~AzjC%Vs`VfwLt0pEOt#%ncspHE9LKd@5RrAG~yjj(-Lx_ zLLVMh{H)aDC+P9VsMwb+e;@l1<-9m|R)KLC|k@ckge6d(` zIW=FtL%?CetG?L(&FZNf{4i%xgbHpg@uYQQw$`(&>GvA_ZjUmnkE^=YzdP*1Mt-Zd)|EzeLd2f_dez=kr3CT|Gf`}U(>Bl&n2i@?eJoacfIC3)9dDE?J33_z4!2u zY_Rjy=`D1&2iLlb=S=T-^WKiQdqc?8YmFHF! z7Az`~d!&bo!4Rvz&oLK-p&`1jg_U;RJdx25>8oLp=#7<8AFnWcw~+IjNUEM|gY-XB z5Bf!8umEx2RX6e69OJRdI|$Q3pxzxey6`nlD0MVE|h}Tz!8pkD`s9;I~q*@le#G#|F4X2(xXMq?h z#%%Z-n8&_)Zdzi6D1jPePtDB?4Ts8wop2Y+0Grtt+3C~WtG~yp;PCD_WM#lkgu6P` zD?s&0xN^$KE>iK@2s~!I8n6l#?GWCc=4SkwuMAdufkw?r`rK~r(w8*k%&_N~>hnFa zZm!q!cQ4J7eRW4lt6+m84$L|OhZwGaPN;ST7UQP!?r9Ft_n6$Cbi`gTW*)<>P7zVpc@>urJh z9roYDtUBvl$m>6Xq{SSPOI=C~uLr0m^YJ)QZq6t4D2gyUE-8fe>mf-Q(+t}NV0tij z-Hfuv^IQ!On+)x) zI#yPc-u^sRfL}PLDp4{qiPF59DfTeeYG*ja2|I!qPk5-U@tbDsPiz;0MG`JQb=XrL zR57qsFX2u5#TU;s51;*!6V3X!;)6y>hpr0^tsod}y`(Rdq!d3D&RVgxSmpDO>aQml zRPnmdB{4psGBxjki0%?C&!*V6*6)6;o(eJ#Maiv^#L10)l=P{eAZaU4_8&>miWoPq z8o!+8=#!_B@P->NWu(qR`M&u*g)5#7FX&P*RD9Z`DP ze>V@adTIO3xlCe(B4<0BWA180WEHNgfP98@(Rc>!o3EDV8AJPlvgQgl(IOODiJ(Xt z=L(y#x-tHW>1sPZY<5`o-jX^?QFLMH0J5jK*q-B9Kx*M;j0!T5Q#y(kujb?TZqbnL zsYT(qVD#x|tL&hKe&~u#iB)%3$F*%`gGF{XgU@Dm+P8xo(|MX-MBe^jdKV`pHOC<8 z31?oq`GwqOdwTu*IP0!^ScOwTn*K8BQ5de_;Gd9Ym94HNyCZ8<9lVY`?zx5~BCux6z z4&=e5YjfP*WJdSI(>5*Y6nQR>^Z|NI@@hj&$J_Oz~|TEQpPub-@jym ztQTlur*8>%O)WQMB8;3a23z1Z=HzM3)n}GC9>qs03d_BGbkT%YUG#^|XwJ_Lt<R#ki9;GIcCkdv+pKZSQNz;0ctno*H5o5@CFx4rCbGE@c3og9D$C=ez8AVhMvft! zrvlMkVUMM*0h0SR=c{x5Qcr#|_c+AiKt+4h>Ya0z`NLXFUPT~uD5sn$s za{ssOm6r*<+_1#L3}L_o$*yJ$snAW_M{pmpvRfB^v#5!Y<=l}E_24Lg2*25A%e%;- zfKxpTj1anud&BwO!u2_iIOQo@u`P!R;yETa#OM4R*SMgclQgUP$-X>Yq9` zcKy&ZN^C&V6tUZ7_F|6Hx%44n5=dEcjG@xq1nEA#50|H=aoQ9{*6@eMuas<_Mr({G z-EeNBnD*x86;BzTpN4=SJy@8P8>L*qimcBgW*@3n$)RhR9uy31aC)ewRT9%3bd#Jf zIiK00`-)b)v5{RlTln-!0FveyW*vnF0!}V+?)vS$>iNr-lH$u}TkAbpX;V$NrL#0nt|3zIdia;T9W zb%co~Pmd6L^Ei(l>ET}tRHr=R1NNb_!=dX6#trtj!w%68eSyDy(w;lqs2Mu4c>x%;gu3=TgFvQTOvLrlg&d?{|7 zl!3-Fm_aBq^9+B87epxt5MXYSb@J@L$#lk9`eqfLJuolvrePSbO{cti9xISU4Vjp~7bS3ZEgts@e$ zkXCQVucQ2jvBpl&o&ty_i{rwqZ^ILWeK1l`HuM>vd2uD=wkGz${tHyIym6uAu|>{& zL#lrzuE<&qnhy&>WvUFo&J2gPspapkd#%Kx)HY51`CLq(o3{%xxj>66sK@u3Xa^RC z&#)(Q_II%$g`+RU54J-TUZsmU=&Lx#G=$cDn@aYIaIn3#E(i!WQ`+}th7&pT zP8t_QE#SJsU5M%rbdsH*k9#{eeh0K4!kz;&!Jp9yXHJrpkY(~%_U?Rq$D61=s+-}k zht&e?qUNvCIxe!>q(p9uNZvzxpJl50>BYc@#_&|$v=>U!!*HPGSe&?R?19o@!)9>> zL@?n1KOZZ>S9*+H>8h;u^2LH2@st+#At&g|Gznrp2ikSvYXB6;Y&OW$=+;i`ei}HA zi3CE5wJH+IWdkY7QBbkFNIuANdyCZ zNCnwceNJ^HNB?D|#;}(Piy6X?f5ud@O09Gm$$SS+n~pzo}8!W8kL4o>f#fSqpFrk&@AL_JJ+9=3%i9iCz7-H%YCyh~%~`W`Bl8)V zbjUYF*%;ZH6y=#A?Cw%EoqiRO$pWo4i+zh&$k*;XLj?4VZp{gDYpc-eP#23QPQ#^F z<>8MfLbK`e?>w&1vXN>#1ETsS70Pa&i$QqVAGtKIMW>hAncY1pC_7zFr88ca)8hi~ z@yp=~oSeG3yG{#-`QF7$%S3JU^DH_C{XP1j^x2Y7ojlx9f8bRbo{ojs$gh>DOrV#R+FMf?zV+xx23pl6tdc~Js$l=yDF4}Xiwj|)zgn3PqcOQlzL6$& z@AbFT2%03C6yz{f-^_bfc;di|VlyHM(BN;a)!qnSJ*lvMKMmSM1CrX);WkUSuyz*#WPGX0zdPv|EVQhb{_HFNnd+e ziuiW*BiGad*=t%+5C+oGF~;XdRKA+k6dg`^T5%^7Z*}ePbi+Ygtr;qsN2FOFzle8l!qli=iij1?IO>rNa3TuOSC5W|5Sa}&lBV3R+A z_SY$_ytS*;V78}_iaOh5;9;*dRbc;7Xl;b8m>W1-RMJaY&AC^umtO9VMQ z7{+s@=K)aJK-a|Pf1R_{_^+`%M_J9zzuEzj40m<_OWFN*AKM_LyVp0cc?ILTy@90) zUq5sJF=S{O_l6U3>D@~k9^)wpDL!pxy4k*4nINEu0FCt{q+CQoO7IZ!bX-pn7g~P? zC!tNHH_mlz%Qp^gjhCMWqlfu)1VH^6@|Qg8&lT~Y_16^cxR30Q>I!JEX)kxgDsX`)>m)I?yBtNM`>ixt zYxTR+r1XFUednPoq?Qza^i0RmZvCS862V{ef2K;1R84xh_RM2nx2$^lI`?jjTgycc zi;zf9iO|MR%XIuY$6ktO(BB=s%~=w)DtC^Pd+*ej9>kLVs!v8W`*S;=Ae(Tu*Y~pk z=vnQylBY5wPwV5T`bq0FM3}mr?`!;GJujvD7YMvHHLSaig=Uz9yP91*?|i&n#WEE? zldKK&9E9*wCRV#=`uGXlEL0`@2SRc40XOatsgm?^L`nst z@Y>GJ?8`EvXFXw0;x#om(h^$p#P`*-VqH>8?B50coT5Psa<_Ow-_#u=AJmkepCp4R z*Z#FVRm&!F5f9g|5crDLF@F#OWaq_eU!^%6rsfh8f4*5<*N14kBlF z>p!5HW!jlG!p;*^sl1%&0WlW}Os`f#b`?foM}yv{3QoCE`TJngIH<4*;7WK_|1rXB zK4L`m6~bSOCok{Aw=WlDeIWtRuIM~BuDa;rd*L%4$#*P4iZ+59xEP?9u=)Wk#0kD3 zv~Uu)!#Wo!JO)9L5#gRpGw3qqR%)=$g)z32aLI|vewdNPup;xH%NqTeN(Nb8_&^#; zkeE?YPI}pZxXKCmvQH5S{_NK40VnulKssh*i9<0=lJ3?GI(n}3E1&{0{9ODyZ@i5~ zQ(atDu)>sEDj878pH-bwWTBUQh8XX-x25_@c3&Zt${d4(6(+D!+i`OBwfVXaA=Y1L9-JeMB z_+}CR4DWpE2mTtrs|vI%8(~Q}SiR5<6_A)AjJp3k_9%XRFwDa?e6^g&x{YM_tkZLZnk`>mEGC)b=^MX5={?aB zyDe|_=gDE#iAm)yrAcY$i#$`tMF!IAC$=`{k(U0#c`ZH{`;1$#sniC&}6^=G3dX{<51(`tM3Okk=d*e zk+5GUIz6Wfz+DUs9z{bieEKan_ZDDS!K^*^n|37PYDOA};@KW5_Kdf359qjVf$ zglA%fU;jX%nh_XuSXHCDs_Mv-ga2!)$AR(6v~i+VBbi5NY2u>bq=H&NEd(D*4*=SN z-x@dY_6YF%oI1z(&jGvt&I5a9f4tJ>0s{jVixnM#Ug+Vu_r#rnp&K-PeTtDG!w1Un zybTnjfjKYn28B7$2PY_etA{W&{Q!j|^dSZ#P`J4Pj8P;g*n@hOYoPFds}U^d>+d5b Xq!NV^lLNyJ-Ys-n=T?!r<;(v7Cl3j> diff --git a/single-sign-on/index.md b/single-sign-on/index.md index be5133e0b1..30b2b42248 100644 --- a/single-sign-on/index.md +++ b/single-sign-on/index.md @@ -113,9 +113,9 @@ The following video walks you through the process of configuring SSO. 7. Proceed to **add your domain** before you test and enforce SSO. -## Domain control +## Domain -Click **Add Domain** and specify the corporate domain you’d like to manage with SSO. Domains should be formatted without protocol or www information, for example, yourcompany.com. Docker currently supports multiple domains that are part of your IdP. Make sure that your domain is reachable through email. +Select **Add Domain** and specify the corporate domain you’d like to manage with SSO. Domains should be formatted without protocol or www information, for example, yourcompany.com. Docker supports multiple domains that are part of your IdP. Make sure that your domain is reachable through email. > **Note** > @@ -137,7 +137,7 @@ To verify ownership of a domain, add a TXT record to your Domain Name System (DN * Name/Host/Alias: leave the default (@ or blank) * Time to live (TTL): enter **86400** -3. After you have updated the fields, click **Save**. +3. After you have updated the fields, select **Save**. > **Note** > @@ -145,7 +145,7 @@ To verify ownership of a domain, add a TXT record to your Domain Name System (DN > your DNS host. The Domains table will have an Unverified status during > this time. -4. In the Security section of your Docker organization, click **Verify** next to the domain you want to verify after 72 hours. +4. In the Security section of your Docker organization, select **Verify** next to the domain you want to verify after 72 hours. Once you've verified your domain, you can move forward to test your configuration and enforce SSO, or you can [Configure your System Cross-domain Identity Management (SCIM)](../docker-hub/scim.md). @@ -163,7 +163,7 @@ Test SSO by logging in and out successfully, confirm that all members in your or Admins can force users to authenticate with Docker Desktop by provisioning a registry.json configuration file. The registry.json file will force users to authenticate as a user that is configured in the allowedOrgs list in the registry.json file. For info on how to configure a registry.json file see [Configure registry.json](../docker-hub/image-access-management.md#enforce-authentication) -1. On the Single Sign-On page in Docker Hub, click **Turn ON Enforcement** to enable your SSO. +1. On the Single Sign-On page in Docker Hub, select **Turn ON Enforcement** to enable your SSO. 2. When SSO is enforced, your members are unable to modify their email address and password, convert a user account to an organization, or set up 2FA through Docker Hub. You must enable 2FA through your IdP. > **Note** diff --git a/subscription/upgrade.md b/subscription/upgrade.md index aa5be53b89..7b970125e1 100644 --- a/subscription/upgrade.md +++ b/subscription/upgrade.md @@ -30,9 +30,9 @@ To purchase a Pro, Team, or Business subscription: > **Note** > - > To upgrade to a Business subscription, you must have at least 5 users and at least 40 users through purchase orders. To create a purchase order, specify the number of users and then click the **Contact Sales form**. Then, continue the on-screen instructions for the billing details and click **Purchase**. + > To upgrade to a Business subscription via purchase orders you must have at least 25 seats. To create a purchase order, specify the number of users and then select the **Contact Sales form**. Then, continue the on-screen instructions for the billing details and select **Purchase**. -4. Click **Continue to Payment** and update the fields to complete your purchase. +4. Select **Continue to Payment** and update the fields to complete your purchase. ## Switch from a monthly subscription to an annual subscription @@ -41,8 +41,8 @@ To upgrade from a monthly subscription to an annual subscription: 1. Log into your [Docker Hub](https://hub.docker.com){: target="_blank" rel="noopener" class="_"} account as an organization owner or with your personal account. 2. Open the drop-down menu next to your username in the top-right corner and select **Billing**. 3. Select your personal account or organization from the left-hand menu and select the **Payment Methods** tab. -4. Click **switch to annual billing** -5. Review the information displayed on the **Change to an Annual subscription** page and click **Accept Terms and Purchase** to confirm. +4. Select **switch to annual billing** +5. Review the information displayed on the **Change to an Annual subscription** page and select **Accept Terms and Purchase** to confirm. You can view the confirmation of the upgrade with an invoice containing details about your new subscription, entitlements, and the total cost on the **Billing** page. @@ -62,5 +62,4 @@ To update the billing information for your organization or personal account: > > The details displayed in the **Contact Information** section is used to generate your invoice. All billing-related information is sent to the email address listed in this section. Invoices are sent to one email address. Please contact your administrator to create a group within your organization that includes all of the email addresses. -4. Click **Update** to save your changes. - +4. Select **Update** to save your changes. From 84ff14957cdb595f8443bdcdde100370c4f153a8 Mon Sep 17 00:00:00 2001 From: Jerae Duffin Date: Thu, 20 Oct 2022 15:03:11 -0500 Subject: [PATCH 17/54] updated release notes --- docker-hub/builds/index.md | 8 +++++++- docker-hub/release-notes.md | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docker-hub/builds/index.md b/docker-hub/builds/index.md index c02b66bbe6..bf5e6cc866 100644 --- a/docker-hub/builds/index.md +++ b/docker-hub/builds/index.md @@ -183,7 +183,13 @@ repository. From either location, you can select a build job to view its build report. The build report shows information about the build job. This includes the source -repository and branch (or tag), the build logs, the build duration, creation time and location, and the user namespace the build occurred in. You can also refresh the page to see the current progress of your build logs. +repository and branch (or tag), the build logs, the build duration, creation time and location, and the user namespace the build occurred in. + +>**Note** +> +> You can now view the progress of your builds every 30 seconds when you +> refresh the Builds page. With the in-progress build logs, you can debug your +> builds before they're finished. ![Build Report](/docker-hub/images/index-report.png) diff --git a/docker-hub/release-notes.md b/docker-hub/release-notes.md index 068ddfcab6..23fb5a40f3 100644 --- a/docker-hub/release-notes.md +++ b/docker-hub/release-notes.md @@ -11,6 +11,10 @@ known issues for each Docker Hub release. Take a look at the [Docker Public Roadmap](https://github.com/docker/roadmap/projects/1){: target="_blank" rel="noopener" class="_"} to see what's coming next. +## 2022-09-26 +### New feature + +The new [autobuild feature](../docker-hub/builds/index.md#check-your-active-builds) lets you view your in-progress logs every 30 seconds instead of when the build is complete. ## 2022-09-21 ### Enhancement From ad614f1d2c7e22e24a36b6f68e50b4ca1cdf6cb7 Mon Sep 17 00:00:00 2001 From: Craig Osterhout <103533812+craig-osterhout@users.noreply.github.com> Date: Thu, 20 Oct 2022 13:32:12 -0700 Subject: [PATCH 18/54] [Issue 12622] Node.js guide - update example code (#15922) * update server.js code --- language/nodejs/develop.md | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/language/nodejs/develop.md b/language/nodejs/develop.md index 370c925cee..639d8740b5 100644 --- a/language/nodejs/develop.md +++ b/language/nodejs/develop.md @@ -50,14 +50,30 @@ $ docker run -it --rm -d -v mongodb:/data/db \ Okay, now that we have a running MongoDB, let’s update `server.js` to use MongoDB and not an in-memory data store. ```javascript -const ronin = require( 'ronin-server' ) -const mocks = require( 'ronin-mocks' ) +const ronin = require( 'ronin-server' ) const database = require( 'ronin-database' ) -const server = ronin.server() +const mocks = require( 'ronin-mocks' ) -database.connect( process.env.CONNECTIONSTRING ) -server.use( '/', mocks.server( server.Router(), false, false ) ) -server.start() +async function main() { + + try { + await database.connect( process.env.CONNECTIONSTRING ) + + const server = ronin.server({ + port: process.env.SERVER_PORT + }) + + server.use( '/', mocks.server( server.Router()) ) + + const result = await server.start() + console.info( result ) + + } catch( error ) { + console.error( error ) + } +} + +main() ``` We’ve added the `ronin-database` module and we updated the code to connect to the database and set the in-memory flag to false. We now need to rebuild our image so it contains our changes. From fb95c6bc759460dd024510a1a09a482e1ae6e1b7 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Fri, 21 Oct 2022 09:55:54 +0100 Subject: [PATCH 19/54] Engdocs 1019 1021 (#15826) * updated getting started guide * toc update * rearranging * fix broken link * fix broken links * naming tweaks * links fix * add icon links --- _data/toc.yaml | 12 +- compose/compose-v2/index.md | 45 ++++++ compose/faq.md | 13 ++ compose/features-uses.md | 131 ++++++++++++++++++ compose/gettingstarted.md | 56 ++++---- compose/index.md | 266 ++++++++++-------------------------- desktop/settings/linux.md | 2 +- desktop/settings/mac.md | 2 +- desktop/settings/windows.md | 2 +- 9 files changed, 294 insertions(+), 235 deletions(-) create mode 100644 compose/compose-v2/index.md create mode 100644 compose/features-uses.md diff --git a/_data/toc.yaml b/_data/toc.yaml index c9388dac4e..4c2035b518 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1553,6 +1553,8 @@ manuals: section: - path: /compose/ title: Overview + - path: /compose/features-uses/ + title: Key features and use cases - sectiontitle: Install Docker Compose section: - path: /compose/install/ @@ -1564,7 +1566,13 @@ manuals: - path: /compose/install/uninstall/ title: Uninstall Docker Compose - path: /compose/gettingstarted/ - title: Getting started + title: Try Docker Compose + - sectiontitle: Compose V2 + section: + - path: /compose/compose-v2/ + title: Overview + - path: /compose/cli-command-compatibility/ + title: Compose v2 compatibility - sectiontitle: Environment variables section: - path: /compose/environment-variables/ @@ -1587,8 +1595,6 @@ manuals: title: Control startup order - path: /compose/samples-for-compose/ title: Sample apps with Compose - - path: /compose/cli-command-compatibility/ - title: Compose v2 compatibility - path: /compose/release-notes/ title: Release notes diff --git a/compose/compose-v2/index.md b/compose/compose-v2/index.md new file mode 100644 index 0000000000..4e83a57390 --- /dev/null +++ b/compose/compose-v2/index.md @@ -0,0 +1,45 @@ +--- +description: Key features and use cases of Docker Compose +keywords: documentation, docs, docker, compose, orchestration, containers, uses, features +title: Compose V2 Overview +--- + +## Compose V2 and the new `docker compose` command + +> Important +> +> The new Compose V2, which supports the `compose` command as part of the Docker +> CLI, is now available. +> +> Compose V2 integrates compose functions into the Docker platform, continuing +> to support most of the previous `docker-compose` features and flags. You can +> run Compose V2 by replacing the hyphen (`-`) with a space, using `docker compose`, +> instead of `docker-compose`. +{: .important} + +If you rely on using Docker Compose as `docker-compose` (with a hyphen), you can +set up Compose V2 to act as a drop-in replacement of the previous `docker-compose`. +Refer to the [Installing Compose](../install/index.md) section for detailed instructions. + +## Context of Docker Compose evolution + +Introduction of the [Compose specification](https://github.com/compose-spec/compose-spec){:target="_blank" rel="noopener" class="_"} +makes a clean distinction between the Compose YAML file model and the `docker-compose` +implementation. Making this change has enabled a number of enhancements, including +adding the `compose` command directly into the Docker CLI, being able to "up" a +Compose application on cloud platforms by simply switching the Docker context, +and launching of [Amazon ECS](../../cloud/ecs-integration.md) and [Microsoft ACI](../../cloud/aci-integration.md). +As the Compose specification evolves, new features land faster in the Docker CLI. + +Compose V2 relies directly on the compose-go bindings which are maintained as part +of the specification. This allows us to include community proposals, experimental +implementations by the Docker CLI and/or Engine, and deliver features faster to +users. Compose V2 also supports some of the newer additions to the specification, +such as [profiles](../profiles.md) and [GPU](../gpu-support.md) devices. + +Compose V2 has been re-written in [Go](https://go.dev), which improves integration +with other Docker command-line features, and allows it to run natively on +[macOS on Apple silicon](../../desktop/mac/apple-silicon.md), Windows, and Linux, +without dependencies such as Python. + +For more information about compatibility with the compose v1 command-line, see the [docker-compose compatibility list](../cli-command-compatibility.md). \ No newline at end of file diff --git a/compose/faq.md b/compose/faq.md index d54bc00b70..eeef5795d9 100644 --- a/compose/faq.md +++ b/compose/faq.md @@ -112,6 +112,19 @@ the directory contents of the image. There are [many examples of Compose files on GitHub](https://github.com/search?q=in%3Apath+docker-compose.yml+extension%3Ayml&type=Code). +## Getting help + +Docker Compose is under active development. If you need help, would like to +contribute, or simply want to talk about the project with like-minded +individuals, we have a number of open channels for communication. + +* To report bugs or file feature requests: use the [issue tracker on Github](https://github.com/docker/compose/issues). + +* To talk about the project with people in real time: join the + `#docker-compose` channel on the Docker Community Slack. + +* To contribute code or documentation changes: submit a [pull request on Github](https://github.com/docker/compose/pulls). + ## Compose documentation diff --git a/compose/features-uses.md b/compose/features-uses.md new file mode 100644 index 0000000000..4de4892ed3 --- /dev/null +++ b/compose/features-uses.md @@ -0,0 +1,131 @@ +--- +description: Key features and use cases of Docker Compose +keywords: documentation, docs, docker, compose, orchestration, containers, uses, features +title: Key features and use cases +--- + +Using Compose is essentially a three-step process: + +1. Define your app's environment with a `Dockerfile` so it can be reproduced +anywhere. + +2. Define the services that make up your app in `docker-compose.yml` +so they can be run together in an isolated environment. + +3. Run `docker compose up` and the [Docker compose command](compose-v2/index.md#compose-v2-and-the-new-docker-compose-command) starts and runs your entire app. You can alternatively run `docker-compose up` using Compose standalone(`docker-compose` binary). + +A `docker-compose.yml` looks like this: + +```yaml +version: "{{ site.compose_file_v3 }}" # optional since v1.27.0 +services: + web: + build: . + ports: + - "8000:5000" + volumes: + - .:/code + - logvolume01:/var/log + depends_on: + - redis + redis: + image: redis +volumes: + logvolume01: {} +``` + +For more information about the Compose file, see the +[Compose file reference](compose-file/index.md). + +## Key features of Docker Compose + +### Have multiple isolated environments on a single host + +Compose uses a project name to isolate environments from each other. You can make use of this project name in several different contexts: + +* on a dev host, to create multiple copies of a single environment, such as when you want to run a stable copy for each feature branch of a project +* on a CI server, to keep builds from interfering with each other, you can set + the project name to a unique build number +* on a shared host or dev host, to prevent different projects, which may use the + same service names, from interfering with each other + +The default project name is the basename of the project directory. You can set +a custom project name by using the +[`-p` command line option](reference/index.md) or the +[`COMPOSE_PROJECT_NAME` environment variable](reference/envvars.md#compose_project_name). + +The default project directory is the base directory of the Compose file. A custom value +for it can be defined with the `--project-directory` command line option. + + +### Preserves volume data when containers are created + +Compose preserves all volumes used by your services. When `docker compose up` +runs, if it finds any containers from previous runs, it copies the volumes from +the old container to the new container. This process ensures that any data +you've created in volumes isn't lost. + +If you use `docker-compose` on a Windows machine, see +[Environment variables](reference/envvars.md) and adjust the necessary environment +variables for your specific needs. + + +### Only recreate containers that have changed + +Compose caches the configuration used to create a container. When you +restart a service that has not changed, Compose re-uses the existing +containers. Re-using containers means that you can make changes to your +environment very quickly. + + +### Supports variables and moving a composition between environments + +Compose supports variables in the Compose file. You can use these variables +to customize your composition for different environments, or different users. +See [Variable substitution](compose-file/compose-file-v3.md#variable-substitution) for more +details. + +You can extend a Compose file using the `extends` field or by creating multiple +Compose files. See [extends](extends.md) for more details. + +## Common use cases of Docker Compose + +Compose can be used in many different ways. Some common use cases are outlined +below. + +### Development environments + +When you're developing software, the ability to run an application in an +isolated environment and interact with it is crucial. The Compose command +line tool can be used to create the environment and interact with it. + +The [Compose file](compose-file/index.md) provides a way to document and configure +all of the application's service dependencies (databases, queues, caches, +web service APIs, etc). Using the Compose command line tool you can create +and start one or more containers for each dependency with a single command +(`docker-compose up`). + +Together, these features provide a convenient way for developers to get +started on a project. Compose can reduce a multi-page "developer getting +started guide" to a single machine readable Compose file and a few commands. + +### Automated testing environments + +An important part of any Continuous Deployment or Continuous Integration process +is the automated test suite. Automated end-to-end testing requires an +environment in which to run tests. Compose provides a convenient way to create +and destroy isolated testing environments for your test suite. By defining the full environment in a [Compose file](compose-file/index.md), you can create and destroy these environments in just a few commands: + +```console +$ docker compose up -d +$ ./run_tests +$ docker compose down +``` + +### Single host deployments + +Compose has traditionally been focused on development and testing workflows, +but with each release we're making progress on more production-oriented features. + +For details on using production-oriented features, see +[compose in production](production.md) in this documentation. \ No newline at end of file diff --git a/compose/gettingstarted.md b/compose/gettingstarted.md index 49aef459ca..49765b8f29 100644 --- a/compose/gettingstarted.md +++ b/compose/gettingstarted.md @@ -1,23 +1,23 @@ --- description: Get started with Docker Compose keywords: documentation, docs, docker, compose, orchestration, containers -title: Get started with Docker Compose +title: Try Docker Compose --- -On this page you build a simple Python web application running on Docker -Compose. The application uses the Flask framework and maintains a hit counter in -Redis. While the sample uses Python, the concepts demonstrated here should be -understandable even if you're not familiar with it. +This tutorial is designed to introduce the key concepts of Docker Compose whilst building a simple Python web application. The application uses the Flask framework and maintains a hit counter in +Redis. + +The concepts demonstrated here should be understandable even if you're not familiar Python. ## Prerequisites -Make sure you have already installed both [Docker Engine](../get-docker.md) -and [Docker Compose](install/index.md). You don't need to install Python or Redis, as -both are provided by Docker images. +You need to have Docker Engine and Docker Compose on your machine. You can either: +- Install [Docker Engine](../get-docker.md) and [Docker Compose](install/index.md) as standalone binaries +- Install [Docker Desktop](../desktop/index.md) which includes both Docker Engine and Docker Compose -## Step 1: Setup +You don't need to install Python or Redis, as both are provided by Docker images. -Define the application dependencies. +## Step 1: Define the application dependencies 1. Create a directory for the project: @@ -26,7 +26,7 @@ Define the application dependencies. $ cd composetest ``` -2. Create a file called `app.py` in your project directory and paste this in: +2. Create a file called `app.py` in your project directory and paste the following code in: ```python import time @@ -62,13 +62,13 @@ Define the application dependencies. > Note the way the `get_hit_count` function is written. This basic retry > loop lets us attempt our request multiple times if the redis service is > not available. This is useful at startup while the application comes - > online, but also makes our application more resilient if the Redis + > online, but also makes the application more resilient if the Redis > service needs to be restarted anytime during the app's lifetime. In a > cluster, this also helps handling momentary connection drops between > nodes. 3. Create another file called `requirements.txt` in your project directory and - paste this in: + paste the following code in: ```text flask @@ -77,12 +77,11 @@ Define the application dependencies. ## Step 2: Create a Dockerfile -In this step, you write a Dockerfile that builds a Docker image. The image +The Dockerfile is used to build a Docker image. The image contains all the dependencies the Python application requires, including Python itself. -In your project directory, create a file named `Dockerfile` and paste the -following: +In your project directory, create a file named `Dockerfile` and paste the following code in: ```dockerfile # syntax=docker/dockerfile:1 @@ -109,6 +108,11 @@ This tells Docker to: * Copy the current directory `.` in the project to the workdir `.` in the image. * Set the default command for the container to `flask run`. +>Important +> +>Check that the `Dockerfile` has no file extension like `.txt`. Some editors may append this file extension automatically and which results in an error when you run the application. +{: .important} + For more information on how to write Dockerfiles, see the [Docker user guide](../develop/index.md) and the [Dockerfile reference](/engine/reference/builder/). @@ -132,13 +136,8 @@ services: This Compose file defines two services: `web` and `redis`. -### Web service - The `web` service uses an image that's built from the `Dockerfile` in the current directory. -It then binds the container and the host machine to the exposed port, `8000`. This example service uses the default port for -the Flask web server, `5000`. - -### Redis service +It then binds the container and the host machine to the exposed port, `8000`. This example service uses the default port for the Flask web server, `5000`. The `redis` service uses a public [Redis](https://registry.hub.docker.com/_/redis/) image pulled from the Docker Hub registry. @@ -175,11 +174,7 @@ image pulled from the Docker Hub registry. 2. Enter http://localhost:8000/ in a browser to see the application running. - If you're using Docker natively on Linux, Docker Desktop for Mac, or Docker Desktop for - Windows, then the web app should now be listening on port 8000 on your - Docker daemon host. Point your web browser to http://localhost:8000 to - find the `Hello World` message. If this doesn't resolve, you can also try - http://127.0.0.1:8000. + If this doesn't resolve, you can also try http://127.0.0.1:8000. You should see a message in your browser saying: @@ -346,12 +341,9 @@ container: $ docker compose down --volumes ``` -At this point, you have seen the basics of how Compose works. - - ## Where to go next -- Next, try the [Sample apps with Compose](samples-for-compose.md) +- Next, try the [Sample apps with Compose](https://github.com/docker/awesome-compose) - [Explore the full list of Compose commands](reference/index.md) -- [Compose configuration file reference](compose-file/index.md) +- [Explore the Compose configuration file reference](compose-file/index.md) - To learn more about volumes and bind mounts, see [Manage data in Docker](../storage/index.md) diff --git a/compose/index.md b/compose/index.md index 512949ec9e..4ec92ce014 100644 --- a/compose/index.md +++ b/compose/index.md @@ -10,216 +10,88 @@ redirect_from: - /compose/completion/ --- ->**Looking for Compose file reference?** [Find the latest version here](compose-file/index.md). - Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services. Then, with a single command, you create and start all the services -from your configuration. To learn more about all the features of Compose, -see [the list of features](#features). +from your configuration. Compose works in all environments: production, staging, development, testing, as -well as CI workflows. You can learn more about each case in [Common Use -Cases](#common-use-cases). - -Using Compose is basically a three-step process: - -1. Define your app's environment with a `Dockerfile` so it can be reproduced -anywhere. - -2. Define the services that make up your app in `docker-compose.yml` -so they can be run together in an isolated environment. - -3. Run `docker compose up` and the [Docker compose command](#compose-v2-and-the-new-docker-compose-command) starts and runs your entire app. You can alternatively run `docker-compose up` using Compose standalone(`docker-compose` binary). - -A `docker-compose.yml` looks like this: - -```yaml -version: "{{ site.compose_file_v3 }}" # optional since v1.27.0 -services: - web: - build: . - ports: - - "8000:5000" - volumes: - - .:/code - - logvolume01:/var/log - depends_on: - - redis - redis: - image: redis -volumes: - logvolume01: {} -``` - -For more information about the Compose file, see the -[Compose file reference](compose-file/index.md). - -Compose has commands for managing the whole lifecycle of your application: +well as CI workflows. It also has commands for managing the whole lifecycle of your application: * Start, stop, and rebuild services * View the status of running services * Stream the log output of running services * Run a one-off command on a service -## Compose V2 and the new `docker compose` command +The key features of Compose that make it effective are: -> Important -> -> The new Compose V2, which supports the `compose` command as part of the Docker -> CLI, is now available. -> -> Compose V2 integrates compose functions into the Docker platform, continuing -> to support most of the previous `docker-compose` features and flags. You can -> run Compose V2 by replacing the hyphen (`-`) with a space, using `docker compose`, -> instead of `docker-compose`. -{: .important} +* [Have multiple isolated environments on a single host](features-uses.md#have-multiple-isolated-environments-on-a-single-host) +* [Preserves volume data when containers are created](features-uses.md#preserves-volume-data-when-containers-are-created) +* [Only recreate containers that have changed](features-uses.md#only-recreate-containers-that-have-changed) +* [Supports variables and moving a composition between environments](features-uses.md#supports-variables-and-moving-a-composition-between-environments) -If you rely on using Docker Compose as `docker-compose` (with a hyphen), you can -set up Compose V2 to act as a drop-in replacement of the previous `docker-compose`. -Refer to the [Installing Compose](install/index.md) section for detailed instructions. - -## Context of Docker Compose evolution - -Introduction of the [Compose specification](https://github.com/compose-spec/compose-spec){:target="_blank" rel="noopener" class="_"} -makes a clean distinction between the Compose YAML file model and the `docker-compose` -implementation. Making this change has enabled a number of enhancements, including -adding the `compose` command directly into the Docker CLI, being able to "up" a -Compose application on cloud platforms by simply switching the Docker context, -and launching of [Amazon ECS](../cloud/ecs-integration.md) and [Microsoft ACI](../cloud/aci-integration.md). -As the Compose specification evolves, new features land faster in the Docker CLI. - -Compose V2 relies directly on the compose-go bindings which are maintained as part -of the specification. This allows us to include community proposals, experimental -implementations by the Docker CLI and/or Engine, and deliver features faster to -users. Compose V2 also supports some of the newer additions to the specification, -such as [profiles](profiles.md) and [GPU](gpu-support.md) devices. - -Compose V2 has been re-written in [Go](https://go.dev), which improves integration -with other Docker command-line features, and allows it to run natively on -[macOS on Apple silicon](../desktop/mac/apple-silicon.md), Windows, and Linux, -without dependencies such as Python. - -For more information about compatibility with the compose v1 command-line, see the [docker-compose compatibility list](cli-command-compatibility.md). +

    -## Features -The features of Compose that make it effective are: - -* [Multiple isolated environments on a single host](#multiple-isolated-environments-on-a-single-host) -* [Preserve volume data when containers are created](#preserve-volume-data-when-containers-are-created) -* [Only recreate containers that have changed](#only-recreate-containers-that-have-changed) -* [Variables and moving a composition between environments](#variables-and-moving-a-composition-between-environments) - -### Multiple isolated environments on a single host - -Compose uses a project name to isolate environments from each other. You can make use of this project name in several different contexts: - -* on a dev host, to create multiple copies of a single environment, such as when you want to run a stable copy for each feature branch of a project -* on a CI server, to keep builds from interfering with each other, you can set - the project name to a unique build number -* on a shared host or dev host, to prevent different projects, which may use the - same service names, from interfering with each other - -The default project name is the basename of the project directory. You can set -a custom project name by using the -[`-p` command line option](reference/index.md) or the -[`COMPOSE_PROJECT_NAME` environment variable](reference/envvars.md#compose_project_name). - -The default project directory is the base directory of the Compose file. A custom value -for it can be defined with the `--project-directory` command line option. - - -### Preserve volume data when containers are created - -Compose preserves all volumes used by your services. When `docker compose up` -runs, if it finds any containers from previous runs, it copies the volumes from -the old container to the new container. This process ensures that any data -you've created in volumes isn't lost. - -If you use `docker-compose` on a Windows machine, see -[Environment variables](reference/envvars.md) and adjust the necessary environment -variables for your specific needs. - - -### Only recreate containers that have changed - -Compose caches the configuration used to create a container. When you -restart a service that has not changed, Compose re-uses the existing -containers. Re-using containers means that you can make changes to your -environment very quickly. - - -### Variables and moving a composition between environments - -Compose supports variables in the Compose file. You can use these variables -to customize your composition for different environments, or different users. -See [Variable substitution](compose-file/compose-file-v3.md#variable-substitution) for more -details. - -You can extend a Compose file using the `extends` field or by creating multiple -Compose files. See [extends](extends.md) for more details. - - -## Common use cases - -Compose can be used in many different ways. Some common use cases are outlined -below. - -### Development environments - -When you're developing software, the ability to run an application in an -isolated environment and interact with it is crucial. The Compose command -line tool can be used to create the environment and interact with it. - -The [Compose file](compose-file/index.md) provides a way to document and configure -all of the application's service dependencies (databases, queues, caches, -web service APIs, etc). Using the Compose command line tool you can create -and start one or more containers for each dependency with a single command -(`docker-compose up`). - -Together, these features provide a convenient way for developers to get -started on a project. Compose can reduce a multi-page "developer getting -started guide" to a single machine readable Compose file and a few commands. - -### Automated testing environments - -An important part of any Continuous Deployment or Continuous Integration process -is the automated test suite. Automated end-to-end testing requires an -environment in which to run tests. Compose provides a convenient way to create -and destroy isolated testing environments for your test suite. By defining the full environment in a [Compose file](compose-file/index.md), you can create and destroy these environments in just a few commands: - -```console -$ docker compose up -d -$ ./run_tests -$ docker compose down -``` - -### Single host deployments - -Compose has traditionally been focused on development and testing workflows, -but with each release we're making progress on more production-oriented features. - -For details on using production-oriented features, see -[compose in production](production.md) in this documentation. - - -## Release notes - -To see a detailed list of changes for past and current releases of Docker -Compose, refer to the -[CHANGELOG](https://github.com/docker/compose/blob/master/CHANGELOG.md). - -## Getting help - -Docker Compose is under active development. If you need help, would like to -contribute, or simply want to talk about the project with like-minded -individuals, we have a number of open channels for communication. - -* To report bugs or file feature requests: use the [issue tracker on Github](https://github.com/docker/compose/issues). - -* To talk about the project with people in real time: join the - `#docker-compose` channel on the Docker Community Slack. - -* To contribute code or documentation changes: submit a [pull request on Github](https://github.com/docker/compose/pulls). diff --git a/desktop/settings/linux.md b/desktop/settings/linux.md index 3afea5f719..03c75df30b 100644 --- a/desktop/settings/linux.md +++ b/desktop/settings/linux.md @@ -34,7 +34,7 @@ On the **General** tab, you can configure when to start Docker and specify other dashboard when starting Docker Desktop. - **Use Docker Compose V2**. Select to enable the `docker-compose` command to - use Docker Compose V2. For more information, see [Docker Compose V2](../../compose/index.md#compose-v2-and-the-new-docker-compose-command). + use Docker Compose V2. For more information, see [Docker Compose V2](../../compose/compose-v2/index.md). ## Resources diff --git a/desktop/settings/mac.md b/desktop/settings/mac.md index 4cc5e02386..35759680bf 100644 --- a/desktop/settings/mac.md +++ b/desktop/settings/mac.md @@ -45,7 +45,7 @@ On the **General** tab, you can configure when to start Docker and specify other dashboard when starting Docker Desktop. - **Use Docker Compose V2**. Select to enable the `docker-compose` command to - use Docker Compose V2. For more information, see [Docker Compose V2](../../compose/index.md#compose-v2-and-the-new-docker-compose-command). + use Docker Compose V2. For more information, see [Docker Compose V2](../../compose/compose-v2/index.md). ## Resources diff --git a/desktop/settings/windows.md b/desktop/settings/windows.md index 4115561c8c..6edcce3837 100644 --- a/desktop/settings/windows.md +++ b/desktop/settings/windows.md @@ -42,7 +42,7 @@ On the **General** tab, you can configure when to start Docker and specify other dashboard when starting Docker Desktop. - **Use Docker Compose V2**. Select to enable the `docker-compose` command to - use Docker Compose V2. For more information, see [Docker Compose V2](../../compose/index.md#compose-v2-and-the-new-docker-compose-command). + use Docker Compose V2. For more information, see [Docker Compose V2](../../compose/compose-v2/index.md). ## Resources From 37ae6721930ee3d96a6235b2d94920518ce14383 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Fri, 21 Oct 2022 11:34:01 +0200 Subject: [PATCH 20/54] doc review: update ubuntu and debian installation guides (#15902) --- .github/vale/Vocab/Industry/accept.txt | 3 + .github/vale/Vocab/Technology/accept.txt | 2 + _includes/install-script.md | 81 ++++---- engine/install/debian.md | 243 +++++++++++++--------- engine/install/ubuntu.md | 252 +++++++++++++---------- 5 files changed, 334 insertions(+), 247 deletions(-) diff --git a/.github/vale/Vocab/Industry/accept.txt b/.github/vale/Vocab/Industry/accept.txt index 587975f9e8..4b9f43b109 100644 --- a/.github/vale/Vocab/Industry/accept.txt +++ b/.github/vale/Vocab/Industry/accept.txt @@ -25,6 +25,7 @@ Kubernetes Lightstreamer Linux Logstash +LTS Mac Mail(chimp|gun) Microsoft @@ -38,9 +39,11 @@ Postgres PowerShell Python QEMU +Raspbian RHEL S3 SQLite +SLES Slack Snyk Solr diff --git a/.github/vale/Vocab/Technology/accept.txt b/.github/vale/Vocab/Technology/accept.txt index ed7d5454af..12595a0819 100644 --- a/.github/vale/Vocab/Technology/accept.txt +++ b/.github/vale/Vocab/Technology/accept.txt @@ -1,6 +1,7 @@ APIs? Ethernet Git +GPG HTTP IPs? IPv[46] @@ -43,6 +44,7 @@ stdout subnet swappable systemd +umask ungated virtiofs virtualize diff --git a/_includes/install-script.md b/_includes/install-script.md index 0fc545e28f..c17f903211 100644 --- a/_includes/install-script.md +++ b/_includes/install-script.md @@ -1,16 +1,17 @@ - - ### Install using the convenience script -Docker provides a convenience script at [get.docker.com](https://get.docker.com/) -to install Docker into development environments quickly and non-interactively. -The convenience script is not recommended for production environments, but can be -used as an example to create a provisioning script that is tailored to your needs. -Also refer to the [install using the repository](#install-using-the-repository) -steps to learn about installation steps to install using the package repository. -The source code for the script is open source, and can be found in the -[`docker-install` repository on GitHub](https://github.com/docker/docker-install){:target="_blank" rel="noopener" class="_"}. +Docker provides a convenience script at +[https://get.docker.com/](https://get.docker.com/) to install Docker into +development environments non-interactively. The convenience script isn't +recommended for production environments, but it's useful for creating a +provisioning script tailored to your needs. Also refer to the +[install using the repository](#install-using-the-repository) steps to learn +about installation steps to install using the package repository. The source +code for the script is open source, and can be found in the +[`docker-install` repository on GitHub](https://github.com/docker/docker-install){:target="_blank" +rel="noopener" class="_"}. + Always examine scripts downloaded from the internet before running them locally. Before installing, make yourself familiar with potential risks and limitations of the convenience script: @@ -18,31 +19,32 @@ of the convenience script: - The script requires `root` or `sudo` privileges to run. - The script attempts to detect your Linux distribution and version and - configure your package management system for you, and does not allow you to - customize most installation parameters. + configure your package management system for you. +- The script doesn't allow you to customize most installation parameters. - The script installs dependencies and recommendations without asking for confirmation. This may install a large number of packages, depending on the current configuration of your host machine. -- By default, the script installs the latest stable release of Docker, containerd, - and runc. When using this script to provision a machine, this may result in - unexpected major version upgrades of Docker. Always test (major) upgrades in +- By default, the script installs the latest stable release of Docker, + containerd, and runc. When using this script to provision a machine, this may + result in unexpected major version upgrades of Docker. Always test upgrades in a test environment before deploying to your production systems. -- The script is not designed to upgrade an existing Docker installation. When +- The script isn't designed to upgrade an existing Docker installation. When using the script to update an existing installation, dependencies may not be - updated to the expected version, causing outdated versions to be used. + updated to the expected version, resulting in outdated versions. > Tip: preview script steps before running > > You can run the script with the `DRY_RUN=1` option to learn what steps the -> script will execute during installation: +> script will run when invoked: > > ```console > $ curl -fsSL https://get.docker.com -o get-docker.sh -> $ DRY_RUN=1 sh ./get-docker.sh +> $ DRY_RUN=1 sudo sh ./get-docker.sh > ``` -This example downloads the script from [get.docker.com](https://get.docker.com/) -and runs it to install the latest stable release of Docker on Linux: +This example downloads the script from +[https://get.docker.com/](https://get.docker.com/) and runs it to install the +latest stable release of Docker on Linux: ```console $ curl -fsSL https://get.docker.com -o get-docker.sh @@ -51,41 +53,42 @@ Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b273 <...> ``` -Docker is installed. The `docker` service starts automatically on Debian based -distributions. On `RPM` based distributions, such as CentOS, Fedora, RHEL or SLES, -you need to start it manually using the appropriate `systemctl` or `service` command. -As the message indicates, non-root users cannot run Docker commands by default. +You have now successfully installed and started Docker Engine. The `docker` +service starts automatically on Debian based distributions. On `RPM` based +distributions, such as CentOS, Fedora, RHEL or SLES, you need to start it +manually using the appropriate `systemctl` or `service` command. As the message +indicates, non-root users can't run Docker commands by default. > **Use Docker as a non-privileged user, or install in rootless mode?** > > The installation script requires `root` or `sudo` privileges to install and > use Docker. If you want to grant non-root users access to Docker, refer to the > [post-installation steps for Linux](/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user). -> Docker can also be installed without `root` privileges, or configured to run -> in rootless mode. For instructions on running Docker in rootless mode, refer to +> You can also install Docker without `root` privileges, or configured to run in +> rootless mode. For instructions on running Docker in rootless mode, refer to > [run the Docker daemon as a non-root user (rootless mode)](/engine/security/rootless/). #### Install pre-releases -Docker also provides a convenience script at [test.docker.com](https://test.docker.com/) -to install pre-releases of Docker on Linux. This script is equivalent to the -script at `get.docker.com`, but configures your package manager to enable the -"test" channel from our package repository, which includes both stable and -pre-releases (beta versions, release-candidates) of Docker. Use this script to -get early access to new releases, and to evaluate them in a testing environment -before they are released as stable. +Docker also provides a convenience script at +[https://test.docker.com/](https://test.docker.com/) to install pre-releases of +Docker on Linux. This script is equal to the script at `get.docker.com`, but +configures your package manager to use the test channel of the Docker package +repository. The test channel includes both stable and pre-releases (beta +versions, release-candidates) of Docker. Use this script to get early access to +new releases, and to evaluate them in a testing environment before they're +released as stable. -To install the latest version of Docker on Linux from the "test" channel, run: +To install the latest version of Docker on Linux from the test channel, run: ```console $ curl -fsSL https://test.docker.com -o test-docker.sh $ sudo sh test-docker.sh -<...> ``` #### Upgrade Docker after using the convenience script If you installed Docker using the convenience script, you should upgrade Docker -using your package manager directly. There is no advantage to re-running the -convenience script, and it can cause issues if it attempts to re-add -repositories which have already been added to the host machine. +using your package manager directly. There's no advantage to re-running the +convenience script. Re-running it can cause issues if it attempts to re-install +repositories which already exist on the host machine. diff --git a/engine/install/debian.md b/engine/install/debian.md index 6fbd52970c..bcf12bfe9a 100644 --- a/engine/install/debian.md +++ b/engine/install/debian.md @@ -1,12 +1,13 @@ --- description: Instructions for installing Docker Engine on Debian -keywords: requirements, apt, installation, debian, install, uninstall, upgrade, update +keywords: + requirements, apt, installation, debian, install, uninstall, upgrade, update redirect_from: -- /engine/installation/debian/ -- /engine/installation/linux/raspbian/ -- /engine/installation/linux/debian/ -- /engine/installation/linux/docker-ce/debian/ -- /install/linux/docker-ce/debian/ + - /engine/installation/debian/ + - /engine/installation/linux/raspbian/ + - /engine/installation/linux/debian/ + - /engine/installation/linux/docker-ce/debian/ + - /install/linux/docker-ce/debian/ title: Install Docker Engine on Debian toc_max: 4 --- @@ -27,12 +28,14 @@ Raspbian versions: - Raspbian Bullseye 11 (stable) - Raspbian Buster 10 (oldstable) -Docker Engine is supported on `x86_64` (or `amd64`), `armhf`, and `arm64` architectures. +Docker Engine is compatible with `x86_64` (or `amd64`), `armhf`, and `arm64` +architectures. ### Uninstall old versions -Older versions of Docker were called `docker`, `docker.io`, or `docker-engine`. -If these are installed, uninstall them: +Older versions of Docker went by the names of `docker`, `docker.io`, or +`docker-engine`. Uninstall any such older versions before attempting to install +a new version: ```console $ sudo apt-get remove docker docker-engine docker.io containerd runc @@ -40,38 +43,37 @@ $ sudo apt-get remove docker docker-engine docker.io containerd runc It's OK if `apt-get` reports that none of these packages are installed. -The contents of `/var/lib/docker/`, including images, containers, volumes, and -networks, are preserved. If you do not need to save your existing data, and want to -start with a clean installation, refer to the [uninstall Docker Engine](#uninstall-docker-engine) -section at the bottom of this page. +Images, containers, volumes, and networks stored in `/var/lib/docker/` aren't +automatically removed when you uninstall Docker. If you want to start with a +clean installation, and prefer to clean up any existing data, refer to the +[uninstall Docker Engine](#uninstall-docker-engine) section. ## Installation methods You can install Docker Engine in different ways, depending on your needs: -- Most users - [set up Docker's repositories](#install-using-the-repository) and install - from them, for ease of installation and upgrade tasks. This is the - recommended approach, except for Raspbian. +- Docker Engine comes bundled with + [Docker Desktop for Linux](../../desktop/install/linux-install.md). This is + the easiest and quickest way to get started. -- Some users download the DEB package and - [install it manually](#install-from-a-package) and manage - upgrades completely manually. This is useful in situations such as installing - Docker on air-gapped systems with no access to the internet. +- You can also set up and install Docker Engine from + [Docker's `apt` repository](#install-using-the-repository). -- In testing and development environments, some users choose to use automated - [convenience scripts](#install-using-the-convenience-script) to install Docker. - This is currently the only approach for Raspbian. +- [Install it manually](#install-from-a-package) and manage upgrades manually. + +- Using a [convenience scripts](#install-using-the-convenience-script). Only + recommended for testing and development environments. This is the only + approach available for Raspbian. ### Install using the repository -Before you install Docker Engine for the first time on a new host machine, you need -to set up the Docker repository. Afterward, you can install and update Docker -from the repository. +Before you install Docker Engine for the first time on a new host machine, you +need to set up the Docker repository. Afterward, you can install and update +Docker from the repository. -> **Raspbian users cannot use this method!** +> **Raspbian users can't use this method.** > -> For Raspbian, installing using the repository is not yet supported. You must +> For Raspbian, installing using the repository isn't yet supported. You must > instead use the [convenience script](#install-using-the-convenience-script). #### Set up the repository @@ -108,99 +110,142 @@ from the repository. #### Install Docker Engine -This procedure works for Debian on `x86_64` / `amd64`, `armhf`, `arm64`, and Raspbian. +This procedure works for Debian on `x86_64` / `amd64`, `armhf`, `arm64`, and +Raspbian. -1. Update the `apt` package index, and install the _latest version_ of Docker - Engine, containerd, and Docker Compose, or go to the next step to install a specific version: +1. Update the `apt` package index: - ```console - $ sudo apt-get update + ```console + $ sudo apt-get update + ``` + + > Receiving a GPG error when running `apt-get update`? + > + > Your default [umask](https://en.wikipedia.org/wiki/Umask){: target="blank" + > rel="noopener" } may be incorrectly configured, preventing detection of the + > repository public key file. Try granting read permission for the Docker + > public key file before updating the package index: + > + > ```console + > $ sudo chmod a+r /etc/apt/keyrings/docker.gpg + > $ sudo apt-get update + > ``` + +2. Install Docker Engine, containerd, and Docker Compose. + + +
    +
    +
    + + To install the latest version, run: + + ```console $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin - ``` + ``` - > Receiving a GPG error when running `apt-get update`? - > - > Your default umask may not be set correctly, causing the public key file - > for the repo to not be detected. Run the following command and then try to - > update your repo again: `sudo chmod a+r /etc/apt/keyrings/docker.gpg`. +
    +
    -2. To install a _specific version_ of Docker Engine, list the available versions - in the repo, then select and install: + To install a specific version of Docker Engine, start by list the available + versions in the repository: - a. List the versions available in your repo: + ```console + # List the available versions: + $ apt-cache madison docker-ce | awk '{ print $3 }' - ```console - $ apt-cache madison docker-ce + 5:18.09.1~3-0~debian-stretch + 5:18.09.0~3-0~debian-stretch + 18.06.1~ce~3-0~debian + 18.06.0~ce~3-0~debian + ``` - docker-ce | 5:18.09.1~3-0~debian-stretch | {{ download-url-base }} stretch/stable amd64 Packages - docker-ce | 5:18.09.0~3-0~debian-stretch | {{ download-url-base }} stretch/stable amd64 Packages - docker-ce | 18.06.1~ce~3-0~debian | {{ download-url-base }} stretch/stable amd64 Packages - docker-ce | 18.06.0~ce~3-0~debian | {{ download-url-base }} stretch/stable amd64 Packages - ``` + Select the desired version and install: - b. Install a specific version using the version string from the second column, - for example, `5:18.09.1~3-0~debian-stretch`. + ```console + $ VERSION_STRING=5:18.09.0~3-0~debian-stretch + $ sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-compose-plugin + ``` - ```console - $ sudo apt-get install docker-ce= docker-ce-cli= containerd.io docker-compose-plugin - ``` +
    +
    +
    -3. Verify that Docker Engine is installed correctly by running the `hello-world` - image. +3. Verify that the Docker Engine installation is successful by running the + `hello-world` image: - ```console - $ sudo docker run hello-world - ``` + ```console + $ sudo docker run hello-world + ``` - This command downloads a test image and runs it in a container. When the - container runs, it prints a message and exits. + This command downloads a test image and runs it in a container. When the + container runs, it prints a confirmation message and exits. -Docker Engine is installed and running. The `docker` group is created but no users -are added to it. You need to use `sudo` to run Docker commands. -Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged -users to run Docker commands and for other optional configuration steps. +You have now successfully installed and started Docker Engine. The `docker` user +group exists but contains no users, which is why you're required to use `sudo` +to run Docker commands. Continue to [Linux post-install](linux-postinstall.md) +to allow non-privileged users to run Docker commands and for other optional +configuration steps. #### Upgrade Docker Engine -To upgrade Docker Engine, first run `sudo apt-get update`, then follow the -[installation instructions](#install-using-the-repository), choosing the new -version you want to install. +To upgrade Docker Engine, follow the +[installation instructions](#install-docker-engine), choosing the new version +you want to install. ### Install from a package -If you cannot use Docker's repository to install Docker Engine, you can download the -`.deb` file for your release and install it manually. You need to download -a new file each time you want to upgrade Docker. +If you can't use Docker's `apt` repository to install Docker Engine, you can +download the `deb` file for your release and install it manually. You need to +download a new file each time you want to upgrade Docker Engine. -1. Go to [`{{ download-url-base }}/dists/`]({{ download-url-base }}/dists/){: target="_blank" rel="noopener" class="_" }, - choose your Debian version, then browse to `pool/stable/`, choose `amd64`, - `armhf`, or `arm64`, and download the `.deb` file for the Docker Engine - version you want to install. +1. Go to [`{{ download-url-base }}/dists/`]({{ download-url-base }}/dists/){: + target="_blank" rel="noopener" class="_" }. -2. Install Docker Engine, changing the path below to the path where you downloaded - the Docker package. +2. Select your Debian version in the list. - ```console - $ sudo dpkg -i /path/to/package.deb - ``` +3. Go to `pool/stable/` and select the applicable architecture (`amd64`, + `armhf`, `arm64`, or `s390x`). - The Docker daemon starts automatically. +4. Download the following `deb` files for the Docker Engine, CLI, containerd, + and Docker Compose packages: -3. Verify that Docker Engine is installed correctly by running the `hello-world` - image. + - `containerd.io__.deb` + - `docker-ce__.deb` + - `docker-ce-cli__.deb` + - `docker-compose-plugin__.deb` - ```console - $ sudo docker run hello-world - ``` +5. Install the `.deb` packages. Update the paths in the following example to + where you downloaded the Docker packages. - This command downloads a test image and runs it in a container. When the - container runs, it prints a message and exits. + ```console + $ sudo dpkg -i ./containerd.io__.deb \ + ./docker-ce__.deb \ + ./docker-ce-cli__.deb \ + ./docker-compose-plugin__.deb + ``` -Docker Engine is installed and running. The `docker` group is created but no users -are added to it. You need to use `sudo` to run Docker commands. -Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow -non-privileged users to run Docker commands and for other optional configuration -steps. + The Docker daemon starts automatically. + +6. Verify that the Docker Engine installation is successful by running the + `hello-world` image: + + ```console + $ sudo service docker start + $ sudo docker run hello-world + ``` + + This command downloads a test image and runs it in a container. When the + container runs, it prints a confirmation message and exits. + +You have now successfully installed and started Docker Engine. The `docker` user +group exists but contains no users, which is why you're required to use `sudo` +to run Docker commands. Continue to [Linux post-install](linux-postinstall.md) +to allow non-privileged users to run Docker commands and for other optional +configuration steps. #### Upgrade Docker Engine @@ -211,15 +256,14 @@ To upgrade Docker Engine, download the newer package file and repeat the ## Uninstall Docker Engine -1. Uninstall the Docker Engine, CLI, Containerd, and Docker Compose packages: +1. Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages: ```console $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` -2. Images, containers, volumes, or customized configuration files on your host - are not automatically removed. To delete all images, containers, and - volumes: +2. Images, containers, volumes, or custom configuration files on your host + aren't automatically removed. To delete all images, containers, and volumes: ```console $ sudo rm -rf /var/lib/docker @@ -231,4 +275,5 @@ You must delete any edited configuration files manually. ## Next steps - Continue to [Post-installation steps for Linux](linux-postinstall.md). -- Review the topics in [Develop with Docker](../../develop/index.md) to learn how to build new applications using Docker. +- Review the topics in [Develop with Docker](../../develop/index.md) to learn + how to build new applications using Docker. diff --git a/engine/install/ubuntu.md b/engine/install/ubuntu.md index 3cc23688a8..2643bf67b8 100644 --- a/engine/install/ubuntu.md +++ b/engine/install/ubuntu.md @@ -1,29 +1,22 @@ --- description: Instructions for installing Docker Engine on Ubuntu -keywords: requirements, apt, installation, ubuntu, install, uninstall, upgrade, update +keywords: + requirements, apt, installation, ubuntu, install, uninstall, upgrade, update redirect_from: -- /ee/docker-ee/ubuntu/ -- /engine/installation/linux/docker-ce/ubuntu/ -- /engine/installation/linux/docker-ee/ubuntu/ -- /engine/installation/linux/ubuntu/ -- /engine/installation/linux/ubuntulinux/ -- /engine/installation/ubuntulinux/ -- /install/linux/docker-ce/ubuntu/ -- /install/linux/docker-ee/ubuntu/ -- /install/linux/ubuntu/ -- /installation/ubuntulinux/ + - /ee/docker-ee/ubuntu/ + - /engine/installation/linux/docker-ce/ubuntu/ + - /engine/installation/linux/docker-ee/ubuntu/ + - /engine/installation/linux/ubuntu/ + - /engine/installation/linux/ubuntulinux/ + - /engine/installation/ubuntulinux/ + - /install/linux/docker-ce/ubuntu/ + - /install/linux/docker-ee/ubuntu/ + - /install/linux/ubuntu/ + - /installation/ubuntulinux/ title: Install Docker Engine on Ubuntu toc_max: 4 --- -> **Docker Desktop for Linux** -> -> Docker Desktop helps you build, share, and run containers easily on Mac and -> Windows as you do on Linux. We are excited to share that Docker Desktop for -> Linux is now GA. For more information, see -[Docker Desktop for Linux](../../desktop/install/linux-install.md). -{: .important} - To get started with Docker Engine on Ubuntu, make sure you [meet the prerequisites](#prerequisites), then [install Docker](#installation-methods). @@ -40,12 +33,14 @@ versions: - Ubuntu Focal 20.04 (LTS) - Ubuntu Bionic 18.04 (LTS) -Docker Engine is supported on `x86_64` (or `amd64`), `armhf`, `arm64`, and `s390x` architectures. +Docker Engine is compatible with `x86_64` (or `amd64`), `armhf`, `arm64`, and +`s390x` architectures. ### Uninstall old versions -Older versions of Docker were called `docker`, `docker.io`, or `docker-engine`. -If these are installed, uninstall them: +Older versions of Docker went by the names of `docker`, `docker.io`, or +`docker-engine`. Uninstall any such older versions before attempting to install +a new version: ```console $ sudo apt-get remove docker docker-engine docker.io containerd runc @@ -53,33 +48,32 @@ $ sudo apt-get remove docker docker-engine docker.io containerd runc It's OK if `apt-get` reports that none of these packages are installed. -The contents of `/var/lib/docker/`, including images, containers, volumes, and -networks, are preserved. If you do not need to save your existing data, and want to -start with a clean installation, refer to the [uninstall Docker Engine](#uninstall-docker-engine) -section at the bottom of this page. +Images, containers, volumes, and networks stored in `/var/lib/docker/` aren't +automatically removed when you uninstall Docker. If you want to start with a +clean installation, and prefer to clean up any existing data, refer to the +[uninstall Docker Engine](#uninstall-docker-engine) section. ## Installation methods You can install Docker Engine in different ways, depending on your needs: -- Most users - [set up Docker's repositories](#install-using-the-repository) and install - from them, for ease of installation and upgrade tasks. This is the - recommended approach. +- Docker Engine comes bundled with + [Docker Desktop for Linux](../../desktop/install/linux-install.md). This is + the easiest and quickest way to get started. -- Some users download the DEB package and - [install it manually](#install-from-a-package) and manage - upgrades completely manually. This is useful in situations such as installing - Docker on air-gapped systems with no access to the internet. +- You can also set up and install Docker Engine from + [Docker's `apt` repository](#install-using-the-repository). -- In testing and development environments, some users choose to use automated - [convenience scripts](#install-using-the-convenience-script) to install Docker. +- [Install it manually](#install-from-a-package) and manage upgrades manually. + +- Using a [convenience scripts](#install-using-the-convenience-script). Only + recommended for testing and development environments. ### Install using the repository -Before you install Docker Engine for the first time on a new host machine, you need -to set up the Docker repository. Afterward, you can install and update Docker -from the repository. +Before you install Docker Engine for the first time on a new host machine, you +need to set up the Docker repository. Afterward, you can install and update +Docker from the repository. #### Set up the repository @@ -115,98 +109,138 @@ from the repository. #### Install Docker Engine -1. Update the `apt` package index, and install the _latest version_ of Docker - Engine, containerd, and Docker Compose, or go to the next step to install a specific version: +1. Update the `apt` package index: - ```console - $ sudo apt-get update + ```console + $ sudo apt-get update + ``` + + > Receiving a GPG error when running `apt-get update`? + > + > Your default [umask](https://en.wikipedia.org/wiki/Umask){: target="blank" + > rel="noopener" } may be incorrectly configured, preventing detection of the + > repository public key file. Try granting read permission for the Docker + > public key file before updating the package index: + > + > ```console + > $ sudo chmod a+r /etc/apt/keyrings/docker.gpg + > $ sudo apt-get update + > ``` + +2. Install Docker Engine, containerd, and Docker Compose. + + +
    +
    +
    + + To install the latest version, run: + + ```console $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin - ``` + ``` - > Receiving a GPG error when running `apt-get update`? - > - > Your default umask may not be set correctly, causing the public key file - > for the repo to not be detected. Run the following command and then try to - > update your repo again: `sudo chmod a+r /etc/apt/keyrings/docker.gpg`. +
    +
    -2. To install a _specific version_ of Docker Engine, list the available versions - in the repo, then select and install: + To install a specific version of Docker Engine, start by list the available + versions in the repository: - a. List the versions available in your repo: + ```console + # List the available versions: + $ apt-cache madison docker-ce | awk '{ print $3 }' - ```console - $ apt-cache madison docker-ce + 5:20.10.16~3-0~ubuntu-jammy + 5:20.10.15~3-0~ubuntu-jammy + 5:20.10.14~3-0~ubuntu-jammy + 5:20.10.13~3-0~ubuntu-jammy + ``` - docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages - docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages - docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages - docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages - ``` + Select the desired version and install: - b. Install a specific version using the version string from the second column, - for example, `5:20.10.16~3-0~ubuntu-jammy`. + ```console + $ VERSION_STRING=5:20.10.13~3-0~ubuntu-jammy + $ sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-compose-plugin + ``` - ```console - $ sudo apt-get install docker-ce= docker-ce-cli= containerd.io docker-compose-plugin - ``` +
    +
    +
    -3. Verify that Docker Engine is installed correctly by running the `hello-world` - image. +3. Verify that the Docker Engine installation is successful by running the + `hello-world` image: - ```console - $ sudo service docker start - $ sudo docker run hello-world - ``` + ```console + $ sudo docker run hello-world + ``` - This command downloads a test image and runs it in a container. When the - container runs, it prints a message and exits. + This command downloads a test image and runs it in a container. When the + container runs, it prints a confirmation message and exits. -Docker Engine is installed and running. The `docker` group is created but no users -are added to it. You need to use `sudo` to run Docker commands. -Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged -users to run Docker commands and for other optional configuration steps. +You have now successfully installed and started Docker Engine. The `docker` user +group exists but contains no users, which is why you're required to use `sudo` +to run Docker commands. Continue to [Linux post-install](linux-postinstall.md) +to allow non-privileged users to run Docker commands and for other optional +configuration steps. #### Upgrade Docker Engine -To upgrade Docker Engine, first run `sudo apt-get update`, then follow the -[installation instructions](#install-using-the-repository), choosing the new -version you want to install. +To upgrade Docker Engine, follow the +[installation instructions](#install-docker-engine), choosing the new version +you want to install. ### Install from a package -If you cannot use Docker's repository to install Docker Engine, you can download the -`.deb` file for your release and install it manually. You need to download -a new file each time you want to upgrade Docker. +If you can't use Docker's `apt` repository to install Docker Engine, you can +download the `deb` file for your release and install it manually. You need to +download a new file each time you want to upgrade Docker Engine. -1. Go to [`{{ download-url-base }}/dists/`]({{ download-url-base }}/dists/){: target="_blank" rel="noopener" class="_" }, - choose your Ubuntu version, then browse to `pool/stable/`, choose `amd64`, - `armhf`, `arm64`, or `s390x`, and download the `.deb` file for the Docker Engine - version you want to install. +1. Go to [`{{ download-url-base }}/dists/`]({{ download-url-base }}/dists/){: + target="_blank" rel="noopener" class="_" }. -2. Install Docker Engine, changing the path below to the path where you downloaded - the Docker package. +2. Select your Ubuntu version in the list. - ```console - $ sudo dpkg -i /path/to/package.deb - ``` +3. Go to `pool/stable/` and select the applicable architecture (`amd64`, + `armhf`, `arm64`, or `s390x`). - The Docker daemon starts automatically. +4. Download the following `deb` files for the Docker Engine, CLI, containerd, + and Docker Compose packages: -3. Verify that Docker Engine is installed correctly by running the `hello-world` - image. + - `containerd.io__.deb` + - `docker-ce__.deb` + - `docker-ce-cli__.deb` + - `docker-compose-plugin__.deb` - ```console - $ sudo docker run hello-world - ``` +5. Install the `.deb` packages. Update the paths in the following example to + where you downloaded the Docker packages. - This command downloads a test image and runs it in a container. When the - container runs, it prints a message and exits. + ```console + $ sudo dpkg -i ./containerd.io__.deb \ + ./docker-ce__.deb \ + ./docker-ce-cli__.deb \ + ./docker-compose-plugin__.deb + ``` -Docker Engine is installed and running. The `docker` group is created but no users -are added to it. You need to use `sudo` to run Docker commands. -Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow -non-privileged users to run Docker commands and for other optional configuration -steps. + The Docker daemon starts automatically. + +6. Verify that the Docker Engine installation is successful by running the + `hello-world` image: + + ```console + $ sudo docker run hello-world + ``` + + This command downloads a test image and runs it in a container. When the + container runs, it prints a confirmation message and exits. + +You have now successfully installed and started Docker Engine. The `docker` user +group exists but contains no users, which is why you're required to use `sudo` +to run Docker commands. Continue to [Linux post-install](linux-postinstall.md) +to allow non-privileged users to run Docker commands and for other optional +configuration steps. #### Upgrade Docker Engine @@ -217,15 +251,14 @@ To upgrade Docker Engine, download the newer package file and repeat the ## Uninstall Docker Engine -1. Uninstall the Docker Engine, CLI, Containerd, and Docker Compose packages: +1. Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages: ```console $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` -2. Images, containers, volumes, or customized configuration files on your host - are not automatically removed. To delete all images, containers, and - volumes: +2. Images, containers, volumes, or custom configuration files on your host + aren't automatically removed. To delete all images, containers, and volumes: ```console $ sudo rm -rf /var/lib/docker @@ -237,4 +270,5 @@ You must delete any edited configuration files manually. ## Next steps - Continue to [Post-installation steps for Linux](linux-postinstall.md). -- Review the topics in [Develop with Docker](../../develop/index.md) to learn how to build new applications using Docker. +- Review the topics in [Develop with Docker](../../develop/index.md) to learn + how to build new applications using Docker. From d29a1d87eb9a688c41b6d6c922020cfa6bc7cc9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 14:19:14 +0200 Subject: [PATCH 21/54] Bump nokogiri from 1.13.8 to 1.13.9 (#15935) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.8 to 1.13.9. - [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.13.8...v1.13.9) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1debabf1a1..ceb17254ed 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -76,12 +76,12 @@ GEM tomlrb mixlib-shellout (3.2.7) chef-utils - nokogiri (1.13.8) + nokogiri (1.13.9) mini_portile2 (~> 2.8.0) racc (~> 1.4) - nokogiri (1.13.8-aarch64-linux) + nokogiri (1.13.9-aarch64-linux) racc (~> 1.4) - nokogiri (1.13.8-x86_64-linux) + nokogiri (1.13.9-x86_64-linux) racc (~> 1.4) octopress-hooks (2.6.2) jekyll (>= 2.0) From 8f2c9e5d5ebf59c65edf8149a5934853949fbf38 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Fri, 21 Oct 2022 13:21:53 +0100 Subject: [PATCH 22/54] update home page banner (#15940) --- _includes/landing-page/hardened-desktop.html | 19 +++++++++++++++++++ _layouts/landing.html | 2 +- assets/images/hardened-desktop.PNG | Bin 0 -> 82606 bytes 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 _includes/landing-page/hardened-desktop.html create mode 100644 assets/images/hardened-desktop.PNG diff --git a/_includes/landing-page/hardened-desktop.html b/_includes/landing-page/hardened-desktop.html new file mode 100644 index 0000000000..69f96881e6 --- /dev/null +++ b/_includes/landing-page/hardened-desktop.html @@ -0,0 +1,19 @@ +
    +
    +
    +

    + Hardened Desktop for Docker Business customers +

    +
    +

    Two new security features have been introduced for Docker Business users, Settings Management and Enhanced Container Isolation, as part of Docker Desktop’s new Hardened Desktop security model.

    +
    +
    + extensions +
    + +
    +
    \ No newline at end of file diff --git a/_layouts/landing.html b/_layouts/landing.html index 5a8c70d135..136fa49f6f 100644 --- a/_layouts/landing.html +++ b/_layouts/landing.html @@ -143,7 +143,7 @@ - {% include landing-page/extensions-banner.html %} + {% include landing-page/hardened-desktop.html %}
    diff --git a/assets/images/hardened-desktop.PNG b/assets/images/hardened-desktop.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f8984a0b62aa1ba0b23a3eeffee068a92de84b6a GIT binary patch literal 82606 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 Date: Fri, 21 Oct 2022 15:12:12 +0100 Subject: [PATCH 23/54] ENGDOCS-1020 (#15857) * ENGDOCS-1020 * fix broken links * fix build * add important note --- _data/toc.yaml | 8 +++--- compose/install/index.md | 60 +++++++++++++++++----------------------- compose/install/linux.md | 41 ++++++++++----------------- compose/install/other.md | 11 ++++---- 4 files changed, 48 insertions(+), 72 deletions(-) diff --git a/_data/toc.yaml b/_data/toc.yaml index 4c2035b518..d8f4db2e9c 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1558,13 +1558,13 @@ manuals: - sectiontitle: Install Docker Compose section: - path: /compose/install/ - title: Install overview + title: Overview - path: /compose/install/linux/ - title: Install on Linux + title: Install the Compose plugin - path: /compose/install/other/ - title: Other install scenarios + title: Install the Compose standalone - path: /compose/install/uninstall/ - title: Uninstall Docker Compose + title: Uninstall Compose - path: /compose/gettingstarted/ title: Try Docker Compose - sectiontitle: Compose V2 diff --git a/compose/install/index.md b/compose/install/index.md index 27c283651c..7601a8a94d 100644 --- a/compose/install/index.md +++ b/compose/install/index.md @@ -1,54 +1,44 @@ --- description: How to install Docker Compose keywords: compose, orchestration, install, installation, docker, documentation -title: Install Docker Compose +title: Overview toc_max: 3 redirect_from: - /compose/compose-desktop/ --- -On this page you can find information on how to get and install Compose. +This page contains summary information about the available options for getting Docker Compose. -## Install Compose +## Installation scenarios -If you have Docker Desktop, you've got a full Docker installation, including Compose. +### Scenario one: Install Docker Desktop -You can check this by clicking on **About Docker Desktop** from the Docker menu ![whale menu](../../desktop/images/whale-x.svg){: .inline}. +The easiest and recommended way to get Docker Compose is to install Docker Desktop. Docker Desktop +includes Docker Compose along with Docker Engine and Docker CLI which are Compose prerequisites. -![about-desktop](../../desktop/images/about_desktop_versions.png){:width="750px"} +Docker Desktop is available on: +- [Linux](../../desktop/install/linux-install.md) +- [Mac](../../desktop/install/mac-install.md) +- [Windows](../../desktop/install/windows-install.md) -### New Docker Installation +If you have already installed Docker Desktop, you can check which version of Compose you have by selecting **About Docker Desktop** from the Docker menu ![whale menu](../../desktop/images/whale-x.svg){: .inline} -If you haven’t yet installed Docker Desktop: +### Scenario two: Install the Compose plugin -{% assign yes = '![yes](/assets/images/green-check.svg){: .inline style="height: 14px; margin: 0 auto; align=right"}' %} +If you already have Docker Engine and Docker CLI installed, you can install the Compose plugin from the command line, by either: +- [Using Docker's repository](linux.md#install-using-the-repository) +- [Downloading and installing manually](linux.md#install-the-plugin-manually) -| Platform | Docker Desktop | -|:---------------|:------------------------------:| -|Linux (64-bit) |{{ yes }} [Install](../../desktop/install/linux-install.md)| -|Mac |{{ yes }} [Install](../../desktop/install/mac-install.md)| -|Windows |{{ yes }} [Install](../../desktop/install/windows-install.md)| +>Note +> +>This is only available on Linux +{: .important} +### Scenario three: Install the Compose standalone -### Pre-existing Docker Installation +You can [install the Compose standalone](other.md) on Linux or on Windows Server. -If you have a Docker installation on Linux to which you want to add the Compose plugin, you can choose one of these options: - -* [Install using the repository](./linux.md#install-using-the-repository) -* [Install the plugin manually](./linux.md#install-the-plugin-manually) - -### Other install scenarios - -For other options, see [Other install scenarios](./other.md). - - -## Where to go next - -- [Getting Started](../gettingstarted.md) -- [Command line reference](../../reference/index.md) -- [Compose file reference](../compose-file/index.md) -- [Sample apps with Compose](../samples-for-compose.md) - -## Feedback - -We'd love to hear from you about the improvements we've recently made to the Docker Compose installation instructions. Let us know what you think by completing this short [survey](https://survey.alchemer.com/s3/7002962/Compose-Install-Documentation-Feedback){:target="_blank" rel="noopener" class="_"}. \ No newline at end of file +>Note +> +>This install scenario is no longer supported. +{: .important} \ No newline at end of file diff --git a/compose/install/linux.md b/compose/install/linux.md index 6573f3400c..b23b5e0411 100644 --- a/compose/install/linux.md +++ b/compose/install/linux.md @@ -2,30 +2,24 @@ description: How to install Docker Compose on Linux keywords: compose, orchestration, install, installation, docker, documentation toc_max: 3 - -title: Install on Linux +title: Install the Compose plugin redirect_from: - /compose/compose-plugin/ - /compose/compose-linux/ - --- -On this page you can find instructions on how to install the Compose on Linux from the command line. +On this page you can find instructions on how to install the Compose plugin on Linux from the command line. -## Install Compose - -To install Compose: -* Option 1: [Set up Docker's repository on your Linux system](#install-using-the-repository). -* Option 2: [Install Compose manually](#install-the-plugin-manually). - -### Install using the repository +To install the Compose plugin on Linux, you can either: +- [Set up Docker's repository on your Linux system](#install-using-the-repository). +- [Install Compose manually](#install-the-plugin-manually). > **Note** > > These instructions assume you already have Docker Engine and Docker CLI installed and now want to install the Compose plugin. -For Compose standalone, see [Install Compose Standalone](other.md#install-compose-standalone). +For Compose standalone, see [Install Compose Standalone](other.md). -If you have already set up the Docker repository, jump to step 2. +### Install using the repository 1. Set up the repository. Find distro-specific instructions in: @@ -36,15 +30,15 @@ If you have already set up the Docker repository, jump to step 2. [RHEL](../../engine/install/rhel.md/#set-up-the-repository) | [SLES](../../engine/install/sles.md/#set-up-the-repository). -2. Update the package index, and install the _latest version_ of Docker Compose: +2. Update the package index, and install the latest version of Docker Compose: - * Ubuntu, Debian: + * For Ubuntu and Debian, run: ```console $ sudo apt-get update $ sudo apt-get install docker-compose-plugin ``` - * RPM-based distros: + * For RPM-based distros, run: ```console $ sudo yum update @@ -62,15 +56,15 @@ Where `vN.N.N` is placeholder text standing in for the latest version. #### Update Compose -To update Compose, run the following commands: +To update the Compose plugin, run the following commands: -* Ubuntu, Debian: +* For Ubuntu and Debian, run: ```console $ sudo apt-get update $ sudo apt-get install docker-compose-plugin ``` -* RPM-based distros: +* For RPM-based distros, run: ```console $ sudo yum update @@ -81,7 +75,7 @@ To update Compose, run the following commands: > **Note** > -> This option requires you to manage upgrades manually. We recommend setting up Docker's repository for an easier maintenance. +> This option requires you to manage upgrades manually. We recommend setting up Docker's repository for easier maintenance. 1. To download and install the Compose CLI plugin, run: @@ -115,10 +109,3 @@ To update Compose, run the following commands: $ docker compose version Docker Compose version {{site.compose_version}} ``` - -## Where to go next - -- [Manage Docker as a non-root user](../../engine/install/linux-postinstall.md) -- [Command line reference](../../reference/index.md) -- [Compose file reference](../compose-file/index.md) -- [Sample apps with Compose](../samples-for-compose.md) diff --git a/compose/install/other.md b/compose/install/other.md index 63c7e29285..d3c38aaf93 100644 --- a/compose/install/other.md +++ b/compose/install/other.md @@ -2,17 +2,16 @@ description: How to install Docker Compose - Other Scenarios keywords: compose, orchestration, install, installation, docker, documentation toc_max: 3 - -title: Other install Scenarios +title: Install the Compose standalone --- -## Install Compose Standalone +On this page you can find instructions on how to install the Compose standalone on Linux or Windows Server, from the command line. ### On Linux > **Compose standalone** > -> Note that Compose standalone uses the _dash compose_ syntax instead of current's standard syntax (_space compose_). -For example: type `docker-compose up` when using Compose standalone, instead of `docker compose up`. +> Note that Compose standalone uses the `-compose` syntax instead of the current standard syntax `compose`. +>For example type `docker-compose up` when using Compose standalone, instead of `docker compose up`. 1. To download and install Compose standalone, run: ```console @@ -35,7 +34,7 @@ For example: type `docker-compose up` when using Compose standalone, instead of Follow these instructions if you are running the Docker daemon and client directly on Microsoft Windows Server and want to install Docker Compose. -1. Run a PowerShell as an administrator. +1. Run PowerShell as an administrator. When asked if you want to allow this app to make changes to your device, click **Yes** in order to proceed with the installation. 2. GitHub now requires TLS1.2. In PowerShell, run the following: From f2403b64b01e8d984a693740107a5ef878f95eb1 Mon Sep 17 00:00:00 2001 From: glours Date: Fri, 21 Oct 2022 14:59:58 +0000 Subject: [PATCH 24/54] Update Compose reference API to v2.12.1 Signed-off-by: GitHub --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 4ee496c47c..b3a2622d13 100644 --- a/_config.yml +++ b/_config.yml @@ -41,7 +41,7 @@ exclude: latest_engine_api_version: "1.41" docker_ce_version: "20.10" compose_v1_version: "1.29.2" -compose_version: "v2.12.0" +compose_version: "v2.12.1" compose_file_v3: "3.9" compose_file_v2: "2.4" machine_version: "0.16.0" From 6fa06e8174a405e8028b17fa8579f265c4cbb5af Mon Sep 17 00:00:00 2001 From: craig-osterhout Date: Fri, 21 Oct 2022 09:03:57 -0700 Subject: [PATCH 25/54] remove $ prompt from code copy --- assets/js/copy.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/js/copy.js b/assets/js/copy.js index 70c71076fc..4ca8bf561b 100644 --- a/assets/js/copy.js +++ b/assets/js/copy.js @@ -15,7 +15,9 @@ function copyCodeBlock(event) { const copyButton = event.currentTarget const codeBlock = copyButton.parentElement.querySelector("pre.highlight code") const code = codeBlock.innerText.trim() - window.navigator.clipboard.writeText(code) + // remove "$ " prompt at start of lines in code + const strippedCode = code.replace(/^[\s]?\$\s+/gm, "") + window.navigator.clipboard.writeText(strippedCode) // change the button text temporarily copyButton.textContent = "Copied!" From a6ca0f3a42ef6c06c5d52070fa97dbd1aecfaf9f Mon Sep 17 00:00:00 2001 From: Christian Dupuis Date: Fri, 21 Oct 2022 19:19:05 +0200 Subject: [PATCH 26/54] Add CVE-2022-42889 and some cleanup (#15916) * Add CVE-2022-42889 and some cleanup * Update index.md * Apply suggestions from code review Co-authored-by: Usha Mandya <47779042+usha-mandya@users.noreply.github.com> --- security/index.md | 66 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/security/index.md b/security/index.md index 5496827eb7..738d2ba927 100644 --- a/security/index.md +++ b/security/index.md @@ -1,14 +1,66 @@ --- description: Docker security announcements -keywords: Docker, CVEs, security, notice, Log4J 2, Log4Shell, announcements +keywords: Docker, CVEs, security, notice, Log4J 2, Log4Shell, Text4Shell, announcements title: Docker security announcements toc_min: 1 toc_max: 2 --- +## Text4Shell CVE-2022-42889 + +[CVE-2022-42889](https://nvd.nist.gov/vuln/detail/CVE-2022-42889){:target="_blank" rel="noopener" class="_"} has been discovered in the popular Apache Commons Text library. Versions of this library up to but not including 1.10.0 are affected by this vulnerability. + +We strongly encourage you to update to the latest version of [Apache Commons Text](https://commons.apache.org/proper/commons-text/download_text.cgi){:target="_blank" rel="noopener" class="_"}. + +### Scan images using the `docker scan` command + +`docker scan` as shipped with latest versions of Docker Desktop detects the Text4Shell CVE-2022-42889 vulnerability. + +If an image is vulnerable to CVE-2022-42889, the output of `docker scan` will contain the following text: + +``` + Upgrade org.apache.commons:commons-text@1.9 to org.apache.commons:commons-text@1.10.0 to fix + ✗ Arbitrary Code Execution (new) [High Severity][https://snyk.io/vuln/SNYK-JAVA-ORGAPACHECOMMONS-3043138] in org.apache.commons:commons-text@1.9 + introduced by org.apache.commons:commons-text@1.9 +``` + +### Scan images on Docker Hub + +Docker Hub security scans triggered **after 1200 UTC 21 October 2021** are now +correctly identifying the Text4Shell CVE. Scans before this date **do not** +currently reflect the status of this vulnerability. Therefore, we recommend that +you trigger scans by pushing new images to Docker Hub to view the status of +the Text4Shell CVE in the vulnerability report. For detailed instructions, see [Scan images on Docker Hub](../docker-hub/vulnerability-scanning.md). + +### Docker Official Images impacted by CVE-2022-42889 + +> **Important** +> +> We will be updating this section with the latest information. We recommend +> that you revisit this section to view the list of affected images and update +> images to the patched version as soon as possible to remediate the issue. +{: .important} + +A number of [Docker Official Images](../docker-hub/official_images.md) contain the vulnerable versions of +Apache Commons Text. The following table lists Docker Official Images that +may contain the vulnerable versions of Apache Commons Text. We are working on updating +Apache Commons Text in these images to the latest version. Some of these images may not be +vulnerable for other reasons. We recommend that you also review the guidelines published on the upstream websites. + +| Repository | Patched version | Additional documentation | +|:------------------------|:-----------------------|:-----------------------| +| [bonita](https://hub.docker.com/_/bonita) | | In progress | +| [Couchbase](https://hub.docker.com/_/couchbase) | | In progress | +| [Geonetwork](https://hub.docker.com/_/geonetwork) | | In progress | +| [neo4j](https://hub.docker.com/_/neo4j) | | In progress | +| [sliverpeas](https://hub.docker.com/_/sliverpeas) | | In progress | +| [solr](https://hub.docker.com/_/solr) | | In progress | +| [xwiki](https://hub.docker.com/_/xwiki) | | In progress | + + ## CVE-2021-45449 -Docker Desktop version 4.3.0 and 4.3.1 has a bug that may log sensitive information (access token or password) on the user's machine during login. This only affects users if they are on Docker Desktop 4.3.0, 4.3.1 and the user has logged in while on 4.3.0, 4.3.1. Gaining access to this data would require having access to the user’s local files. This vulnerability has been fixed in version 4.3.2 or higher. Users should update to this version and may want to update their password. Users should not send local log files to anyone. Users can manually delete their log files, they can be located in the following folder: `~/Library/Containers/com.docker.docker/Data/log/host/` on Mac, and in `C:\Users\\AppData\Roaming\Docker\log\host\` on Windows. When a user installs 4.3.2 or higher, we will delete their local log files, so there is no risk of leakage after an update. +Docker Desktop versions 4.3.0 and 4.3.1 have a bug that may log sensitive information (access token or password) on the user's machine during login. This only affects users if they are on Docker Desktop 4.3.0, 4.3.1 and the user has logged in while on 4.3.0, 4.3.1. Gaining access to this data would require having access to the user’s local files. This vulnerability has been fixed in version 4.3.2 or higher. Users should update to version 4.3.2 and may want to update their password. Users should not send local log files to anyone. Users can manually delete their log files, they can be located in the following folder: `~/Library/Containers/com.docker.docker/Data/log/host/` on Mac, and in `C:\Users\\AppData\Roaming\Docker\log\host\` on Windows. When a user installs 4.3.2 or higher, we will delete their local log files, so there is no risk of leakage after an update. Additionally, these logs may be included when users upload diagnostics, meaning access tokens and passwords might have been shared with Docker. This only affects users if they are on Docker Desktop 4.3.0, 4.3.1, and the user has logged in while on 4.3.0, 4.3.1 and have gone through the process of submitting diagnostics to Docker. Only Docker support Engineers working on an active support case could have access to the diagnostic files, minimizing leakage risk from these files. We have deleted all potentially sensitive diagnostic files from our data storage and will continue to delete diagnostics reported from the affected versions on an ongoing basis. For detailed information, see [CVE-2021-45449](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45449){: target="_blank" rel="noopener" class="_"}. @@ -46,18 +98,18 @@ target="_blank" rel="noopener" class="_"}, the fix made in version 2.15.0 was ### Scan images using the `docker scan` command -The configuration for the `docker scan` command previously shipped in Docker +The configurations for the `docker scan` command previously shipped in Docker Desktop versions 4.3.0 and earlier unfortunately do not detect this vulnerability on scans. You must update your Docker Desktop installation to -4.3.1 or higher to fix this issue. For detailed instructions, see [Scan images for Log4j2 CVE](../engine/scan/index.md#scan-images-for-log4j-2-cve). +4.3.1 or higher to fix this issue. For detailed instructions, see [Scan images for Log4j 2 CVE](../engine/scan/index.md#scan-images-for-log4j-2-cve). ### Scan images on Docker Hub Docker Hub security scans triggered **after 1700 UTC 13 December 2021** are now -correctly identifying the Log4j2 CVE. Scans before this date **do not** +correctly identifying the Log4j 2 CVEs. Scans before this date **do not** currently reflect the status of this vulnerability. Therefore, we recommend that -you trigger scans by pushing the image to Docker Hub to view the status of -Log4j2 CVE in the vulnerability report. For detailed instructions, see [Scan images on Docker Hub](../docker-hub/vulnerability-scanning.md). +you trigger scans by pushing new images to Docker Hub to view the status of +Log4j 2 CVE in the vulnerability report. For detailed instructions, see [Scan images on Docker Hub](../docker-hub/vulnerability-scanning.md). ## Docker Official Images impacted by Log4j 2 CVE From df2e963c0a0a195a05fe965b2c9c05dc891cf202 Mon Sep 17 00:00:00 2001 From: milas Date: Fri, 21 Oct 2022 20:31:55 +0000 Subject: [PATCH 27/54] Update Compose reference API to v2.12.2 Signed-off-by: GitHub --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index b3a2622d13..361145f38a 100644 --- a/_config.yml +++ b/_config.yml @@ -41,7 +41,7 @@ exclude: latest_engine_api_version: "1.41" docker_ce_version: "20.10" compose_v1_version: "1.29.2" -compose_version: "v2.12.1" +compose_version: "v2.12.2" compose_file_v3: "3.9" compose_file_v2: "2.4" machine_version: "0.16.0" From f01d1bc73972fec228c72ee3bf920990bdb0fb54 Mon Sep 17 00:00:00 2001 From: Craig Osterhout <103533812+craig-osterhout@users.noreply.github.com> Date: Fri, 21 Oct 2022 14:24:10 -0700 Subject: [PATCH 28/54] [Issue 15934] Update get started dockerfile steps (#15944) * update dockerfile steps --- get-started/02_our_app.md | 45 ++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/get-started/02_our_app.md b/get-started/02_our_app.md index 79fc922e50..0508f3d6ad 100644 --- a/get-started/02_our_app.md +++ b/get-started/02_our_app.md @@ -35,12 +35,40 @@ we have created a ZIP file containing the application. ## Build the app's container image -In order to build the application, we need to use a `Dockerfile`. A -Dockerfile is simply a text-based script of instructions that is used to -create a container image. If you've created Dockerfiles before, you might -see a few flaws in the Dockerfile below. But, don't worry. We'll go over them. +In order to build the application, you'll need to use a `Dockerfile`. A +Dockerfile is simply a text-based file with no file extension. A Dockerfile contains a script of instructions that are used to create a container image. -1. In the `app` folder, the same location as the `package.json` file, create a file named `Dockerfile` with the following contents. +1. In the `app` folder, the same location as the `package.json` file, create a file named `Dockerfile`. You can use the following commands below to create a Dockerfile based on your operating system. + + +
    +
    + + In the terminal, run the following commands listed below. + + ```console + $ cd /path/to/app + $ touch Dockerfile + ``` + +
    +
    +
    + + In the Windows Command Prompt, run the following commands listed below. + + ```console + $ cd \path\to\app + $ type nul > Dockerfile + ``` +
    +
    +
    + +2. Add the following contents to the Dockerfile. If you've created Dockerfiles before, you might see a few flaws in the Dockerfile below. But, don't worry. We'll go over them. ```dockerfile # syntax=docker/dockerfile:1 @@ -52,10 +80,11 @@ see a few flaws in the Dockerfile below. But, don't worry. We'll go over them. CMD ["node", "src/index.js"] EXPOSE 3000 ``` + > **Note** + > + > Select an instruction in the Dockerfile example to learn more about the instruction. - Please check that the file `Dockerfile` has no file extension like `.txt`. Some editors may append this file extension automatically and this would result in an error in the next step. - -2. Open a terminal and go to the `app` directory with the `Dockerfile`. Now build the container image using the `docker build` command. +3. Open a terminal and go to the `app` directory with the `Dockerfile`. Now build the container image using the `docker build` command. ```console $ docker build -t getting-started . From 678d56c1e2c9896b71e2861b292ab9f4236859bf Mon Sep 17 00:00:00 2001 From: Pedram Ashofteh-Ardakani Date: Sat, 22 Oct 2022 01:17:24 +0330 Subject: [PATCH 29/54] Docs: update sample application initiation in venv (#15506) * Docs: update sample application initiation in venv Until now, readers would install 'Flask' on their main system python environment, freeze their entire packages, and grep only the 'Flask' package! So they would be missing all the other dependencies in their requirements file. With this commit, a better practice is followed. First, create a clean virtual environment, then install 'Flask' and freeze everything into the requirements file. Also, I recommend using 'python3 -m pip freeze' instead of 'pip3 freeze' while in the virtual environment. This is because sometimes hidden quirks of 'pip' will ignore the actiavted environment and freeze the entire python packages in the system (e.g. in ArchLinux). * Docs: update python sample testing application In the previous commit, I forgot to update the 'Test the application' section so that the users activate the virtual environment first. This commit fixes that. Co-authored-by: Stefan Scherer --- language/python/build-images.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/language/python/build-images.md b/language/python/build-images.md index 5d4c138d8d..ec9f38a393 100644 --- a/language/python/build-images.md +++ b/language/python/build-images.md @@ -28,9 +28,11 @@ Let’s create a simple Python application using the Flask framework that we’l ```console $ cd /path/to/python-docker -$ pip3 install Flask -$ pip3 freeze | grep Flask >> requirements.txt -$ touch app.py +$ python3 -m venv .venv +$ source .venv/bin/activate +(.venv) $ python3 -m pip install Flask +(.venv) $ python3 -m pip freeze > requirements.txt +(.venv) $ touch app.py ``` Now, let’s add some code to handle simple web requests. Open this working directory in your favorite IDE and enter the following code into the `app.py` file. @@ -49,7 +51,9 @@ def hello_world(): Let’s start our application and make sure it’s running properly. Open your terminal and navigate to the working directory you created. ```console -$ python3 -m flask run +$ cd /path/to/python-docker +$ source .venv/bin/activate +(.venv) $ python3 -m flask run ``` To test that the application is working properly, open a new browser and navigate to `http://localhost:5000`. From 278f5954d5fb8f6bed6a1bc1aa9030d2db8468f4 Mon Sep 17 00:00:00 2001 From: Andrei Silviu Dragnea Date: Sat, 22 Oct 2022 21:04:49 +0300 Subject: [PATCH 30/54] Document legacy build vs BuildKit differences (#15477) * Document Moby vs BuildKit differences * Apply suggestions from code review Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- build/building/multi-stage.md | 75 +++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/build/building/multi-stage.md b/build/building/multi-stage.md index d4fd77bb0a..577113b6f2 100644 --- a/build/building/multi-stage.md +++ b/build/building/multi-stage.md @@ -205,3 +205,78 @@ RUN g++ -o /binary source.cpp ## Version compatibility Multi-stage build syntax was introduced in Docker Engine 17.05. + +## Differences between legacy build and BuildKit + +The legacy Docker Engine builder processes all stages of a Dockerfile leading up to the selected `--target`. It will build a stage even if the selected target doesn't depend on that stage. + +BuildKit only builds the stages that the target stage depends on. + +For example, given the following Dockerfile: + +```dockerfile +# syntax=docker/dockerfile:1 +FROM ubuntu AS base +RUN echo "base" + +FROM base AS stage1 +RUN echo "stage1" + +FROM base AS stage2 +RUN echo "stage2" +``` + +With BuildKit enabled, building the `stage2` target in this Dockerfile means only `base` and `stage2` are processed. There is no dependency on `stage1`, so it's skipped. + +```console +$ DOCKER_BUILDKIT=1 docker build --no-cache -f Dockerfile --target stage2 . +[+] Building 0.4s (7/7) FINISHED + => [internal] load build definition from Dockerfile 0.0s + => => transferring dockerfile: 36B 0.0s + => [internal] load .dockerignore 0.0s + => => transferring context: 2B 0.0s + => [internal] load metadata for docker.io/library/ubuntu:latest 0.0s + => CACHED [base 1/2] FROM docker.io/library/ubuntu 0.0s + => [base 2/2] RUN echo "base" 0.1s + => [stage2 1/1] RUN echo "stage2" 0.2s + => exporting to image 0.0s + => => exporting layers 0.0s + => => writing image sha256:f55003b607cef37614f607f0728e6fd4d113a4bf7ef12210da338c716f2cfd15 0.0s +``` + +On the other hand, building the same target without BuildKit results in all stages being processed: + +```console +$ DOCKER_BUILDKIT=0 docker build --no-cache -f Dockerfile --target stage2 . +Sending build context to Docker daemon 219.1kB +Step 1/6 : FROM ubuntu AS base + ---> a7870fd478f4 +Step 2/6 : RUN echo "base" + ---> Running in e850d0e42eca +base +Removing intermediate container e850d0e42eca + ---> d9f69f23cac8 +Step 3/6 : FROM base AS stage1 + ---> d9f69f23cac8 +Step 4/6 : RUN echo "stage1" + ---> Running in 758ba6c1a9a3 +stage1 +Removing intermediate container 758ba6c1a9a3 + ---> 396baa55b8c3 +Step 5/6 : FROM base AS stage2 + ---> d9f69f23cac8 +Step 6/6 : RUN echo "stage2" + ---> Running in bbc025b93175 +stage2 +Removing intermediate container bbc025b93175 + ---> 09fc3770a9c4 +Successfully built 09fc3770a9c4 +``` + +`stage1` gets executed when BuildKit is disabled, even if `stage2` does not depend on it. + +BuildKit is enabled by default if you use Docker Desktop. + +Always run multi-stage builds with +[BuildKit enabled](/develop/develop-images/build_enhancements/) +for better performance. From 394d0488cdfe7272dff170765ab9b24a139056f6 Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Mon, 24 Oct 2022 05:41:13 -0400 Subject: [PATCH 31/54] Add documentation for Docker+Wasm (#15952) * Add documentation for Docker+Wasm * Fix issues discovered by linter * Adjust text at the beginning of the doc and link to the blog post --- _data/toc.yaml | 2 + desktop/wasm/index.md | 169 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 desktop/wasm/index.md diff --git a/_data/toc.yaml b/_data/toc.yaml index d8f4db2e9c..475b067dc9 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1379,6 +1379,8 @@ manuals: path: /desktop/extensions-sdk/dev/api/reference/README/ - path: /desktop/containerd/ title: Containerd Image Store (Beta) + - path: /desktop/wasm/ + title: Wasm (Beta) - sectiontitle: FAQs section: - path: /desktop/faqs/general/ diff --git a/desktop/wasm/index.md b/desktop/wasm/index.md new file mode 100644 index 0000000000..5fe37ac0ac --- /dev/null +++ b/desktop/wasm/index.md @@ -0,0 +1,169 @@ +--- +title: Docker+Wasm (Beta) +description: How to use the Wasm integration in Docker Desktop +keywords: Docker, WebAssembly, wasm, containerd, engine +toc_max: 3 +--- + +This page provides information about the new ability to run Wasm applications alongside your Linux containers in Docker. + +To learn more about the launch and how it works, read [the launch blog post here](https://www.docker.com/blog/docker-wasm-technical-preview/). + +> **Beta** +> +> The Docker+Wasm feature is currently in [Beta](../../release-lifecycle.md/#beta). We recommend that you do not use this feature in production environments as this feature may change or be removed from future releases. + + +## Enabling the Docker+Wasm integration + +The Docker+Wasm integration currently requires a special build of Docker Desktop. + +- **Important note #1:** This is a technical preview build of Docker Desktop and things might not work as expected. Be sure to back up your containers and images before proceeding. +- **Important note #2:** This preview has the containerd image store enabled and cannot be disabled. If you’re not currently using the containerd image store, then pre-existing images and containers will be inaccessible. + +You can download the technical preview build of Docker Desktop here: + +- [macOS Apple Silicon](https://dockr.ly/3sf56vH) +- [macOS Intel](https://dockr.ly/3VF6uFB) +- [Windows AMD64](https://dockr.ly/3ShlsP0) +- Linux Arm64 ([deb](https://dockr.ly/3TDcjRV)) +- Linux AMD64 ([deb](https://dockr.ly/3TgpWH8), [rpm](https://dockr.ly/3eG6Mvp), [tar](https://dockr.ly/3yUhdCk)) + + +## Usage examples + +### Running a Wasm application with docker run + +``` +$ docker run -dp 8080:8080 \ + --name=wasm-example \ + --runtime=io.containerd.wasmedge.v1 \ + --platform=wasi/wasm32 \ + michaelirwin244/wasm-example +``` + +Note the addition of two additional flags to the run command: + +- **--runtime=io.containerd.wasmedge.v1** - This informs the Docker engine that we want to use the Wasm containerd shim instead of the standard Linux container runtime +- **--platform=wasi/wasm32** - This specifies the architecture of the image we want to use. By leveraging a Wasm architecture, we don’t need to build separate images for the different machine architectures. The Wasm runtime will do the final step of converting the Wasm binary to machine instructions. + +### Running a Wasm application with Docker Compose + +The same application can be run using the following Docker Compose file: + +```yaml +services: + app: + image: michaelirwin244/wasm-example + platform: wasi/wasm32 + runtime: io.container.wasmedge.v1 + ports: + - 8080:8080 +``` + +Then start the application using the normal Docker Compose commands: + +``` +docker compose up +``` + + +### Running a multi-service application with Wasm + +Networking works the same as you expect with Linux containers, giving you the flexibility to combine Wasm applications with other containerized workloads (such as a database) in a single application stack. + +In this example, the Wasm application will leverage a MariaDB database running in a container. + +1. Start by cloning the repository. + + ``` + $ git clone https://github.com/second-state/microservice-rust-mysql.git + Cloning into 'microservice-rust-mysql'... + remote: Enumerating objects: 75, done. + remote: Counting objects: 100% (75/75), done. + remote: Compressing objects: 100% (42/42), done. + remote: Total 75 (delta 29), reused 48 (delta 14), pack-reused 0 + Receiving objects: 100% (75/75), 19.09 KiB | 1.74 MiB/s, done. + Resolving deltas: 100% (29/29), done. + ``` + +2. Navigate into the cloned project and start the project using Docker Compose. + + ``` + $ cd microservice-rust-mysql + $ docker compose up + [+] Running 0/1 + ⠿ server Warning 0.4s + [+] Building 4.8s (13/15) + ... + microservice-rust-mysql-db-1 | 2022-10-19 19:54:45 0 [Note] mariadbd: ready for connections. + microservice-rust-mysql-db-1 | Version: '10.9.3-MariaDB-1:10.9.3+maria~ubu2204' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution + ``` + +3. In another terminal, we can see the Wasm image that was created. + + ``` + $ docker images + REPOSITORY TAG IMAGE ID CREATED SIZE + server latest 2c798ddecfa1 2 minutes ago 3MB + ``` + +4. Inspecting the image will show the image has a `wasi/wasm32` platform (combination of Os and Architecture). + + ``` + $ docker image inspect server | grep -A 3 "Architecture" + "Architecture": "wasm32", + "Os": "wasi", + "Size": 3001146, + "VirtualSize": 3001146, + ``` + +5. Open the website at http://localhost:8090 and create a few sample orders. All of these are interacting with the Wasm server. + +6. When you're all done, tear everything down by hitting Ctrl+C in the terminal you launched the application. + + +### Building and pushing a Wasm module + +1. Create a Dockerfile that will build your Wasm application. This will vary depending on the language you are using. + +2. In a separate stage in your `Dockerfile`, extract the module and set it as the `ENTRYPOINT`. + + ``` + FROM scratch + COPY --from=build /build/hello_world.wasm /hello_world.wasm + ENTRYPOINT [ "hello_world.wasm" ] + ``` + +3. Build and push the image specifying the `wasi/wasm32` architecture. Buildx makes this easy to do in a single command. + + ``` + $ docker buildx build --platform wasi/wasm32 -t username/hello-world . + ... + => exporting to image 0.0s + => => exporting layers 0.0s + => => exporting manifest sha256:2ca02b5be86607511da8dc688234a5a00ab4d58294ab9f6beaba48ab3ba8de56 0.0s + => => exporting config sha256:a45b465c3b6760a1a9fd2eda9112bc7e3169c9722bf9e77cf8c20b37295f954b 0.0s + => => naming to docker.io/username/hello-world:latest 0.0s + => => unpacking to docker.io/username/hello-world:latest 0.0s + $ docker push username/hello-world + ``` + + +## Docker+Wasm Release Notes + +(2022-10-24) +Initial release + +### New +- Initial implementation of Wasm integration + +### Known issues +- Docker Compose may not exit cleanly when interrupted + - Workaround: Clean up `docker-compose` processes by sending them a SIGKILL (`killall -9 docker-compose`). +- Pushes to Hub might give an error stating `server message: insufficient_scope: authorization failed`, even after logging in using Docker Desktop + - Workaround: Run `docker login` in the CLI + +## Feedback + +Thanks for trying the new Docker+Wasm integration. We’d love to hear from you! Please feel free to give feedback or report any bugs you may find through the issues tracker on the [public roadmap item](https://github.com/docker/roadmap/issues/426){: target="_blank" rel="noopener" class="_"}. From 11c2274e5388a38d1334106c3820e62fe9046706 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Mon, 24 Oct 2022 11:52:12 +0100 Subject: [PATCH 32/54] wasm-patch (#15955) * wasm-patch * fix warning note --- desktop/wasm/index.md | 49 ++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/desktop/wasm/index.md b/desktop/wasm/index.md index 5fe37ac0ac..896c44f15d 100644 --- a/desktop/wasm/index.md +++ b/desktop/wasm/index.md @@ -14,14 +14,21 @@ To learn more about the launch and how it works, read [the launch blog post here > The Docker+Wasm feature is currently in [Beta](../../release-lifecycle.md/#beta). We recommend that you do not use this feature in production environments as this feature may change or be removed from future releases. -## Enabling the Docker+Wasm integration +## Enable the Docker+Wasm integration -The Docker+Wasm integration currently requires a special build of Docker Desktop. +The Docker+Wasm integration currently requires a technical preview build of Docker Desktop. -- **Important note #1:** This is a technical preview build of Docker Desktop and things might not work as expected. Be sure to back up your containers and images before proceeding. -- **Important note #2:** This preview has the containerd image store enabled and cannot be disabled. If you’re not currently using the containerd image store, then pre-existing images and containers will be inaccessible. +>**Warning** +> +> With the technical preview build of Docker Desktop, things might not work as expected. Be sure to back up your containers and images before proceeding. +{: .warning} -You can download the technical preview build of Docker Desktop here: +>**Important** +> +> The technical preview build enables the [Containerd Image Store](../containerd/index.md) feature. This cannot be disabled. If you’re not currently using the Containerd Image Store, then pre-existing images and containers will be inaccessible. +{: .important} + +Download the technical preview build of Docker Desktop: - [macOS Apple Silicon](https://dockr.ly/3sf56vH) - [macOS Intel](https://dockr.ly/3VF6uFB) @@ -29,10 +36,9 @@ You can download the technical preview build of Docker Desktop here: - Linux Arm64 ([deb](https://dockr.ly/3TDcjRV)) - Linux AMD64 ([deb](https://dockr.ly/3TgpWH8), [rpm](https://dockr.ly/3eG6Mvp), [tar](https://dockr.ly/3yUhdCk)) - ## Usage examples -### Running a Wasm application with docker run +### Running a Wasm application with `docker run` ``` $ docker run -dp 8080:8080 \ @@ -42,10 +48,10 @@ $ docker run -dp 8080:8080 \ michaelirwin244/wasm-example ``` -Note the addition of two additional flags to the run command: +Note the two additional flags to the run command: -- **--runtime=io.containerd.wasmedge.v1** - This informs the Docker engine that we want to use the Wasm containerd shim instead of the standard Linux container runtime -- **--platform=wasi/wasm32** - This specifies the architecture of the image we want to use. By leveraging a Wasm architecture, we don’t need to build separate images for the different machine architectures. The Wasm runtime will do the final step of converting the Wasm binary to machine instructions. +- `--runtime=io.containerd.wasmedge.v1`. This informs the Docker engine that you want to use the Wasm containerd shim instead of the standard Linux container runtime +- `--platform=wasi/wasm32`. This specifies the architecture of the image you want to use. By leveraging a Wasm architecture, you don’t need to build separate images for the different machine architectures. The Wasm runtime does the final step of converting the Wasm binary to machine instructions. ### Running a Wasm application with Docker Compose @@ -61,20 +67,19 @@ services: - 8080:8080 ``` -Then start the application using the normal Docker Compose commands: +Start the application using the normal Docker Compose commands: ``` docker compose up ``` - ### Running a multi-service application with Wasm -Networking works the same as you expect with Linux containers, giving you the flexibility to combine Wasm applications with other containerized workloads (such as a database) in a single application stack. +Networking works the same as you expect with Linux containers, giving you the flexibility to combine Wasm applications with other containerized workloads, such as a database, in a single application stack. -In this example, the Wasm application will leverage a MariaDB database running in a container. +In the following example, the Wasm application leverages a MariaDB database running in a container. -1. Start by cloning the repository. +1. Clone the repository. ``` $ git clone https://github.com/second-state/microservice-rust-mysql.git @@ -100,7 +105,7 @@ In this example, the Wasm application will leverage a MariaDB database running i microservice-rust-mysql-db-1 | Version: '10.9.3-MariaDB-1:10.9.3+maria~ubu2204' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution ``` -3. In another terminal, we can see the Wasm image that was created. + In another terminal, we can see the Wasm image that was created. ``` $ docker images @@ -108,7 +113,7 @@ In this example, the Wasm application will leverage a MariaDB database running i server latest 2c798ddecfa1 2 minutes ago 3MB ``` -4. Inspecting the image will show the image has a `wasi/wasm32` platform (combination of Os and Architecture). + Inspecting the image shows the image has a `wasi/wasm32` platform. A combination of Os and Architecture. ``` $ docker image inspect server | grep -A 3 "Architecture" @@ -118,14 +123,14 @@ In this example, the Wasm application will leverage a MariaDB database running i "VirtualSize": 3001146, ``` -5. Open the website at http://localhost:8090 and create a few sample orders. All of these are interacting with the Wasm server. +3. Open the website at http://localhost:8090 and create a few sample orders. All of these are interacting with the Wasm server. -6. When you're all done, tear everything down by hitting Ctrl+C in the terminal you launched the application. +4. When you're all done, tear everything down by hitting `Ctrl+C` in the terminal you launched the application. ### Building and pushing a Wasm module -1. Create a Dockerfile that will build your Wasm application. This will vary depending on the language you are using. +1. Create a Dockerfile that builds your Wasm application. This varies depending on the language you are using. 2. In a separate stage in your `Dockerfile`, extract the module and set it as the `ENTRYPOINT`. @@ -152,7 +157,7 @@ In this example, the Wasm application will leverage a MariaDB database running i ## Docker+Wasm Release Notes -(2022-10-24) +2022-10-24 Initial release ### New @@ -166,4 +171,4 @@ Initial release ## Feedback -Thanks for trying the new Docker+Wasm integration. We’d love to hear from you! Please feel free to give feedback or report any bugs you may find through the issues tracker on the [public roadmap item](https://github.com/docker/roadmap/issues/426){: target="_blank" rel="noopener" class="_"}. +Thanks for trying the new Docker+Wasm integration. Give feedback or report any bugs you may find through the issues tracker on the [public roadmap item](https://github.com/docker/roadmap/issues/426){: target="_blank" rel="noopener" class="_"}. From 51792606559a65e6f82b29257b8966ebc82f00c1 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Mon, 24 Oct 2022 13:19:07 +0100 Subject: [PATCH 33/54] fix release notes for containerd (#15956) --- desktop/containerd/index.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/desktop/containerd/index.md b/desktop/containerd/index.md index 561dd59740..e4de44f70a 100644 --- a/desktop/containerd/index.md +++ b/desktop/containerd/index.md @@ -209,42 +209,41 @@ View Tags on DockerHub to see multi-platform result: ## Containerd Image Store Release Notes -(2022-10-19) +### 2022-10-19 New commands and multiple bug fixes included with Docker Desktop 4.13.0. -### New +#### New * Added `docker diff` and `docker run --platform` support. -### Bug fixes +#### Bug fixes * Fixed a bug which caused Kubernetes not starting. * Fixed a bug which caused Kubernetes IN Docker (kind) not starting. * Fixed a bug which caused Dev Environments not working. * Fixed a bug which caused Insecure Registries not working. -### Known issues +#### Known issues * Listing images with `docker images` returns the error `content digest not found` on ARM machines after running or pulling an image with the `--platform` parameter. -(2022-09-01) +### 2022-09-01 The Containerd Image Store is shipped as a [Beta](../../release-lifecycle.md/#beta) feature on Docker Desktop 4.12.0. -### New +#### New Initial implementation of the Docker commands: `run`, `commit`, `build`, `push`, `load`, `search` and `save`. -### Known issues +#### Known issues * The Containerd Image Store feature requires Buildx version 0.9.0 or newer. + On Docker Desktop for Linux (DD4L), validate if your locally installed version meets this requirement. >**Note** > - > If an older version is installed, the Docker daemon will report an error: **Multiple platforms feature is currently not supported for docker driver. Please switch to a different driver**. + > If an older version is installed, the Docker daemon reports the following error **Multiple platforms feature is currently not supported for docker driver. Please switch to a different driver**. Install a newer version of Buildx following the instructions on [Docker Buildx Manual download](../../build/buildx/install/#manual-download). -* Containerd Image Store feature and Kubernetes cluster support in Docker Desktop 4.12.0 are incompatible at the moment. Disable the Containerd Image Store feature if you are using the Kubernetes from Docker Desktop. -* Local registry mirror configuration isn't implemented yet with the Containerd Image Store. Hence the `registry-mirrors` and `insecure-registries` aren't taken into account by the Docker daemon. +* Containerd Image Store feature and Kubernetes cluster support in Docker Desktop 4.12.0 are incompatible at the moment. Turn off the Containerd Image Store feature if you are using the Kubernetes from Docker Desktop. +* Local registry mirror configuration isn't implemented yet with the Containerd Image Store. The `registry-mirrors` and `insecure-registries` aren't taken into account by the Docker daemon. * The `reference` filter isn't implemented yet and will return the error `invalid filter 'reference'` when listing images. * Pulling an image may fail with the error `pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed`, in the situation where the image does not contain a manifest list. To workaround this issue run the `docker login` command and pull the image again. ## Feedback -Thanks for trying the new features available with `containerd`. -We’d love to hear from you! Please feel free to give feedback or report any bugs you may find through the issues tracker on the [feedback form](https://dockr.ly/3PODIhD){: target="_blank" rel="noopener" class="_"}. +Thanks for trying the new features available with `containerd`. Give feedback or report any bugs you may find through the issues tracker on the [feedback form](https://dockr.ly/3PODIhD){: target="_blank" rel="noopener" class="_"}. From aa60238970c0a0e2e5f187a41e930692fa21f376 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Mon, 24 Oct 2022 15:02:02 +0100 Subject: [PATCH 34/54] Contribute patch (#15959) * contribute-patch * guidance on UI content and brackets --- _data/toc.yaml | 2 ++ contribute/style/grammar.md | 3 +++ contribute/ui.md | 43 +++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 contribute/ui.md diff --git a/_data/toc.yaml b/_data/toc.yaml index 475b067dc9..d65db16266 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1832,6 +1832,8 @@ contribute: title: Voice and tone - path: /contribute/file-conventions/ title: Source file conventions + - path: /contribute/ui/ + title: UI elements in content - sectiontitle: Useful components section: - path: /contribute/components/accordions/ diff --git a/contribute/style/grammar.md b/contribute/style/grammar.md index 289b767ff3..060c3959d4 100644 --- a/contribute/style/grammar.md +++ b/contribute/style/grammar.md @@ -157,3 +157,6 @@ Version 4.8.2 - Avoid awkward doubling of vowels. For example ‘semi-independence*’,* or ‘re-elect’. - Prevent misreading of certain words. For example ‘Re-collect’ means to collect again; without a hyphen the word recollect has a different meaning. +### Parentheses + +Don't use parentheses in technical documentation. They can reduce the readability of a sentence. \ No newline at end of file diff --git a/contribute/ui.md b/contribute/ui.md new file mode 100644 index 0000000000..f8bd4ff7c4 --- /dev/null +++ b/contribute/ui.md @@ -0,0 +1,43 @@ +--- +title: UI elements in content +description: How to refer and interact with UI content +keywords: ui, contribute, style guide +--- + +This page contains information on how to write technical content that involves a user interface (UI). + +## Format names of UI elements + +Always bold UI elements when referring to them by name. + +This includes names for buttons, menus, dialogs, windows, list items, or any other feature on the page that has a visible name. + +Don't make an official feature name or product name bold, except when it directly refers to an element on the page that uses the name, such as a window title or button name. + +In most cases, follow the capitalization as it appears on the page. However, if labels are inconsistent or they're all uppercase, use sentence case. + +## Focus on the task + +When practical, state instructions in terms of what the user should accomplish, rather than focusing on the widgets and gestures. By avoiding reference to UI elements, you help the user understand the purpose of an instruction, and it can help future-proof procedures. + +|Correct |Incorrect | +|:-----------|:------------| +|Expand the **Advanced options** section | Select the zippy to expand the **Advanced options** section| + + +## Refer to UI elements +Don't use UI elements as if they were English verbs or nouns. + +|Correct |Incorrect | +|:-----------|:------------| +|In the **Name** field, enter an account name. | **Name** the account.| +|To save the settings, select **Save**.| **Save** the settings.| + +## Prepositions + +When documenting the UI, use the following prepositions. + +|Preposition |UI element | Example | +|:-----------|:------------|:-----------| +|in | dialogs
    fields
    lists
    menus
    panes
    windows
    | In the **Alert** dialog, select **OK**.
    In the **Name** field, enter `wsfc-1`.
    In the **Item** list, select **Desktop**.
    In the **File** menu, click **Tools**.
    In the **Metrics** pane, select **New**.
    In the **Task** window, select **Start**. | +| on |pages
    tabs
    toolbars | On the **Create an instance** page, select **Add**.
    On the **Edit** tab, select **Save**.
    On the **Dashboard toolbar**, select **Edit**.
    | From fabb408cce525b63f3d3742d2b0c731cced98a9e Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Mon, 24 Oct 2022 12:05:25 -0400 Subject: [PATCH 35/54] Wasm doc tweaks (#15961) * Update the Wasm docs to add a quick explainer for Wasm * Update links for Wasm preview downloads to use new vanity URLs --- desktop/wasm/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/desktop/wasm/index.md b/desktop/wasm/index.md index 896c44f15d..fb1cc09ef4 100644 --- a/desktop/wasm/index.md +++ b/desktop/wasm/index.md @@ -5,9 +5,9 @@ keywords: Docker, WebAssembly, wasm, containerd, engine toc_max: 3 --- -This page provides information about the new ability to run Wasm applications alongside your Linux containers in Docker. +Wasm (short for WebAssembly) is a faster, lighter alternative to the Linux & Windows containers you’re using in Docker today (with [some tradeoffs](https://www.docker.com/blog/docker-wasm-technical-preview/)). -To learn more about the launch and how it works, read [the launch blog post here](https://www.docker.com/blog/docker-wasm-technical-preview/). +This page provides information about the new ability to run Wasm applications alongside your Linux containers in Docker. To learn more about the launch and how the preview works, read [the launch blog post here](https://www.docker.com/blog/docker-wasm-technical-preview/). > **Beta** > @@ -30,11 +30,11 @@ The Docker+Wasm integration currently requires a technical preview build of Dock Download the technical preview build of Docker Desktop: -- [macOS Apple Silicon](https://dockr.ly/3sf56vH) -- [macOS Intel](https://dockr.ly/3VF6uFB) -- [Windows AMD64](https://dockr.ly/3ShlsP0) -- Linux Arm64 ([deb](https://dockr.ly/3TDcjRV)) -- Linux AMD64 ([deb](https://dockr.ly/3TgpWH8), [rpm](https://dockr.ly/3eG6Mvp), [tar](https://dockr.ly/3yUhdCk)) +- [macOS Apple Silicon](https://www.docker.com/download/wasm-preview/linuxamd64deb) +- [macOS Intel](https://www.docker.com/download/wasm-preview/linuxamd64deb) +- [Windows AMD64](https://www.docker.com/download/wasm-preview/linuxamd64deb) +- Linux Arm64 ([deb](https://www.docker.com/download/wasm-preview/linuxarm64deb)) +- Linux AMD64 ([deb](https://www.docker.com/download/wasm-preview/linuxamd64deb), [rpm](https://www.docker.com/download/wasm-preview/linuxamd64rpm), [tar](https://www.docker.com/download/wasm-preview/linuxamd64tarball)) ## Usage examples From c351dd73700f72a172e191b94bc6388486000a95 Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Tue, 25 Oct 2022 00:18:07 -0400 Subject: [PATCH 36/54] Fix links and add IDs for Wasm download links --- desktop/wasm/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/desktop/wasm/index.md b/desktop/wasm/index.md index fb1cc09ef4..be9e67a854 100644 --- a/desktop/wasm/index.md +++ b/desktop/wasm/index.md @@ -30,11 +30,11 @@ The Docker+Wasm integration currently requires a technical preview build of Dock Download the technical preview build of Docker Desktop: -- [macOS Apple Silicon](https://www.docker.com/download/wasm-preview/linuxamd64deb) -- [macOS Intel](https://www.docker.com/download/wasm-preview/linuxamd64deb) -- [Windows AMD64](https://www.docker.com/download/wasm-preview/linuxamd64deb) -- Linux Arm64 ([deb](https://www.docker.com/download/wasm-preview/linuxarm64deb)) -- Linux AMD64 ([deb](https://www.docker.com/download/wasm-preview/linuxamd64deb), [rpm](https://www.docker.com/download/wasm-preview/linuxamd64rpm), [tar](https://www.docker.com/download/wasm-preview/linuxamd64tarball)) +- [macOS Apple Silicon](https://www.docker.com/download/wasm-preview/macosxsilicon){: id="dkr_docs_dl_wasm_apple"} +- [macOS Intel](https://www.docker.com/download/wasm-preview/macintel){: id="dkr_docs_dl_wasm_intel"} +- [Windows AMD64](https://www.docker.com/download/wasm-preview/windowsamd64){: id="dkr_docs_dl_wasm_windows"} +- Linux Arm64 ([deb](https://www.docker.com/download/wasm-preview/linuxarm64deb){: id="dkr_docs_dl_wasm_arm64deb"}) +- Linux AMD64 ([deb](https://www.docker.com/download/wasm-preview/linuxamd64deb){: id="dkr_docs_dl_wasm_amd64deb"}, [rpm](https://www.docker.com/download/wasm-preview/linuxamd64rpm){: id="dkr_docs_dl_wasm_amd64rpm"}, [tar](https://www.docker.com/download/wasm-preview/linuxamd64tarball){: id="dkr_docs_dl_wasm_amd64tar"}) ## Usage examples From 1a0f070e2c2713dbc0126e54b18f3482a82f21b8 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 5 Sep 2022 16:33:09 +0200 Subject: [PATCH 37/54] jekyll: fix sitemap lastmod Signed-off-by: CrazyMax --- .dockerignore | 1 - Gemfile | 1 + Gemfile.lock | 5 +++++ _config.yml | 18 ++++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 756281bdfa..ac58861bc2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,4 @@ .DS_Store -.git .github .gitignore .idea diff --git a/Gemfile b/Gemfile index 2bfc166336..570ce5108c 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,7 @@ gem 'wdm', '>= 0.1.0' if Gem.win_platform? gem 'jekyll', '4.2.2' group :jekyll_plugins do + gem 'jekyll-last-modified-at' gem 'jekyll-redirect-from' gem 'jekyll-relative-links' gem 'jekyll-sitemap' diff --git a/Gemfile.lock b/Gemfile.lock index ceb17254ed..64efa9a05c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -45,6 +45,9 @@ GEM rouge (~> 3.0) safe_yaml (~> 1.0) terminal-table (~> 2.0) + jekyll-last-modified-at (1.3.0) + jekyll (>= 3.7, < 5.0) + posix-spawn (~> 0.3.9) jekyll-redirect-from (0.16.0) jekyll (>= 3.3, < 5.0) jekyll-relative-links (0.6.1) @@ -88,6 +91,7 @@ GEM parallel (1.22.1) pathutil (0.16.2) forwardable-extended (~> 2.6) + posix-spawn (0.3.15) public_suffix (4.0.7) racc (1.6.0) rainbow (3.1.1) @@ -118,6 +122,7 @@ DEPENDENCIES front_matter_parser (= 1.0.1) html-proofer (= 3.19.4) jekyll (= 4.2.2) + jekyll-last-modified-at jekyll-redirect-from jekyll-relative-links jekyll-sitemap diff --git a/_config.yml b/_config.yml index 361145f38a..9e976ef856 100644 --- a/_config.yml +++ b/_config.yml @@ -102,6 +102,24 @@ defaults: toc_min: 2 toc_max: 4 + # Exclude from sitemap + - scope: + path: "assets/**" + values: + sitemap: false + - scope: + path: "**/nav.html" + values: + sitemap: false + - scope: + path: "google*.html" + values: + sitemap: false + - scope: + path: "**/*.pdf" + values: + sitemap: false + # Set the correct edit-URL for some local and remote resources. We usually don't create a direct # edit link for these, and instead point to the directory that contains the file. - scope: From 8b3e4ea76d6008511f7032746c2a61913801c3bc Mon Sep 17 00:00:00 2001 From: Freddy Grande Date: Tue, 25 Oct 2022 19:52:40 +1000 Subject: [PATCH 38/54] Fixing typo (#15882) "proceeded" used instead of "preceded" --- compose/env-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose/env-file.md b/compose/env-file.md index 599411742e..8c08421d67 100644 --- a/compose/env-file.md +++ b/compose/env-file.md @@ -14,7 +14,7 @@ The following syntax rules apply to environment files: - `VAR="VAL"` -> `VAL` - `VAR='VAL'` -> `VAL` - Lines beginning with `#` are processed as comments and ignored. -- Inline comments for unquoted values must be proceeded with a space. +- Inline comments for unquoted values must be preceded with a space. - `VAR=VAL # comment` -> `VAL` - `VAR=VAL# not a comment` -> `VAL# not a comment` - Inline comments for quoted values must follow the closing quote. From dceacd803a7b3a1158082a1debf062657c7219cf Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Tue, 25 Oct 2022 12:13:33 +0100 Subject: [PATCH 39/54] a less jarring banner image (#15968) --- assets/images/hardened-desktop.PNG | Bin 82606 -> 99020 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/images/hardened-desktop.PNG b/assets/images/hardened-desktop.PNG index f8984a0b62aa1ba0b23a3eeffee068a92de84b6a..27b7419fea3f4860266c00e8ea70ad3e2681c364 100644 GIT binary patch literal 99020 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
  • 8wue%Or-?1S?yJ{2E+X;ThJ@xLQ4*vr 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 Date: Tue, 25 Oct 2022 13:14:16 +0200 Subject: [PATCH 40/54] dockerfile ref: use custom ref to fix links issue (#15972) Signed-off-by: CrazyMax Signed-off-by: CrazyMax Co-authored-by: CrazyMax --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 361145f38a..a0eb6a01bd 100644 --- a/_config.yml +++ b/_config.yml @@ -190,7 +190,7 @@ fetch-remote: - repo: "https://github.com/moby/buildkit" default_branch: "master" - ref: "master" + ref: "8bc51649bc7e712a8e2ff90412f48fdc35f602a9" paths: - dest: "engine/reference/builder.md" src: From 71a537d3da9487d9f5a757d485554551b6ade4bf Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 25 Oct 2022 19:40:05 +0200 Subject: [PATCH 41/54] build: buildkit section Signed-off-by: CrazyMax --- _config.yml | 2 +- _data/toc.yaml | 6 ++ build/buildkit/dockerfile-frontend.md | 102 ++++++++++++++++++++++++++ build/buildkit/index.md | 65 ++++++++++++++++ build/images/buildkit-dag.svg | 74 +++++++++++++++++++ build/index.md | 36 ++++----- 6 files changed, 264 insertions(+), 21 deletions(-) create mode 100644 build/buildkit/dockerfile-frontend.md create mode 100644 build/buildkit/index.md create mode 100644 build/images/buildkit-dag.svg diff --git a/_config.yml b/_config.yml index a0eb6a01bd..361145f38a 100644 --- a/_config.yml +++ b/_config.yml @@ -190,7 +190,7 @@ fetch-remote: - repo: "https://github.com/moby/buildkit" default_branch: "master" - ref: "8bc51649bc7e712a8e2ff90412f48fdc35f602a9" + ref: "master" paths: - dest: "engine/reference/builder.md" src: diff --git a/_data/toc.yaml b/_data/toc.yaml index d65db16266..70f6b42ecd 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1543,6 +1543,12 @@ manuals: title: Build contexts and linking targets - path: /build/customize/bake/compose-file/ title: Building from Compose file + - sectiontitle: BuildKit + section: + - path: /build/buildkit/ + title: Overview + - path: /build/buildkit/dockerfile-frontend/ + title: Custom Dockerfile syntax - sectiontitle: Buildx section: - path: /build/buildx/install/ diff --git a/build/buildkit/dockerfile-frontend.md b/build/buildkit/dockerfile-frontend.md new file mode 100644 index 0000000000..42d6b080c0 --- /dev/null +++ b/build/buildkit/dockerfile-frontend.md @@ -0,0 +1,102 @@ +--- +title: Custom Dockerfile syntax +keywords: build, buildkit, dockerfile, frontend +--- + +## Dockerfile frontend + +BuildKit supports loading frontends dynamically from container images. To use +an external Dockerfile frontend, the first line of your [Dockerfile](../../engine/reference/builder.md) +needs to set the [`syntax` directive](../../engine/reference/builder.md#syntax) +pointing to the specific image you want to use: + +```dockerfile +# syntax=[remote image reference] +``` + +For example: + +```dockerfile +# syntax=docker/dockerfile:1 +# syntax=docker.io/docker/dockerfile:1 +# syntax=example.com/user/repo:tag@sha256:abcdef... +``` + +This defines the location of the Dockerfile syntax that is used to build the +Dockerfile. The BuildKit backend allows seamlessly using external +implementations that are distributed as Docker images and execute inside a +container sandbox environment. + +Custom Dockerfile implementations allow you to: + +- Automatically get bugfixes without updating the Docker daemon +- Make sure all users are using the same implementation to build your Dockerfile +- Use the latest features without updating the Docker daemon +- Try out new features or third-party features before they are integrated in the Docker daemon +- Use [alternative build definitions, or create your own](https://github.com/moby/buildkit#exploring-llb){:target="_blank" rel="noopener" class="_"} + +> **Note** +> +> BuildKit also ships with a built-in Dockerfile frontend, but it's recommended +> to use an external image to make sure that all users use the same version on +> the builder and to pick up bugfixes automatically without waiting for a new +> version of BuildKit or Docker Engine. + +## Official releases + +Docker distributes official versions of the images that can be used for building +Dockerfiles under `docker/dockerfile` repository on Docker Hub. There are two +channels where new images are released: `stable` and `labs`. + +### Stable channel + +The `stable` channel follows [semantic versioning](https://semver.org){:target="_blank" rel="noopener" class="_"}. +For example: + +- `docker/dockerfile:1` - kept updated with the latest `1.x.x` minor _and_ patch + release. +- `docker/dockerfile:1.2` - kept updated with the latest `1.2.x` patch release, + and stops receiving updates once version `1.3.0` is released. +- `docker/dockerfile:1.2.1` - immutable: never updated. + +We recommend using `docker/dockerfile:1`, which always points to the latest +stable release of the version 1 syntax, and receives both "minor" and "patch" +updates for the version 1 release cycle. BuildKit automatically checks for +updates of the syntax when performing a build, making sure you are using the +most current version. + +If a specific version is used, such as `1.2` or `1.2.1`, the Dockerfile needs +to be updated manually to continue receiving bugfixes and new features. Old +versions of the Dockerfile remain compatible with the new versions of the +builder. + +### Labs channel + +The `labs` channel provides early access to Dockerfile features that are not yet +available in the `stable` channel. `labs` images are released at the same time +as stable releases, and follow the same version pattern, but use the `-labs` +suffix, for example: + +- `docker/dockerfile:labs` - latest release on `labs` channel. +- `docker/dockerfile:1-labs` - same as `dockerfile:1`, with experimental + features enabled. +- `docker/dockerfile:1.2-labs` - same as `dockerfile:1.2`, with experimental + features enabled. +- `docker/dockerfile:1.2.1-labs` - immutable: never updated. Same as + `dockerfile:1.2.1`, with experimental features enabled. + +Choose a channel that best fits your needs. If you want to benefit from +new features, use the `labs` channel. Images in the `labs` channel contain +all the features in the `stable` channel, plus early access features. +Stable features in the `labs` channel follow +[semantic versioning](https://semver.org){:target="_blank" rel="noopener" class="_"}, +but early access features don't, and newer releases may not be backwards compatible. +Pin the version to avoid having to deal with breaking changes. + +## Other resources + +For documentation on "labs" features, master builds, and nightly feature +releases, refer to the description in [the BuildKit source repository on GitHub](https://github.com/moby/buildkit/blob/master/README.md){:target="_blank" rel="noopener" class="_"}. +For a full list of available images, visit the [`docker/dockerfile` repository on Docker Hub](https://hub.docker.com/r/docker/dockerfile){:target="_blank" rel="noopener" class="_"}, +and the [`docker/dockerfile-upstream` repository on Docker Hub](https://hub.docker.com/r/docker/dockerfile-upstream){:target="_blank" rel="noopener" class="_"} +for development builds. diff --git a/build/buildkit/index.md b/build/buildkit/index.md new file mode 100644 index 0000000000..26879ad5e8 --- /dev/null +++ b/build/buildkit/index.md @@ -0,0 +1,65 @@ +--- +title: BuildKit +description: Introduction and overview of BuildKit +keywords: build, buildkit +--- + +## Overview + +[BuildKit](https://github.com/moby/buildkit){:target="_blank" rel="noopener" class="_"} +is an improved backend to replace the legacy builder. It comes with new and much +improved functionality for improving your builds' performance and the +reusability of your Dockerfiles. It also introduces support for handling more +complex scenarios: + +- Detect and skip executing unused build stages +- Parallelize building independent build stages +- Incrementally transfer only the changed files in your build context between builds +- Detect and skip transferring unused files in your build context +- Use [Dockerfile frontend](dockerfile-frontend.md) implementations with many new features +- Avoid side effects with rest of the API (intermediate images and containers) +- Prioritize your build cache for automatic pruning + +Apart from many new features, the main areas BuildKit improves on the current +experience are performance, storage management, and extensibility. From the +performance side, a significant update is a new fully concurrent build graph +solver. It can run build steps in parallel when possible and optimize out +commands that don't have an impact on the final result. We have also optimized +the access to the local source files. By tracking only the updates made to these +files between repeated build invocations, there is no need to wait for local +files to be read or uploaded before the work can begin. + +## LLB + +At the core of BuildKit is a [Low-Level Build (LLB)](https://github.com/moby/buildkit#exploring-llb){:target="_blank" rel="noopener" class="_"} +definition format. LLB is an intermediate binary format that allows developers +to extend BuildKit. LLB defines a content-addressable dependency graph that can +be used to put together very complex build definitions. It also supports +features not exposed in Dockerfiles, like direct data mounting and nested +invocation. + +![Directed acyclic graph (DAG)](../images/buildkit-dag.svg){:class="invertible" style="width:60%"} + +Everything about execution and caching of your builds is defined in LLB. The +caching model is entirely rewritten compared to the legacy builder. Rather than +using heuristics to compare images, LLB directly tracks the checksums of build +graphs and content mounted to specific operations. This makes it much faster, +more precise, and portable. The build cache can even be exported to a registry, +where it can be pulled on-demand by subsequent invocations on any host. + +LLB can be generated directly using a [golang client package](https://pkg.go.dev/github.com/moby/buildkit/client/llb) +that allows defining the relationships between your build operations using Go +language primitives. This gives you full power to run anything you can imagine, +but will probably not be how most people will define their builds. Instead, +most users would use a frontend component, or LLB nested invocation, to run +a prepared set of build steps. + +## Frontend + +A frontend is a component that takes a human-readable +build format and converts it to LLB so BuildKit can execute it. Frontends can +be distributed as images, and the user can target a specific version of a +frontend that is guaranteed to work for the features used by their definition. + +For example, to build a [Dockerfile](../../engine/reference/builder.md) with +BuildKit, you would [use an external Dockerfile frontend](dockerfile-frontend.md). diff --git a/build/images/buildkit-dag.svg b/build/images/buildkit-dag.svg new file mode 100644 index 0000000000..ead20f9d9e --- /dev/null +++ b/build/images/buildkit-dag.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/index.md b/build/index.md index 2d4f917864..195eeaa916 100644 --- a/build/index.md +++ b/build/index.md @@ -20,29 +20,24 @@ and tools. The most common method of executing a build is by issuing a sends the request to Docker Engine which, in turn, executes your build. There are now two components in Engine that can be used to build an image. -Starting with the [18.09 release](../engine/release-notes/18.09.md#18090), Engine is -shipped with Moby [BuildKit](https://github.com/moby/buildkit){:target="_blank" rel="noopener" class="_"}, -the new component for executing your builds by default. - -BuildKit is the backend evolution from the Legacy Builder, it comes with new -and much improved functionality that can be powerful tools for improving your -builds' performance or reusability of your Dockerfiles, and it also introduces -support for complex scenarios. +Starting with the [18.09 release](../engine/release-notes/18.09.md#18090), +Engine is shipped with Moby [BuildKit](buildkit/index.md), the new component for +executing your builds by default. The new client [Docker Buildx](https://github.com/docker/buildx){:target="_blank" rel="noopener" class="_"}, is a CLI plugin that extends the docker command with the full support of the -features provided by BuildKit builder toolkit. `docker buildx build` provides -the same user experience as `docker build` with many new features like creating -scoped builder instances, building against multiple nodes concurrently, outputs -configuration, inline build caching, and specifying target platform. In -addition, Buildx also supports new features that are not yet available for -regular `docker build` like building manifest lists, distributed caching, and -exporting build results to OCI image tarballs. +features provided by [BuildKit](buildkit/index.md) builder toolkit. [`docker buildx build` command](../engine/reference/commandline/buildx_build.md) +provides the same user experience as `docker build` with many new features like +creating scoped [builder instances](building/drivers/index.md), building +against multiple nodes concurrently, outputs configuration, inline [build caching](building/cache/index.md), +and specifying target platform. In addition, Buildx also supports new features +that are not yet available for regular `docker build` like building manifest +lists, distributed caching, and exporting build results to OCI image tarballs. Docker Build is way more than a simple build command and is not only about packaging your code, it's a whole ecosystem of tools and features that support not only common workflow tasks but also provides support for more complex and -advanced scenarios: +advanced scenarios. ## Building your images @@ -114,13 +109,14 @@ to be built concurrently as part of a single request: [High-level builds with Bake](customize/bake/index.md){: .button .outline-btn } -## Extending BuildKit +## BuildKit -### Custom syntax on Dockerfile +### Custom Dockerfile syntax Use experimental versions of the Dockerfile frontend, or even just bring your -own to BuildKit using the power of custom frontends. See also the -[Syntax directive](../engine/reference/builder.md#syntax). +own to BuildKit using the power of custom frontends. + +[Custom Dockerfile syntax](buildkit/dockerfile-frontend.md){: .button .outline-btn } ### Configure BuildKit From 271f8c3de5d37476b063521b28cf7343d0ea6a85 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 24 Oct 2022 21:12:12 +0200 Subject: [PATCH 42/54] build: merge build enhancements page in build section Signed-off-by: CrazyMax --- _data/toc.yaml | 2 - _includes/guides/enable-buildkit.md | 30 -- build/buildkit/index.md | 47 ++- build/index.md | 1 + desktop/faqs/general.md | 4 +- develop/develop-images/build_enhancements.md | 284 ------------------- docker-hub/builds/index.md | 2 +- go/buildkit.md | 4 +- language/index.md | 2 +- language/java/build-images.md | 7 +- language/nodejs/build-images.md | 7 +- language/python/build-images.md | 7 +- storage/storagedriver/index.md | 2 +- 13 files changed, 63 insertions(+), 336 deletions(-) delete mode 100644 _includes/guides/enable-buildkit.md delete mode 100644 develop/develop-images/build_enhancements.md diff --git a/_data/toc.yaml b/_data/toc.yaml index 70f6b42ecd..d0f0713df1 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -125,8 +125,6 @@ guides: section: - path: /develop/develop-images/dockerfile_best-practices/ title: Dockerfile best practices - - path: /develop/develop-images/build_enhancements/ - title: Build images with BuildKit - path: /develop/develop-images/image_management/ title: Manage images - path: /develop/develop-images/baseimages/ diff --git a/_includes/guides/enable-buildkit.md b/_includes/guides/enable-buildkit.md deleted file mode 100644 index c69911e86c..0000000000 --- a/_includes/guides/enable-buildkit.md +++ /dev/null @@ -1,30 +0,0 @@ - - -### Enable BuildKit - -Before we start building images, ensure you have enabled BuildKit on your machine. -BuildKit allows you to build Docker images efficiently. For more information, -see [Building images with BuildKit](/develop/develop-images/build_enhancements/). - -BuildKit is enabled by default for all users on Docker Desktop. If you have -installed Docker Desktop, you don't have to manually enable BuildKit. If you are -running Docker on Linux, you can enable BuildKit either by using an environment -variable or by making BuildKit the default setting. - -To set the BuildKit environment variable when running the `docker build` command, -run: - -```console -$ DOCKER_BUILDKIT=1 docker build . -``` - -To enable docker BuildKit by default, set daemon configuration in `/etc/docker/daemon.json` feature to `true` and restart the daemon. -If the `daemon.json` file doesn't exist, create new file called `daemon.json` and then add the following to the file. - -```json -{ - "features":{"buildkit" : true} -} -``` - -Restart the Docker daemon. diff --git a/build/buildkit/index.md b/build/buildkit/index.md index 26879ad5e8..f4cf766554 100644 --- a/build/buildkit/index.md +++ b/build/buildkit/index.md @@ -56,10 +56,49 @@ a prepared set of build steps. ## Frontend -A frontend is a component that takes a human-readable -build format and converts it to LLB so BuildKit can execute it. Frontends can -be distributed as images, and the user can target a specific version of a -frontend that is guaranteed to work for the features used by their definition. +A frontend is a component that takes a human-readable build format and converts +it to LLB so BuildKit can execute it. Frontends can be distributed as images, +and the user can target a specific version of a frontend that is guaranteed to +work for the features used by their definition. For example, to build a [Dockerfile](../../engine/reference/builder.md) with BuildKit, you would [use an external Dockerfile frontend](dockerfile-frontend.md). + +## Getting started + +BuildKit is enabled by default for all users on [Docker Desktop](../../desktop/index.md). +If you have installed Docker Desktop, you don't have to manually enable +BuildKit. If you are running Docker on Linux, you can enable BuildKit either by +using an environment variable or by making BuildKit the default setting. + +To set the BuildKit environment variable when running the `docker build` +command, run: + +```console +$ DOCKER_BUILDKIT=1 docker build . +``` + +>**Note** +> +> Buildx always enables BuildKit. + +To enable docker BuildKit by default, set daemon configuration in `/etc/docker/daemon.json` +feature to `true` and restart the daemon. If the `daemon.json` file doesn't +exist, create new file called `daemon.json` and then add the following to the +file. + +```json +{ + "features": { + "buildkit" : true + } +} +``` + +And restart the Docker daemon. + +> **Warning** +> +> BuildKit only supports building Linux containers. Windows support is tracked +> in [`moby/buildkit#616`](https://github.com/moby/buildkit/issues/616){:target="_blank" rel="noopener" class="_"} +{: .warning} diff --git a/build/index.md b/build/index.md index 195eeaa916..d456e473bc 100644 --- a/build/index.md +++ b/build/index.md @@ -5,6 +5,7 @@ keywords: build, buildx, buildkit redirect_from: - /build/buildx/ - /buildx/working-with-buildx/ +- /develop/develop-images/build_enhancements/ --- ## Overview diff --git a/desktop/faqs/general.md b/desktop/faqs/general.md index 5501660f2a..14f79b390d 100644 --- a/desktop/faqs/general.md +++ b/desktop/faqs/general.md @@ -56,8 +56,8 @@ This includes: - [Vulnerability scanning](../../docker-hub/vulnerability-scanning.md) - Viewing remote images in the Docker Dashboard - Settting up [Dev Environments](../dev-environments/index.md) -- Docker build when using [Buildkit](../../develop/develop-images/build_enhancements.md). You can work around this by disabling - BuildKit. Run `DOCKER_BUILDKIT=0 docker build .` to disable BuildKit. +- Docker build when using [BuildKit](../../build/buildkit/index.md#getting-started). + You can work around this by disabling BuildKit. Run `DOCKER_BUILDKIT=0 docker build .` to disable BuildKit. - Deploying an app to the cloud through Compose [ACI](../../cloud/aci-integration.md) and [ECS](../../cloud/ecs-integration.md) integrations diff --git a/develop/develop-images/build_enhancements.md b/develop/develop-images/build_enhancements.md deleted file mode 100644 index 6c228494b0..0000000000 --- a/develop/develop-images/build_enhancements.md +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: Build images with BuildKit -description: Learn the new features of Docker Build with BuildKit -keywords: build, security, engine, secret, BuildKit ---- - -Docker Build is one of the most used features of the Docker Engine - users -ranging from developers, build teams, and release teams all use Docker Build. - -Docker Build enhancements for 18.09 release introduces a much-needed overhaul of -the build architecture. By integrating BuildKit, users should see an improvement -on performance, storage management, feature functionality, and security. - -* Docker images created with BuildKit can be pushed to Docker Hub just like - Docker images created with legacy build -* the Dockerfile format that works on legacy build will also work with BuildKit - builds -* The new `--secret` command line option allows the user to pass secret - information for building new images with a specified Dockerfile - -For more information on build options, see the reference guide on the -[command line build options](../../engine/reference/commandline/build.md) and -the [Dockerfile reference](/engine/reference/builder/) page. - - -## Requirements - -* A current version of Docker (18.09 or higher) -* Network connection required for downloading images of custom frontends - -## Limitations - -* Only supported for building Linux containers - -## To enable BuildKit builds - -Easiest way from a fresh install of docker is to set the `DOCKER_BUILDKIT=1` -environment variable when invoking the `docker build` command, such as: - -```console -$ DOCKER_BUILDKIT=1 docker build . -``` - -To enable docker BuildKit by default, set daemon configuration in -`/etc/docker/daemon.json` feature to true and restart the daemon: - -```json -{ "features": { "buildkit": true } } -``` - -## New Docker Build command line build output - -New docker build BuildKit TTY output (default): - -```console -$ docker build . - -[+] Building 70.9s (34/59) - => [runc 1/4] COPY hack/dockerfile/install/install.sh ./install.sh 14.0s - => [frozen-images 3/4] RUN /download-frozen-image-v2.sh /build buildpa 24.9s - => [containerd 4/5] RUN PREFIX=/build/ ./install.sh containerd 37.1s - => [tini 2/5] COPY hack/dockerfile/install/install.sh ./install.sh 4.9s - => [vndr 2/4] COPY hack/dockerfile/install/vndr.installer ./ 1.6s - => [dockercli 2/4] COPY hack/dockerfile/install/dockercli.installer ./ 5.9s - => [proxy 2/4] COPY hack/dockerfile/install/proxy.installer ./ 15.7s - => [tomlv 2/4] COPY hack/dockerfile/install/tomlv.installer ./ 12.4s - => [gometalinter 2/4] COPY hack/dockerfile/install/gometalinter.install 25.5s - => [vndr 3/4] RUN PREFIX=/build/ ./install.sh vndr 33.2s - => [tini 3/5] COPY hack/dockerfile/install/tini.installer ./ 6.1s - => [dockercli 3/4] RUN PREFIX=/build/ ./install.sh dockercli 18.0s - => [runc 2/4] COPY hack/dockerfile/install/runc.installer ./ 2.4s - => [tini 4/5] RUN PREFIX=/build/ ./install.sh tini 11.6s - => [runc 3/4] RUN PREFIX=/build/ ./install.sh runc 23.4s - => [tomlv 3/4] RUN PREFIX=/build/ ./install.sh tomlv 9.7s - => [proxy 3/4] RUN PREFIX=/build/ ./install.sh proxy 14.6s - => [dev 2/23] RUN useradd --create-home --gid docker unprivilegeduser 5.1s - => [gometalinter 3/4] RUN PREFIX=/build/ ./install.sh gometalinter 9.4s - => [dev 3/23] RUN ln -sfv /go/src/github.com/docker/docker/.bashrc ~/.ba 4.3s - => [dev 4/23] RUN echo source /usr/share/bash-completion/bash_completion 2.5s - => [dev 5/23] RUN ln -s /usr/local/completion/bash/docker /etc/bash_comp 2.1s -``` - -New docker build BuildKit plain output: - -```console -$ docker build --progress=plain . - -#1 [internal] load .dockerignore -#1 digest: sha256:d0b5f1b2d994bfdacee98198b07119b61cf2442e548a41cf4cd6d0471a627414 -#1 name: "[internal] load .dockerignore" -#1 started: 2018-08-31 19:07:09.246319297 +0000 UTC -#1 completed: 2018-08-31 19:07:09.246386115 +0000 UTC -#1 duration: 66.818µs -#1 started: 2018-08-31 19:07:09.246547272 +0000 UTC -#1 completed: 2018-08-31 19:07:09.260979324 +0000 UTC -#1 duration: 14.432052ms -#1 transferring context: 142B done - - -#2 [internal] load Dockerfile -#2 digest: sha256:2f10ef7338b6eebaf1b072752d0d936c3d38c4383476a3985824ff70398569fa -#2 name: "[internal] load Dockerfile" -#2 started: 2018-08-31 19:07:09.246331352 +0000 UTC -#2 completed: 2018-08-31 19:07:09.246386021 +0000 UTC -#2 duration: 54.669µs -#2 started: 2018-08-31 19:07:09.246720773 +0000 UTC -#2 completed: 2018-08-31 19:07:09.270231987 +0000 UTC -#2 duration: 23.511214ms -#2 transferring dockerfile: 9.26kB done -``` - -## Overriding default frontends - -The new syntax features in `Dockerfile` are available if you override the default -frontend. To override the default frontend, set the first line of the -`Dockerfile` as a comment with a specific frontend image: - -```dockerfile -# syntax=, e.g. # syntax=docker/dockerfile:1.2 -``` - -The examples on this page use features that are available in `docker/dockerfile` -version 1.2.0 and up. We recommend using `docker/dockerfile:1`, which always -points to the latest release of the version 1 syntax. BuildKit automatically -checks for updates of the syntax before building, making sure you are using the -most current version. Learn more about the `syntax` directive in the -[Dockerfile reference](/engine/reference/builder/#syntax). - -## New Docker Build secret information - -The new `--secret` flag for docker build allows the user to pass secret -information to be used in the Dockerfile for building docker images in a safe -way that will not end up stored in the final image. - -`id` is the identifier to pass into the `docker build --secret`. This identifier -is associated with the `RUN --mount` identifier to use in the Dockerfile. Docker -does not use the filename of where the secret is kept outside of the Dockerfile, -since this may be sensitive information. - -`dst` renames the secret file to a specific file in the Dockerfile `RUN` command -to use. - -For example, with a secret piece of information stored in a text file: - -```console -$ echo 'WARMACHINEROX' > mysecret.txt -``` - -And with a Dockerfile that specifies use of a BuildKit frontend -`docker/dockerfile:1.2`, the secret can be accessed when performing a `RUN`: - -```dockerfile -# syntax=docker/dockerfile:1.2 - -FROM alpine - -# shows secret from default secret location: -RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret - -# shows secret from custom secret location: -RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar -``` - -The secret needs to be passed to the build using the `--secret` flag. -This Dockerfile is only to demonstrate that the secret can be accessed. As you -can see the secret printed in the build output. The final image built will not -have the secret file: - -```console -$ docker build --no-cache --progress=plain --secret id=mysecret,src=mysecret.txt . -... -#8 [2/3] RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret -#8 digest: sha256:5d8cbaeb66183993700828632bfbde246cae8feded11aad40e524f54ce7438d6 -#8 name: "[2/3] RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret" -#8 started: 2018-08-31 21:03:30.703550864 +0000 UTC -#8 1.081 WARMACHINEROX -#8 completed: 2018-08-31 21:03:32.051053831 +0000 UTC -#8 duration: 1.347502967s - - -#9 [3/3] RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar -#9 digest: sha256:6c7ebda4599ec6acb40358017e51ccb4c5471dc434573b9b7188143757459efa -#9 name: "[3/3] RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar" -#9 started: 2018-08-31 21:03:32.052880985 +0000 UTC -#9 1.216 WARMACHINEROX -#9 completed: 2018-08-31 21:03:33.523282118 +0000 UTC -#9 duration: 1.470401133s -... -``` - -## Using SSH to access private data in builds - -> **Acknowledgment** -> -> Please see [Build secrets and SSH forwarding in Docker 18.09](https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066) -> for more information and examples. - -Some commands in a `Dockerfile` may need specific SSH authentication - for example, to clone a private repository. -Rather than copying private keys into the image, which runs the risk of exposing them publicly, `docker build` provides a way to use the host system's ssh access while building the image. - -There are three steps to this process. - -First, run `ssh-add` to add private key identities to the authentication agent. -If you have more than one SSH key and your default `id_rsa` is not the one you use for accessing the resources in question, you'll need to add that key by path: `ssh-add ~/.ssh/`. -(For more information on SSH agent, see the [OpenSSH man page](https://man.openbsd.org/ssh-agent).) - -Second, when running `docker build`, use the `--ssh` option to pass in an existing SSH agent connection socket. -For example, `--ssh default=$SSH_AUTH_SOCK`, or the shorter equivalent, `--ssh default`. - -Third, to make use of that SSH access in a `RUN` command in the `Dockerfile`, define a mount with type `ssh`. -This will set the `SSH_AUTH_SOCK` environment variable for that command to the value provided by the host to `docker build`, which will cause any programs in the `RUN` command which rely on SSH to automatically use that socket. -Only the commands in the `Dockerfile` that have explicitly requested SSH access by defining `type=ssh` mount will have access to SSH agent connections. -The other commands will have no knowledge of any SSH agent being available. - -Here is an example `Dockerfile` using SSH in the container: - -```dockerfile -# syntax=docker/dockerfile:1 -FROM alpine - -# Install ssh client and git -RUN apk add --no-cache openssh-client git - -# Download public key for github.com -RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts - -# Clone private repository -RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject -``` - -The image could be built as follows: - -```console -$ docker build --ssh default . -``` - -As with `--mount=type=secret`, you can specify an `id` if you want to use multiple sockets per build and want to differentiate them. -For example, you could run `docker build --ssh main=$SSH_AUTH_SOCK --ssh other=$OTHER_SSH_AUTH_SOCK`. -In your `Dockerfile`, you could then have a `RUN --mount=type=ssh,id=main` and a `RUN --mount=type=ssh,id=other` to use those two sockets. -If a `--mount=type=ssh` doesn't specify an `id`, `default` is assumed. - -## Troubleshooting : issues with private registries - -#### x509: certificate signed by unknown authority - -If you are fetching images from insecure registry (with self-signed certificates) -and/or using such a registry as a mirror, you are facing a known issue in -Docker 18.09 : - -```console -[+] Building 0.4s (3/3) FINISHED - => [internal] load build definition from Dockerfile - => => transferring dockerfile: 169B - => [internal] load .dockerignore - => => transferring context: 2B - => ERROR resolve image config for docker.io/docker/dockerfile:experimental ------- - > resolve image config for docker.io/docker/dockerfile:experimental: ------- -failed to do request: Head https://repo.mycompany.com/v2/docker/dockerfile/manifests/experimental: x509: certificate signed by unknown authority -``` - -Solution: secure your registry properly. You can get SSL certificates from -Let's Encrypt for free. See [Deploy a registry server](../../registry/deploying.md). - - -#### image not found when the private registry is running on Sonatype Nexus version < 3.15 - -If you are running a private registry using Sonatype Nexus version < 3.15, and -receive an error similar to the following : - -```console ------- - > [internal] load metadata for docker.io/library/maven:3.5.3-alpine: ------- ------- - > [1/4] FROM docker.io/library/maven:3.5.3-alpine: ------- -rpc error: code = Unknown desc = docker.io/library/maven:3.5.3-alpine not found -``` - -you may be facing the bug below : [NEXUS-12684](https://issues.sonatype.org/browse/NEXUS-12684) - -Solution is to upgrade your Nexus to version 3.15 or above. diff --git a/docker-hub/builds/index.md b/docker-hub/builds/index.md index bf5e6cc866..5c1a50a9af 100644 --- a/docker-hub/builds/index.md +++ b/docker-hub/builds/index.md @@ -317,7 +317,7 @@ sources. For example, you might have Autobuilds use the BuildKit build system by default. If you want to use the legacy Docker build system, add the [environment variable](index.md#environment-variables-for-builds){: target="_blank" rel="noopener" class="_"} -`DOCKER_BUILDKIT=0`. Refer to the [build images with BuildKit](../../develop/develop-images/build_enhancements.md) +`DOCKER_BUILDKIT=0`. Refer to the [BuildKit](../../build/buildkit/index.md) page for more information on BuildKit. ## Build repositories with linked private submodules diff --git a/go/buildkit.md b/go/buildkit.md index be554da08c..a30497cb8b 100644 --- a/go/buildkit.md +++ b/go/buildkit.md @@ -1,6 +1,6 @@ --- title: How to enable BuildKit description: Instructions on enabling BuildKit -keywords: BuildKit, docker build, configuration -redirect_to: /develop/develop-images/build_enhancements/#to-enable-buildkit-builds +keywords: build, buildkit, configuration +redirect_to: /build/buildkit/#getting-started --- diff --git a/language/index.md b/language/index.md index 5079a39d19..bca0f3899e 100644 --- a/language/index.md +++ b/language/index.md @@ -14,7 +14,7 @@ For more information, refer to the following topics: * [Best practices for writing Dockerfiles](../develop/develop-images/dockerfile_best-practices.md) * [Docker development best practices](../develop/dev-best-practices.md) -* [Build images with BuildKit](../develop/develop-images/build_enhancements.md) +* [Build images with BuildKit](../build/buildkit/index.md#getting-started) * [Manage images](../develop/develop-images/image_management.md) ## Language-specific getting started guides diff --git a/language/java/build-images.md b/language/java/build-images.md index 5ab8a63f75..d604783236 100644 --- a/language/java/build-images.md +++ b/language/java/build-images.md @@ -8,9 +8,10 @@ description: Learn how to build your first Docker image by writing a Dockerfile ## Prerequisites -Work through the orientation and setup in Get started [Part 1](../../get-started/index.md){:target="_blank" rel="noopener" class="_"} to understand Docker concepts. Refer to the following section for Java prerequisites. - -{% include guides/enable-buildkit.md %} +* Some awareness of basic Docker concepts. If unsure, work through the orientation + and setup in Get started [Part 1](../../get-started/index.md). +* Ensure you have [enabled BuildKit](../../build/buildkit/index.md#getting-started) + on your machine. ## Overview diff --git a/language/nodejs/build-images.md b/language/nodejs/build-images.md index 9b4070b1ac..ce049ebc9e 100644 --- a/language/nodejs/build-images.md +++ b/language/nodejs/build-images.md @@ -10,9 +10,10 @@ redirect_from: ## Prerequisites -Work through the orientation and setup in Get started [Part 1](../../get-started/index.md) to understand Docker concepts. - -{% include guides/enable-buildkit.md %} +* Some awareness of basic Docker concepts. If unsure, work through the orientation + and setup in Get started [Part 1](../../get-started/index.md). +* Ensure you have [enabled BuildKit](../../build/buildkit/index.md#getting-started) + on your machine. ## Overview diff --git a/language/python/build-images.md b/language/python/build-images.md index ec9f38a393..8931c924de 100644 --- a/language/python/build-images.md +++ b/language/python/build-images.md @@ -8,9 +8,10 @@ description: Learn how to build your first Docker image by writing a Dockerfile ## Prerequisites -Work through the orientation and setup in Get started [Part 1](../../get-started/index.md) to understand Docker concepts. - -{% include guides/enable-buildkit.md %} +* Some awareness of basic Docker concepts. If unsure, work through the orientation + and setup in Get started [Part 1](../../get-started/index.md). +* Ensure you have [enabled BuildKit](../../build/buildkit/index.md#getting-started) + on your machine. ## Overview diff --git a/storage/storagedriver/index.md b/storage/storagedriver/index.md index 8715427ef8..c317d379d9 100644 --- a/storage/storagedriver/index.md +++ b/storage/storagedriver/index.md @@ -328,7 +328,7 @@ layers are the same. > image for each step for caching purposes, and the `IMAGE` column would show > the ID of that image. > BuildKit uses its own caching mechanism, and no longer requires intermediate - > images for caching. Refer to [build images with BuildKit](../../develop/develop-images/build_enhancements.md) + > images for caching. Refer to [BuildKit](../../build/buildkit/index.md) > to learn more about other enhancements made in BuildKit. From 04b22d7f066e842319a56efdcfb12e1e74106b0f Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 24 Oct 2022 21:13:06 +0200 Subject: [PATCH 43/54] build: update cross-linking in multi-stage page Signed-off-by: CrazyMax --- build/building/multi-stage.md | 49 ++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/build/building/multi-stage.md b/build/building/multi-stage.md index 577113b6f2..01477f2d97 100644 --- a/build/building/multi-stage.md +++ b/build/building/multi-stage.md @@ -206,11 +206,14 @@ RUN g++ -o /binary source.cpp Multi-stage build syntax was introduced in Docker Engine 17.05. -## Differences between legacy build and BuildKit +## Differences between legacy builder and BuildKit -The legacy Docker Engine builder processes all stages of a Dockerfile leading up to the selected `--target`. It will build a stage even if the selected target doesn't depend on that stage. +The legacy Docker Engine builder processes all stages of a Dockerfile leading +up to the selected `--target`. It will build a stage even if the selected +target doesn't depend on that stage. -BuildKit only builds the stages that the target stage depends on. +[BuildKit](../buildkit/index.md) only builds the stages that the target stage +depends on. For example, given the following Dockerfile: @@ -226,25 +229,28 @@ FROM base AS stage2 RUN echo "stage2" ``` -With BuildKit enabled, building the `stage2` target in this Dockerfile means only `base` and `stage2` are processed. There is no dependency on `stage1`, so it's skipped. +With [BuildKit enabled](../buildkit/index.md#getting-started), building the +`stage2` target in this Dockerfile means only `base` and `stage2` are processed. +There is no dependency on `stage1`, so it's skipped. ```console $ DOCKER_BUILDKIT=1 docker build --no-cache -f Dockerfile --target stage2 . -[+] Building 0.4s (7/7) FINISHED - => [internal] load build definition from Dockerfile 0.0s - => => transferring dockerfile: 36B 0.0s - => [internal] load .dockerignore 0.0s - => => transferring context: 2B 0.0s - => [internal] load metadata for docker.io/library/ubuntu:latest 0.0s - => CACHED [base 1/2] FROM docker.io/library/ubuntu 0.0s - => [base 2/2] RUN echo "base" 0.1s - => [stage2 1/1] RUN echo "stage2" 0.2s - => exporting to image 0.0s - => => exporting layers 0.0s - => => writing image sha256:f55003b607cef37614f607f0728e6fd4d113a4bf7ef12210da338c716f2cfd15 0.0s +[+] Building 0.4s (7/7) FINISHED + => [internal] load build definition from Dockerfile 0.0s + => => transferring dockerfile: 36B 0.0s + => [internal] load .dockerignore 0.0s + => => transferring context: 2B 0.0s + => [internal] load metadata for docker.io/library/ubuntu:latest 0.0s + => CACHED [base 1/2] FROM docker.io/library/ubuntu 0.0s + => [base 2/2] RUN echo "base" 0.1s + => [stage2 1/1] RUN echo "stage2" 0.2s + => exporting to image 0.0s + => => exporting layers 0.0s + => => writing image sha256:f55003b607cef37614f607f0728e6fd4d113a4bf7ef12210da338c716f2cfd15 0.0s ``` -On the other hand, building the same target without BuildKit results in all stages being processed: +On the other hand, building the same target without BuildKit results in all +stages being processed: ```console $ DOCKER_BUILDKIT=0 docker build --no-cache -f Dockerfile --target stage2 . @@ -273,10 +279,5 @@ Removing intermediate container bbc025b93175 Successfully built 09fc3770a9c4 ``` -`stage1` gets executed when BuildKit is disabled, even if `stage2` does not depend on it. - -BuildKit is enabled by default if you use Docker Desktop. - -Always run multi-stage builds with -[BuildKit enabled](/develop/develop-images/build_enhancements/) -for better performance. +`stage1` gets executed when BuildKit is disabled, even if `stage2` does not +depend on it. From 2bac3f3b6c44a5512901cd7b80734cc6de08b87d Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Mon, 24 Oct 2022 21:23:15 +0200 Subject: [PATCH 44/54] build: merge dockerfile creation page in build section Signed-off-by: CrazyMax --- _includes/guides/create-dockerfile.md | 39 --------------------- build/building/packaging.md | 49 +++++++++++++++++++++------ language/golang/build-images.md | 7 ++-- language/java/build-images.md | 7 ++-- language/nodejs/build-images.md | 7 ++-- language/python/build-images.md | 7 ++-- 6 files changed, 52 insertions(+), 64 deletions(-) delete mode 100644 _includes/guides/create-dockerfile.md diff --git a/_includes/guides/create-dockerfile.md b/_includes/guides/create-dockerfile.md deleted file mode 100644 index ecc616bd86..0000000000 --- a/_includes/guides/create-dockerfile.md +++ /dev/null @@ -1,39 +0,0 @@ -A Dockerfile is a text document that contains the instructions to assemble a -Docker image. When we tell Docker to build our image by executing the `docker build` -command, Docker reads these instructions, executes them, and creates a Docker -image as a result. - -Let’s walk through the process of creating a Dockerfile for our application. In -the root of your project, create a file named `Dockerfile` and open this file in -your text editor. - -> **What to name your Dockerfile?** -> -> The default filename to use for a Dockerfile is `Dockerfile` (without a file- -> extension). Using the default name allows you to run the `docker build` command -> without having to specify additional command flags. -> -> Some projects may need distinct Dockerfiles for specific purposes. A common -> convention is to name these `Dockerfile.` or `.Dockerfile`. -> Such Dockerfiles can then be used through the `--file` (or `-f` shorthand) -> option on the `docker build` command. Refer to the -> ["Specify a Dockerfile" section](/engine/reference/commandline/build/#specify-a-dockerfile--f) -> in the `docker build` reference to learn about the `--file` option. -> -> We recommend using the default (`Dockerfile`) for your project's primary -> Dockerfile, which is what we'll use for most examples in this guide. - -The first line to add to a Dockerfile is a [`# syntax` parser directive](/engine/reference/builder/#syntax). -While _optional_, this directive instructs the Docker builder what syntax to use -when parsing the Dockerfile, and allows older Docker versions with BuildKit enabled -to upgrade the parser before starting the build. [Parser directives](/engine/reference/builder/#parser-directives) -must appear before any other comment, whitespace, or Dockerfile instruction in -your Dockerfile, and should be the first line in Dockerfiles. - -```dockerfile -# syntax=docker/dockerfile:1 -``` - -We recommend using `docker/dockerfile:1`, which always points to the latest release -of the version 1 syntax. BuildKit automatically checks for updates of the syntax -before building, making sure you are using the most current version. \ No newline at end of file diff --git a/build/building/packaging.md b/build/building/packaging.md index 6205b023b5..fddb9eb4fc 100644 --- a/build/building/packaging.md +++ b/build/building/packaging.md @@ -29,6 +29,21 @@ multi-layer image builds based on your unique configurations. Dockerfiles can start simple and grow with your needs and support images that require complex instructions. For all the possible instructions, see the [Dockerfile reference](../../engine/reference/builder.md). +The default filename to use for a Dockerfile is `Dockerfile`, without a file +extension. Using the default name allows you to run the `docker build` command +without having to specify additional command flags. + +Some projects may need distinct Dockerfiles for specific purposes. A common +convention is to name these `.Dockerfile`. Such Dockerfiles can then +be used through the `--file` (or `-f` shorthand) option on the `docker build` command. +Refer to the ["Specify a Dockerfile" section](../../engine/reference/commandline/build.md#specify-a-dockerfile--f) +in the `docker build` reference to learn about the `--file` option. + +> **Note** +> +> We recommend using the default (`Dockerfile`) for your project's primary +> Dockerfile. + Docker images consist of **read-only layers**, each resulting from an instruction in the Dockerfile. Layers are stacked sequentially and each one is a delta representing the changes applied to the previous layer. @@ -80,16 +95,23 @@ EXPOSE 8000 CMD flask run --host 0.0.0.0 --port 8000 ``` -We start by specifying the [syntax directive](../../engine/reference/builder.md#syntax). -It pins the exact version of the Dockerfile syntax we're using: +The first line to add to a Dockerfile is a [`# syntax` parser directive](../../engine/reference/builder.md#syntax). +While optional, this directive instructs the Docker builder what syntax to use +when parsing the Dockerfile, and allows older Docker versions with [BuildKit enabled](../buildkit/index.md#getting-started) +to use a specific [Dockerfile frontend](../buildkit/dockerfile-frontend.md) +before starting the build. [Parser directives](../../engine/reference/builder.md/#parser-directives) +must appear before any other comment, whitespace, or Dockerfile instruction in +your Dockerfile, and should be the first line in Dockerfiles. ```dockerfile # syntax=docker/dockerfile:1 ``` -As a [best practice](../../develop/dev-best-practices.md), this should be the -very first line in all our Dockerfiles as it informs BuildKit the right version -of the Dockerfile to use. +> **Note** +> +> We recommend using `docker/dockerfile:1`, which always points to the latest +> release of the version 1 syntax. BuildKit automatically checks for updates of +> the syntax before building, making sure you are using the most current version. Next we define the first instruction: @@ -185,11 +207,18 @@ To test our Dockerfile, we'll first build it using the [`docker build` command]( $ docker build -t test:latest . ``` -* `-t test:latest` option specifies the name (required) and tag (optional) of - the image we're building. -* `.` specifies the build context as the current directory. In this example, - this is where build expects to find the Dockerfile and the local files the - Dockerfile needs to access, in this case your python application. +Here `-t test:latest` option specifies the name (required) and tag (optional) +of the image we're building. `.` specifies the build context as the current +directory. In this example, this is where build expects to find the Dockerfile +and the local files the Dockerfile needs to access, in this case your Python +application. + +> **Warning** +> +> Avoid using your root directory, `/`, as the `PATH` for your build context, +> as it causes the build to transfer the entire contents of your hard drive to +> the daemon. +{:.warning} So, in accordance with the build command issued and how build context works, your Dockerfile and python app need to be in the same directory. diff --git a/language/golang/build-images.md b/language/golang/build-images.md index 8638288b8a..3479f2b5f2 100644 --- a/language/golang/build-images.md +++ b/language/golang/build-images.md @@ -13,8 +13,11 @@ redirect_from: * Some understanding of Go and its toolchain. This is not a tutorial on Go. If you are new to the language, the [Go website](https://golang.org/){: target="_blank" rel="noopener" class="_"} is a good starting point, so go (pun intended) check it out. -* Some awareness of basic Docker concepts. If unsure, work through the orientation +* You understand basic Docker concepts, and you have completed the orientation and setup in Get started [Part 1](../../get-started/index.md). +* You're familiar with the [Dockerfile format](../../build/building/packaging.md#dockerfile). +* You have [enabled BuildKit](../../build/buildkit/index.md#getting-started) + on your machine. ## Overview @@ -132,8 +135,6 @@ to "dockerizing" it. ## Create a Dockerfile for the application -{% include guides/create-dockerfile.md %} - Next, we need to add a line in our Dockerfile that tells Docker what base image we would like to use for our application. diff --git a/language/java/build-images.md b/language/java/build-images.md index d604783236..b8140566e8 100644 --- a/language/java/build-images.md +++ b/language/java/build-images.md @@ -8,9 +8,10 @@ description: Learn how to build your first Docker image by writing a Dockerfile ## Prerequisites -* Some awareness of basic Docker concepts. If unsure, work through the orientation +* You understand basic Docker concepts, and you have completed the orientation and setup in Get started [Part 1](../../get-started/index.md). -* Ensure you have [enabled BuildKit](../../build/buildkit/index.md#getting-started) +* You're familiar with the [Dockerfile format](../../build/building/packaging.md#dockerfile). +* You have [enabled BuildKit](../../build/buildkit/index.md#getting-started) on your machine. ## Overview @@ -74,8 +75,6 @@ We will now continue to build and run the application in Docker. ## Create a Dockerfile for Java -{% include guides/create-dockerfile.md %} - Next, we need to add a line in our Dockerfile that tells Docker what base image we would like to use for our application. diff --git a/language/nodejs/build-images.md b/language/nodejs/build-images.md index ce049ebc9e..763dc2aba5 100644 --- a/language/nodejs/build-images.md +++ b/language/nodejs/build-images.md @@ -10,9 +10,10 @@ redirect_from: ## Prerequisites -* Some awareness of basic Docker concepts. If unsure, work through the orientation +* You understand basic Docker concepts, and you have completed the orientation and setup in Get started [Part 1](../../get-started/index.md). -* Ensure you have [enabled BuildKit](../../build/buildkit/index.md#getting-started) +* You're familiar with the [Dockerfile format](../../build/building/packaging.md#dockerfile). +* You have [enabled BuildKit](../../build/buildkit/index.md#getting-started) on your machine. ## Overview @@ -94,8 +95,6 @@ We will now continue to build and run the application in Docker. ## Create a Dockerfile for Node.js -{% include guides/create-dockerfile.md %} - Next, we need to add a line in our Dockerfile that tells Docker what base image we would like to use for our application. diff --git a/language/python/build-images.md b/language/python/build-images.md index 8931c924de..b4f810fda8 100644 --- a/language/python/build-images.md +++ b/language/python/build-images.md @@ -8,9 +8,10 @@ description: Learn how to build your first Docker image by writing a Dockerfile ## Prerequisites -* Some awareness of basic Docker concepts. If unsure, work through the orientation +* You understand basic Docker concepts, and you have completed the orientation and setup in Get started [Part 1](../../get-started/index.md). -* Ensure you have [enabled BuildKit](../../build/buildkit/index.md#getting-started) +* You're familiar with the [Dockerfile format](../../build/building/packaging.md#dockerfile). +* You have [enabled BuildKit](../../build/buildkit/index.md#getting-started) on your machine. ## Overview @@ -69,8 +70,6 @@ Switch back to the terminal where our server is running and you should see the f Now that our application is running properly, let’s take a look at creating a Dockerfile. -{% include guides/create-dockerfile.md %} - Next, we need to add a line in our Dockerfile that tells Docker what base image we would like to use for our application. From 2da2d5eb4ae3f7815b01ee9b0f8ea1ebedd113ca Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 25 Oct 2022 19:58:58 +0200 Subject: [PATCH 45/54] engine: update reference docs with latest changes from 20.10 branch Signed-off-by: CrazyMax --- _data/engine-cli/docker_build.yaml | 25 +++++++++++++------------ _data/engine-cli/docker_run.yaml | 11 ++++++----- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/_data/engine-cli/docker_build.yaml b/_data/engine-cli/docker_build.yaml index 6c5836b755..bbdfca7014 100644 --- a/_data/engine-cli/docker_build.yaml +++ b/_data/engine-cli/docker_build.yaml @@ -561,13 +561,13 @@ examples: |- uploaded context. The builder reference contains detailed information on [creating a .dockerignore file](../builder.md#dockerignore-file). - When using the [BuildKit backend](../builder.md#buildkit), `docker build` searches - for a `.dockerignore` file relative to the Dockerfile name. For example, running - `docker build -f myapp.Dockerfile .` will first look for an ignore file named - `myapp.Dockerfile.dockerignore`. If such a file is not found, the `.dockerignore` - file is used if present. Using a Dockerfile based `.dockerignore` is useful if a - project contains multiple Dockerfiles that expect to ignore different sets of - files. + When using the [BuildKit backend](https://docs.docker.com/build/buildkit/), + `docker build` searches for a `.dockerignore` file relative to the Dockerfile + name. For example, running `docker build -f myapp.Dockerfile .` will first look + for an ignore file named `myapp.Dockerfile.dockerignore`. If such a file is not + found, the `.dockerignore` file is used if present. Using a Dockerfile based + `.dockerignore` is useful if a project contains multiple Dockerfiles that + expect to ignore different sets of files. ### Tag an image (-t) @@ -823,8 +823,9 @@ examples: |- > **Note** > > This feature requires the BuildKit backend. You can either - > [enable BuildKit](../builder.md#buildkit) or use the [buildx](https://github.com/docker/buildx) - > plugin which provides more output type options. + > [enable BuildKit](https://docs.docker.com/build/buildkit/#getting-started) or + > use the [buildx](https://github.com/docker/buildx) plugin which provides more + > output type options. ### Specifying external cache sources @@ -865,9 +866,9 @@ examples: |- > **Note** > > This feature requires the BuildKit backend. You can either - > [enable BuildKit](../builder.md#buildkit) or use the [buildx](https://github.com/docker/buildx) - > plugin. The previous builder has limited support for reusing cache from - > pre-pulled images. + > [enable BuildKit](https://docs.docker.com/build/buildkit/#getting-started) or + > use the [buildx](https://github.com/docker/buildx) plugin. The previous + > builder has limited support for reusing cache from pre-pulled images. ### Squash an image's layers (--squash) (experimental) diff --git a/_data/engine-cli/docker_run.yaml b/_data/engine-cli/docker_run.yaml index b0c6fcfac5..067fff38ef 100644 --- a/_data/engine-cli/docker_run.yaml +++ b/_data/engine-cli/docker_run.yaml @@ -1352,14 +1352,15 @@ examples: |- ### Add host device to container (--device) ```console - $ docker run --device=/dev/sdc:/dev/xvdc \ - --device=/dev/sdd --device=/dev/zero:/dev/nulo \ - -i -t \ - ubuntu ls -l /dev/{xvdc,sdd,nulo} + $ docker run -it --rm \ + --device=/dev/sdc:/dev/xvdc \ + --device=/dev/sdd \ + --device=/dev/zero:/dev/foobar \ + ubuntu ls -l /dev/{xvdc,sdd,foobar} brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd - crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo + crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/foobar ``` It is often necessary to directly expose devices to a container. The `--device` From 897e77c64774708e2b052e288afd2c6fa0dbd8e0 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 25 Oct 2022 20:21:41 +0200 Subject: [PATCH 46/54] add hotjar for staging environment Signed-off-by: CrazyMax --- Dockerfile | 7 ++++++- _config_stage.yml | 5 +++++ _includes/feedback.html | 13 +++++++++++++ _includes/head.html | 1 + contribute/file-conventions.md | 23 ++++++++++++----------- 5 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 _config_stage.yml create mode 100644 _includes/feedback.html diff --git a/Dockerfile b/Dockerfile index aa2477f41a..23c572fa33 100644 --- a/Dockerfile +++ b/Dockerfile @@ -49,7 +49,12 @@ ENV TARGET=/out RUN --mount=type=bind,target=.,rw \ --mount=type=cache,target=/src/.jekyll-cache < + +{%- endif -%} diff --git a/_includes/head.html b/_includes/head.html index 3fb4bd12ac..71a9b63392 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -73,6 +73,7 @@ {%- if site.local_search -%} {%- endif -%} + {%- include feedback.html -%} {%- comment -%} preload fonts: https://www.freecodecamp.org/news/web-fonts-in-2018-f191a48367e8/ diff --git a/contribute/file-conventions.md b/contribute/file-conventions.md index e0d9c7d6fe..5e8cb36fb7 100644 --- a/contribute/file-conventions.md +++ b/contribute/file-conventions.md @@ -19,17 +19,18 @@ The front-matter of a given page is in a section at the top of the Markdown file that starts and ends with three hyphens. It includes YAML content. The following keys are supported. The title, description, and keywords are required. -| Key | Required | Description | -|------------------------|-----------|-----------------------------------------| -| title | yes | The page title. This is added to the HTML output as a `

    ` level header. | -| description | yes | A sentence that describes the page contents. This is added to the HTML metadata. It’s not rendered on the page. | -| keywords | yes | A comma-separated list of keywords. These are added to the HTML metadata. | -| redirect_from | no | A YAML list of pages which should redirect to the current page. At build time, each page listed here is created as an HTML stub containing a 302 redirect to this page. | -| notoc | no | Either `true` or `false`. If `true`, no in-page TOC is generated for the HTML output of this page. Defaults to `false`. Appropriate for some landing pages that have no in-page headings.| -| toc_min | no | Ignored if `notoc` is set to `true`. The minimum heading level included in the in-page TOC. Defaults to `2`, to show `

    ` headings as the minimum. | -| toc_max | no | Ignored if `notoc` is set to `false`. The maximum heading level included in the in-page TOC. Defaults to `3`, to show `

    ` headings. Set to the same as `toc_min` to only show `toc_min` level of headings. | -| skip_read_time | no | Set to `true` to disable the 'Estimated reading time' banner for this page. | -| sitemap | no | Exclude the page from indexing by search engines. When set to `false`, the page is excluded from `sitemap.xml`, and a `` header is added to the page. | +| Key | Required | Description | +|----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| title | yes | The page title. This is added to the HTML output as a `

    ` level header. | +| description | yes | A sentence that describes the page contents. This is added to the HTML metadata. It’s not rendered on the page. | +| keywords | yes | A comma-separated list of keywords. These are added to the HTML metadata. | +| redirect_from | no | A YAML list of pages which should redirect to the current page. At build time, each page listed here is created as an HTML stub containing a 302 redirect to this page. | +| notoc | no | Either `true` or `false`. If `true`, no in-page TOC is generated for the HTML output of this page. Defaults to `false`. Appropriate for some landing pages that have no in-page headings. | +| toc_min | no | Ignored if `notoc` is set to `true`. The minimum heading level included in the in-page TOC. Defaults to `2`, to show `

    ` headings as the minimum. | +| toc_max | no | Ignored if `notoc` is set to `false`. The maximum heading level included in the in-page TOC. Defaults to `3`, to show `

    ` headings. Set to the same as `toc_min` to only show `toc_min` level of headings. | +| skip_read_time | no | Set to `true` to disable the 'Estimated reading time' banner for this page. | +| skip_feedback | no | Set to `true` to disable the Feedback widget for this page. | +| sitemap | no | Exclude the page from indexing by search engines. When set to `false`, the page is excluded from `sitemap.xml`, and a `` header is added to the page. | Here's an example of a valid (but contrived) page metadata. The order of the metadata elements in the front-matter isn't important. From 2551e2481a53516e425fa364220e7d86978f777e Mon Sep 17 00:00:00 2001 From: Craig Osterhout <103533812+craig-osterhout@users.noreply.github.com> Date: Tue, 25 Oct 2022 15:25:44 -0700 Subject: [PATCH 47/54] Update Dockerfile Attempt to fix deploy issue --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 23c572fa33..c2f7e523fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,7 +51,7 @@ RUN --mount=type=bind,target=.,rw \ set -eu CONFIG_FILES="_config.yml" if [ "${JEKYLL_ENV}" = "production" ]; then - CONFIG_FILES="${CONFIG_FILES},_config_prod.yml" + CONFIG_FILES="${CONFIG_FILES},_config_production.yml" elif [ "${DOCS_URL}" = "https://docs-stage.docker.com" ]; then CONFIG_FILES="${CONFIG_FILES},_config_stage.yml" fi From 06908b36f5191d5b39a91f1f64c7a34b749783c8 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 26 Oct 2022 02:05:56 +0200 Subject: [PATCH 48/54] jekyll: use git to fetch remote resources Signed-off-by: CrazyMax --- Dockerfile | 1 + Gemfile | 2 +- Gemfile.lock | 19 ++--- _plugins/fetch_remote.rb | 150 ++++++++++++++++++++------------------- 4 files changed, 88 insertions(+), 84 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0784f49836..2d4f4a9c90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,6 +47,7 @@ ARG JEKYLL_ENV ARG DOCS_URL ENV TARGET=/out RUN --mount=type=bind,target=.,rw \ + --mount=type=cache,target=/tmp/docker-docs-clone \ --mount=type=cache,target=/src/.jekyll-cache <= 2.0.2, < 5.0) - archive-zip (0.12.0) - io-like (~> 0.3.0) - chef-utils (17.10.0) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + chef-utils (18.0.161) concurrent-ruby colorator (1.1.0) concurrent-ruby (1.1.10) @@ -18,6 +16,9 @@ GEM ffi (1.15.5) forwardable-extended (2.6.0) front_matter_parser (1.0.1) + git (1.12.0) + addressable (~> 2.8) + rchardet (~> 1.8) html-proofer (3.19.4) addressable (~> 2.3) mercenary (~> 0.3) @@ -29,7 +30,6 @@ GEM http_parser.rb (0.8.0) i18n (1.12.0) concurrent-ruby (~> 1.0) - io-like (0.3.1) jekyll (4.2.2) addressable (~> 2.4) colorator (~> 1.0) @@ -92,13 +92,14 @@ GEM pathutil (0.16.2) forwardable-extended (~> 2.6) posix-spawn (0.3.15) - public_suffix (4.0.7) + public_suffix (5.0.0) racc (1.6.0) rainbow (3.1.1) rake (13.0.6) - rb-fsevent (0.11.1) + rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) + rchardet (1.8.0) rexml (3.2.5) rouge (3.27.0) safe_yaml (1.0.5) @@ -118,8 +119,8 @@ PLATFORMS x86_64-linux DEPENDENCIES - archive-zip (= 0.12.0) front_matter_parser (= 1.0.1) + git (= 1.12.0) html-proofer (= 3.19.4) jekyll (= 4.2.2) jekyll-last-modified-at diff --git a/_plugins/fetch_remote.rb b/_plugins/fetch_remote.rb index 57ed8f77bb..3a8b69c718 100644 --- a/_plugins/fetch_remote.rb +++ b/_plugins/fetch_remote.rb @@ -1,9 +1,8 @@ -require 'archive/zip' require 'front_matter_parser' +require 'git' require 'jekyll' require 'json' require 'octopress-hooks' -require 'open-uri' require 'rake' require_relative 'util.rb' @@ -12,14 +11,6 @@ module Jekyll class FetchRemote < Octopress::Hooks::Site priority :highest - def self.download(url, dest) - uri = URI.parse(url) - result = File.join(dest, File.basename(uri.path)) - puts " Downloading #{url}" - IO.copy_stream(URI.open(url), result) - return result - end - def self.copy(src, dest) if (tmp = Array.try_convert(src)) tmp.each do |s| @@ -50,75 +41,86 @@ module Jekyll beginning_time = Time.now puts "Starting plugin fetch_remote.rb..." site.config['fetch-remote'].each do |entry| - puts " Repo #{entry['repo']} (#{entry['ref']})" - Dir.mktmpdir do |tmpdir| - tmpfile = FetchRemote.download("#{entry['repo']}/archive/#{entry['ref']}.zip", tmpdir) - Dir.mktmpdir do |ztmpdir| - puts " Extracting #{tmpfile}" - Archive::Zip.extract( - tmpfile, - ztmpdir, - :create => true - ) - entry['paths'].each do |path| - if File.extname(path['dest']) != "" - if path['src'].size > 1 - raise "Cannot use file destination #{path['dest']} with multiple sources" - end - FileUtils.mkdir_p File.dirname(path['dest']) - else - FileUtils.mkdir_p path['dest'] - end + puts " Repo #{entry['repo']}" - puts " Copying files" + gituri = Git::URL.parse(entry['repo']) + clonedir = "#{Dir.tmpdir}/docker-docs-clone#{gituri.path}" + if Dir.exist?(clonedir) + puts " Opening #{clonedir}" + begin + git = Git.open(clonedir) + git.chdir do + puts " Fetching #{entry['ref']}" + git.checkout(entry['ref']) + git.fetch + end + rescue => e + FileUtils.rm_rf(clonedir) + puts " Cloning repository into #{clonedir}" + Git.clone("#{entry['repo']}.git", Pathname.new(clonedir), branch: entry['ref']) + end + else + puts " Cloning repository into #{clonedir}" + Git.clone("#{entry['repo']}.git", Pathname.new(clonedir), branch: entry['ref']) + end - # prepare file list to be copied - files = FileList[] - path['src'].each do |src| - if "#{src}".start_with?("!") - files.exclude(File.join(ztmpdir, "*/"+"#{src}".delete_prefix("!"))) + entry['paths'].each do |path| + if File.extname(path['dest']) != "" + if path['src'].size > 1 + raise "Cannot use file destination #{path['dest']} with multiple sources" + end + FileUtils.mkdir_p File.dirname(path['dest']) + else + FileUtils.mkdir_p path['dest'] + end + + puts " Copying files" + + # prepare file list to be copied + files = FileList[] + path['src'].each do |src| + if "#{src}".start_with?("!") + files.exclude(File.join(clonedir, "/"+"#{src}".delete_prefix("!"))) + else + files.include(File.join(clonedir, "/#{src}")) + end + end + + files.each do |file| + FetchRemote.copy(file, path['dest']) do |s, d| + s = File.realpath(s) + # traverse source directory + FileUtils::Entry_.new(s, nil, false).wrap_traverse(proc do |ent| + file_clean = ent.path.delete_prefix(clonedir).split("/").drop(1).join("/") + destent = FileUtils::Entry_.new(d, ent.rel, false) + puts " #{file_clean} => #{destent.path}" + + if File.file?(destent.path) + fmp = FrontMatterParser::Parser.parse_file(destent.path) + if fmp['fetch_remote'].nil? + raise "Local file #{destent.path} already exists" + end + line_start, line_end = FetchRemote.resolve_line_numbers(fmp['fetch_remote'].kind_of?(Hash) ? fmp['fetch_remote']['line_start'] : nil, fmp['fetch_remote'].kind_of?(Hash) ? fmp['fetch_remote']['line_end'] : nil) + lines = File.readlines(ent.path)[line_start..line_end] + File.open(destent.path, "a") { |fow| fow.puts lines.join } else - files.include(File.join(ztmpdir, "*/#{src}")) + ent.copy destent.path end - end - files.each do |file| - FetchRemote.copy(file, path['dest']) do |s, d| - s = File.realpath(s) - # traverse source directory - FileUtils::Entry_.new(s, nil, false).wrap_traverse(proc do |ent| - file_clean = ent.path.delete_prefix(ztmpdir).split("/").drop(2).join("/") - destent = FileUtils::Entry_.new(d, ent.rel, false) - puts " #{file_clean} => #{destent.path}" - - if File.file?(destent.path) - fmp = FrontMatterParser::Parser.parse_file(destent.path) - if fmp['fetch_remote'].nil? - raise "Local file #{destent.path} already exists" - end - line_start, line_end = FetchRemote.resolve_line_numbers(fmp['fetch_remote'].kind_of?(Hash) ? fmp['fetch_remote']['line_start'] : nil, fmp['fetch_remote'].kind_of?(Hash) ? fmp['fetch_remote']['line_end'] : nil) - lines = File.readlines(ent.path)[line_start..line_end] - File.open(destent.path, "a") { |fow| fow.puts lines.join } - else - ent.copy destent.path - end - - next unless File.file?(ent.path) && File.extname(ent.path) == ".md" - # set edit and issue url and remote info for markdown files in site config defaults - edit_url = "#{entry['repo']}/edit/#{entry['default_branch']}/#{file_clean}" - issue_url = "#{entry['repo']}/issues/new?body=File: [#{file_clean}](#{get_docs_url}/#{destent.path.sub(/#{File.extname(destent.path)}$/, '')}/)" - puts " edit_url: #{edit_url}" - puts " issue_url: #{issue_url}" - site.config['defaults'] << { - "scope" => { "path" => destent.path }, - "values" => { - "edit_url" => edit_url, - "issue_url" => issue_url - }, - } - end, proc do |_| end) - end - end + next unless File.file?(ent.path) && File.extname(ent.path) == ".md" + # set edit and issue url and remote info for markdown files in site config defaults + edit_url = "#{entry['repo']}/edit/#{entry['default_branch']}/#{file_clean}" + issue_url = "#{entry['repo']}/issues/new?body=File: [#{file_clean}](#{get_docs_url}/#{destent.path.sub(/#{File.extname(destent.path)}$/, '')}/)" + puts " edit_url: #{edit_url}" + puts " issue_url: #{issue_url}" + site.config['defaults'] << { + "scope" => { "path" => destent.path }, + "values" => { + "edit_url" => edit_url, + "issue_url" => issue_url + }, + } + end, proc do |_| end) end end end From bc8fde23b9dc8a90aedc5b2feb89d1f706b435a9 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Wed, 26 Oct 2022 11:08:21 +0200 Subject: [PATCH 49/54] doc refresh: Linux postinstall instructions (#15969) Signed-off-by: David Karlsson --- .github/vale/Docker/SentenceLength.yml | 2 +- .github/vale/Vocab/Technology/accept.txt | 7 + _data/toc.yaml | 12 +- config/containers/resource_constraints.md | 5 +- config/daemon/index.md | 2 +- config/daemon/systemd.md | 2 +- engine/install/index.md | 2 +- engine/install/linux-postinstall.md | 553 ++++++---------------- engine/install/troubleshoot.md | 293 ++++++++++++ engine/reference/commandline/info.md | 1 - 10 files changed, 456 insertions(+), 423 deletions(-) create mode 100644 engine/install/troubleshoot.md diff --git a/.github/vale/Docker/SentenceLength.yml b/.github/vale/Docker/SentenceLength.yml index 9754fe7581..57248eeb4a 100644 --- a/.github/vale/Docker/SentenceLength.yml +++ b/.github/vale/Docker/SentenceLength.yml @@ -3,5 +3,5 @@ message: "Write short, concise sentences. (<=30 words)" scope: sentence link: https://docs.docker.com/contribute/checklist/ level: warning -max: 30 +max: 31 token: \b(\w+)\b diff --git a/.github/vale/Vocab/Technology/accept.txt b/.github/vale/Vocab/Technology/accept.txt index 12595a0819..b97433f09e 100644 --- a/.github/vale/Vocab/Technology/accept.txt +++ b/.github/vale/Vocab/Technology/accept.txt @@ -1,5 +1,8 @@ APIs? +DHCP +DNS Ethernet +GRUB Git GPG HTTP @@ -7,6 +10,7 @@ IPs? IPv[46] IPvlan MAC +RPM SDKs? SSO TCP @@ -14,6 +18,8 @@ UDP Unix VLAN VM +[Ll]oopback +[Nn]ameserver [Nn]amespace cgroup config @@ -21,6 +27,7 @@ containerd deserialization deserialize filepath +firewalld glibc goroutine hostname diff --git a/_data/toc.yaml b/_data/toc.yaml index d0f0713df1..b999d72001 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1415,10 +1415,10 @@ manuals: section: - path: /engine/ title: Overview - - path: /engine/install/ - title: Install - - sectiontitle: Installation per distro + - sectiontitle: Install section: + - path: /engine/install/ + title: Installation Overview - path: /engine/install/centos/ title: Install on CentOS - path: /engine/install/debian/ @@ -1433,8 +1433,10 @@ manuals: title: Install on Ubuntu - path: /engine/install/binaries/ title: Install binaries - - path: /engine/install/linux-postinstall/ - title: Optional post-installation steps + - path: /engine/install/linux-postinstall/ + title: Post-installation steps + - path: /engine/install/troubleshoot/ + title: Troubleshoot installation - path: /engine/deprecated/ title: Deprecated features - path: /engine/context/working-with-contexts/ diff --git a/config/containers/resource_constraints.md b/config/containers/resource_constraints.md index 9fa84d9108..d813a8322f 100644 --- a/config/containers/resource_constraints.md +++ b/config/containers/resource_constraints.md @@ -23,8 +23,9 @@ the following: WARNING: No swap limit support ``` -Consult your operating system's documentation for enabling them. -[Learn more](../../engine/install/linux-postinstall.md#your-kernel-does-not-support-cgroup-swap-limit-capabilities). +Consult your operating system's documentation for enabling them. See also the +[Docker Engine troubleshooting guide](../../engine/install/troubleshoot.md#kernel-cgroup-swap-limit-capabilities) +for more information. ## Memory diff --git a/config/daemon/index.md b/config/daemon/index.md index 11d4d915f0..43bed61f50 100644 --- a/config/daemon/index.md +++ b/config/daemon/index.md @@ -40,7 +40,7 @@ the machine reboots. The command to start Docker depends on your operating system. Check the correct page under [Install Docker](../../engine/install/index.md). To configure Docker to start automatically at system boot, see -[Configure Docker to start on boot](../../engine/install/linux-postinstall.md#configure-docker-to-start-on-boot). +[Configure Docker to start on boot](../../engine/install/linux-postinstall.md#configure-docker-to-start-on-boot-with-systemd). ## Start the daemon manually diff --git a/config/daemon/systemd.md b/config/daemon/systemd.md index ba459bbe13..3748984f3e 100644 --- a/config/daemon/systemd.md +++ b/config/daemon/systemd.md @@ -26,7 +26,7 @@ $ sudo systemctl start docker ### Start automatically at system boot If you want Docker to start at boot, see -[Configure Docker to start on boot](../../engine/install/linux-postinstall.md#configure-docker-to-start-on-boot). +[Configure Docker to start on boot](../../engine/install/linux-postinstall.md#configure-docker-to-start-on-boot-with-systemd). ## Custom Docker daemon options diff --git a/engine/install/index.md b/engine/install/index.md index 16180d9683..571ff247d6 100644 --- a/engine/install/index.md +++ b/engine/install/index.md @@ -1,5 +1,5 @@ --- -title: Install Docker Engine +title: Docker Engine installation overview description: Lists the installation methods keywords: docker, installation, install, Docker Engine, Docker Engine, docker editions, stable, edge redirect_from: diff --git a/engine/install/linux-postinstall.md b/engine/install/linux-postinstall.md index 0187304423..46395ad244 100644 --- a/engine/install/linux-postinstall.md +++ b/engine/install/linux-postinstall.md @@ -1,178 +1,183 @@ --- description: Optional post-installation steps for Linux -keywords: Docker, Docker documentation, requirements, apt, installation, ubuntu, install, uninstall, upgrade, update +keywords: > + Docker, Docker documentation, requirements, apt, installation, ubuntu, + install, uninstall, upgrade, update title: Post-installation steps for Linux redirect_from: -- /engine/installation/linux/docker-ee/linux-postinstall/ -- /engine/installation/linux/linux-postinstall/ -- /install/linux/linux-postinstall/ + - /engine/installation/linux/docker-ee/linux-postinstall/ + - /engine/installation/linux/linux-postinstall/ + - /install/linux/linux-postinstall/ --- -This section contains optional procedures for configuring Linux hosts to work -better with Docker. +These optional post-installation procedures shows you how to configure your +Linux host machine to work better with Docker. ## Manage Docker as a non-root user -The Docker daemon binds to a Unix socket instead of a TCP port. By default -that Unix socket is owned by the user `root` and other users can only access it -using `sudo`. The Docker daemon always runs as the `root` user. +The Docker daemon binds to a Unix socket, not a TCP port. By default it's the +`root` user that owns the Unix socket, and other users can only access it using +`sudo`. The Docker daemon always runs as the `root` user. If you don't want to preface the `docker` command with `sudo`, create a Unix group called `docker` and add users to it. When the Docker daemon starts, it -creates a Unix socket accessible by members of the `docker` group. +creates a Unix socket accessible by members of the `docker` group. On some Linux +distributions, the system automatically creates this group when installing +Docker Engine using a package manager. In that case, there is no need for you to +manually create the group. -> Warning + +> **Warning** > -> The `docker` group grants privileges equivalent to the `root` -> user. For details on how this impacts security in your system, see -> [*Docker Daemon Attack Surface*](../security/index.md#docker-daemon-attack-surface). +> The `docker` group grants root-level privileges to the user. For +> details on how this impacts security in your system, see +> [Docker Daemon Attack Surface](../security/index.md#docker-daemon-attack-surface). {: .warning} -> **Note**: +> **Note** > > To run Docker without root privileges, see > [Run the Docker daemon as a non-root user (Rootless mode)](../security/rootless.md). To create the `docker` group and add your user: -1. Create the `docker` group. +1. Create the `docker` group. - ```console - $ sudo groupadd docker - ``` + ```console + $ sudo groupadd docker + ``` -2. Add your user to the `docker` group. +2. Add your user to the `docker` group. - ```console - $ sudo usermod -aG docker $USER - ``` + ```console + $ sudo usermod -aG docker $USER + ``` -3. Log out and log back in so that your group membership is re-evaluated. +3. Log out and log back in so that your group membership is re-evaluated. - If testing on a virtual machine, it may be necessary to restart the virtual machine for changes to take effect. - - On a desktop Linux environment such as X Windows, log out of your session completely and then log back in. - - On Linux, you can also run the following command to activate the changes to groups: - - ```console - $ newgrp docker - ``` + > If you're running Linux in a virtual machine, it may be necessary to + > restart the virtual machine for changes to take effect. -4. Verify that you can run `docker` commands without `sudo`. + You can also run the following command to activate the changes to groups: - ```console - $ docker run hello-world - ``` + ```console + $ newgrp docker + ``` - This command downloads a test image and runs it in a container. When the - container runs, it prints a message and exits. +4. Verify that you can run `docker` commands without `sudo`. - If you initially ran Docker CLI commands using `sudo` before adding - your user to the `docker` group, you may see the following error, - which indicates that your `~/.docker/` directory was created with - incorrect permissions due to the `sudo` commands. + ```console + $ docker run hello-world + ``` - ```none - WARNING: Error loading config file: /home/user/.docker/config.json - - stat /home/user/.docker/config.json: permission denied - ``` + This command downloads a test image and runs it in a container. When the + container runs, it prints a message and exits. - To fix this problem, either remove the `~/.docker/` directory - (it is recreated automatically, but any custom settings - are lost), or change its ownership and permissions using the - following commands: + If you initially ran Docker CLI commands using `sudo` before adding your user + to the `docker` group, you may see the following error: - ```console - $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R - $ sudo chmod g+rwx "$HOME/.docker" -R - ``` + ```none + WARNING: Error loading config file: /home/user/.docker/config.json - + stat /home/user/.docker/config.json: permission denied + ``` -## Configure Docker to start on boot + This error indicates that the permission settings for the `~/.docker/` + directory are incorrect, due to having used the `sudo` command earlier. -Most current Linux distributions (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 and -higher) use [`systemd`](../../config/daemon/systemd.md) to manage which services -start when the system boots. On Debian and Ubuntu, the Docker service is configured -to start on boot by default. To automatically start Docker and Containerd on boot -for other distros, use the commands below: + To fix this problem, either remove the `~/.docker/` directory (it's recreated + automatically, but any custom settings are lost), or change its ownership and + permissions using the following commands: + + ```console + $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R + $ sudo chmod g+rwx "$HOME/.docker" -R + ``` + +## Configure Docker to start on boot with systemd + +Many modern Linux distributions use [systemd](../../config/daemon/systemd.md) to +manage which services start when the system boots. On Debian and Ubuntu, the +Docker service starts on boot by default. To automatically start Docker and +containerd on boot for other Linux distributions using systemd, run the +following commands: ```console $ sudo systemctl enable docker.service $ sudo systemctl enable containerd.service ``` -To disable this behavior, use `disable` instead. +To stop this behavior, use `disable` instead. ```console $ sudo systemctl disable docker.service $ sudo systemctl disable containerd.service ``` -If you need to add an HTTP Proxy, set a different directory or partition for the +If you need to add an HTTP proxy, set a different directory or partition for the Docker runtime files, or make other customizations, see [customize your systemd Docker daemon options](../../config/daemon/systemd.md). -## Use a different storage engine - -For information about the different storage engines, see -[Storage drivers](../../storage/storagedriver/index.md). -The default storage engine and the list of supported storage engines depend on -your host's Linux distribution and available kernel drivers. - ## Configure default logging driver -Docker provides the [capability](../../config/containers/logging/index.md) to -collect and view log data from all containers running on a host via a series of -logging drivers. The default logging driver, `json-file`, writes log data to -JSON-formatted files on the host filesystem. Over time, these log files expand -in size, leading to potential exhaustion of disk resources. +Docker provides [logging drivers](../../config/containers/logging/index.md) for +collecting and viewing log data from all containers running on a host. The +default logging driver, `json-file`, writes log data to JSON-formatted files on +the host filesystem. Over time, these log files expand in size, leading to +potential exhaustion of disk resources. -To alleviate such issues, either configure the `json-file` logging driver to -enable [log rotation](../../config/containers/logging/json-file.md), use an -[alternative logging driver](../../config/containers/logging/configure.md#configure-the-default-logging-driver) -such as the ["local" logging driver](../../config/containers/logging/local.md) -that performs log rotation by default, or use a logging driver that sends -logs to a remote logging aggregator. +To avoid issues with overusing disk for log data, consider one of the following +options: + +- Configure the `json-file` logging driver to turn on + [log rotation](../../config/containers/logging/json-file.md) +- Use an + [alternative logging driver](../../config/containers/logging/configure.md#configure-the-default-logging-driver) + such as the ["local" logging driver](../../config/containers/logging/local.md) + that performs log rotation by default +- Use a logging driver that sends logs to a remote logging aggregator. ## Configure where the Docker daemon listens for connections -By default, the Docker daemon listens for connections on a UNIX socket to accept -requests from local clients. It is possible to allow Docker to accept requests +By default, the Docker daemon listens for connections on a Unix socket to accept +requests from local clients. It's possible to allow Docker to accept requests from remote hosts by configuring it to listen on an IP address and port as well -as the UNIX socket. For more detailed information on this configuration option -take a look at "Bind Docker to another host/port or a unix socket" section of -the [Docker CLI Reference](/engine/reference/commandline/dockerd/) article. +as the Unix socket. For more detailed information on this configuration option, +refer to the +[dockerd CLI reference](/engine/reference/commandline/dockerd/#bind-docker-to-another-hostport-or-a-unix-socket). + > Secure your connection -> -> Before configuring Docker to accept connections from remote hosts it is critically important that you -> understand the security implications of opening docker to the network. If steps are not taken to secure the connection, -> it is possible for remote non-root users to gain root access on the host. For more information on how to use TLS -> certificates to secure this connection, check this article on -> [how to protect the Docker daemon socket](../security/protect-access.md). +> +> Before configuring Docker to accept connections from remote hosts it's +> critically important that you understand the security implications of opening +> Docker to the network. If steps aren't taken to secure the connection, it's +> possible for remote non-root users to gain root access on the host. For more +> information on how to use TLS certificates to secure this connection, check +> [Protect the Docker daemon socket](../security/protect-access.md). {: .warning} -Configuring Docker to accept remote connections can be done with the `docker.service` -systemd unit file for Linux distributions using systemd, such as recent versions -of RedHat, CentOS, Ubuntu and SLES, or with the `daemon.json` file which is -recommended for Linux distributions that do not use systemd. +You can configure Docker to accept remote connections. This can be done using +the `docker.service` systemd unit file for Linux distributions using systemd. Or +you can use the `daemon.json` file, if your distribution doesn't use systemd. -> systemd vs daemon.json -> -> Configuring Docker to listen for connections using both the `systemd` unit file and the `daemon.json` -> file causes a conflict that prevents Docker from starting. +> systemd vs `daemon.json` +> +> Configuring Docker to listen for connections using both the systemd unit file +> and the `daemon.json` file causes a conflict that prevents Docker from +> starting. -### Configuring remote access with `systemd` unit file +### Configuring remote access with systemd unit file -1. Use the command `sudo systemctl edit docker.service` to open an override file for `docker.service` in a text editor. +1. Use the command `sudo systemctl edit docker.service` to open an override file + for `docker.service` in a text editor. -2. Add or modify the following lines, substituting your own values. +2. Add or modify the following lines, substituting your own values. - ```systemd - [Service] - ExecStart= - ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375 - ``` + ```systemd + [Service] + ExecStart= + ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375 + ``` 3. Save the file. @@ -180,323 +185,49 @@ recommended for Linux distributions that do not use systemd. ```console $ sudo systemctl daemon-reload - ``` + ``` -5. Restart Docker. +5. Restart Docker. - ```console - $ sudo systemctl restart docker.service - ``` + ```console + $ sudo systemctl restart docker.service + ``` -6. Check to see whether the change was honored by reviewing the output of `netstat` to confirm `dockerd` is listening on the configured port. +6. Verify that the change has gone through. + + ```console + $ sudo netstat -lntp | grep dockerd + tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd + ``` - ```console - $ sudo netstat -lntp | grep dockerd - tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd - ``` - ### Configuring remote access with `daemon.json` -1. Set the `hosts` array in the `/etc/docker/daemon.json` to connect to the UNIX socket and an IP address, as follows: +1. Set the `hosts` array in the `/etc/docker/daemon.json` to connect to the UNIX + socket and an IP address, as follows: - ```json - { - "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"] - } - ``` + ```json + { + "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"] + } + ``` -2. Restart Docker. +2. Restart Docker. -3. Check to see whether the change was honored by reviewing the output of `netstat` to confirm `dockerd` is listening on the configured port. +3. Verify that the change has gone through. + + ```console + $ sudo netstat -lntp | grep dockerd + tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd + ``` - ```console - $ sudo netstat -lntp | grep dockerd - tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd - ``` - ## Enable IPv6 on the Docker daemon To enable IPv6 on the Docker daemon, see [Enable IPv6 support](../../config/daemon/ipv6.md). -## Troubleshooting - -### Kernel compatibility - -Docker cannot run correctly if your kernel is older than version 3.10 or if it -is missing some modules. To check kernel compatibility, you can download and -run the [`check-config.sh`](https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh) -script. - -```console -$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh - -$ bash ./check-config.sh -``` - -The script only works on Linux, not macOS. - -### `Cannot connect to the Docker daemon` - -If you see an error such as the following, your Docker client may be configured -to connect to a Docker daemon on a different host, and that host may not be -reachable. - -```none -Cannot connect to the Docker daemon. Is 'docker daemon' running on this host? -``` - -To see which host your client is configured to connect to, check the value of -the `DOCKER_HOST` variable in your environment. - -```console -$ env | grep DOCKER_HOST -``` - -If this command returns a value, the Docker client is set to connect to a -Docker daemon running on that host. If it is unset, the Docker client is set to -connect to the Docker daemon running on the local host. If it is set in error, -use the following command to unset it: - -```console -$ unset DOCKER_HOST -``` - -You may need to edit your environment in files such as `~/.bashrc` or -`~/.profile` to prevent the `DOCKER_HOST` variable from being set -erroneously. - -If `DOCKER_HOST` is set as intended, verify that the Docker daemon is running -on the remote host and that a firewall or network outage is not preventing you -from connecting. - -### IP forwarding problems - -If you manually configure your network using `systemd-network` with `systemd` -version 219 or higher, Docker containers may not be able to access your network. -Beginning with `systemd` version 220, the forwarding setting for a given network -(`net.ipv4.conf..forwarding`) defaults to *off*. This setting -prevents IP forwarding. It also conflicts with Docker's behavior of enabling -the `net.ipv4.conf.all.forwarding` setting within containers. - -To work around this on RHEL, CentOS, or Fedora, edit the `.network` -file in `/usr/lib/systemd/network/` on your Docker host -(ex: `/usr/lib/systemd/network/80-container-host0.network`) and add the -following block within the `[Network]` section. - -```systemd -[Network] -... -IPForward=kernel -# OR -IPForward=true -``` - -This configuration allows IP forwarding from the container as expected. - - -### `DNS resolver found in resolv.conf and containers can't use it` - -Linux systems which use a GUI often have a network manager running, which uses a -`dnsmasq` instance running on a loopback address such as `127.0.0.1` or -`127.0.1.1` to cache DNS requests, and adds this entry to -`/etc/resolv.conf`. The `dnsmasq` service speeds up -DNS look-ups and also provides DHCP services. This configuration does not work -within a Docker container which has its own network namespace, because -the Docker container resolves loopback addresses such as `127.0.0.1` to -**itself**, and it is very unlikely to be running a DNS server on its own -loopback address. - -If Docker detects that no DNS server referenced in `/etc/resolv.conf` is a fully -functional DNS server, the following warning occurs and Docker uses the public -DNS servers provided by Google at `8.8.8.8` and `8.8.4.4` for DNS resolution. - -```none -WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers -can't use it. Using default external servers : [8.8.8.8 8.8.4.4] -``` - -If you see this warning, first check to see if you use `dnsmasq`: - -```console -$ ps aux |grep dnsmasq -``` - -If your container needs to resolve hosts which are internal to your network, the -public nameservers are not adequate. You have two choices: - -- You can specify a DNS server for Docker to use, **or** -- You can disable `dnsmasq` in NetworkManager. If you do this, NetworkManager - adds your true DNS nameserver to `/etc/resolv.conf`, but you lose the - possible benefits of `dnsmasq`. - -**You only need to use one of these methods.** - -### Specify DNS servers for Docker - -The default location of the configuration file is `/etc/docker/daemon.json`. You -can change the location of the configuration file using the `--config-file` -daemon flag. The documentation below assumes the configuration file is located -at `/etc/docker/daemon.json`. - -1. Create or edit the Docker daemon configuration file, which defaults to - `/etc/docker/daemon.json` file, which controls the Docker daemon - configuration. - - ```console - $ sudo nano /etc/docker/daemon.json - ``` - -2. Add a `dns` key with one or more IP addresses as values. If the file has - existing contents, you only need to add or edit the `dns` line. - - ```json - { - "dns": ["8.8.8.8", "8.8.4.4"] - } - ``` - - If your internal DNS server cannot resolve public IP addresses, include at - least one DNS server which can, so that you can connect to Docker Hub and so - that your containers can resolve internet domain names. - - Save and close the file. - -3. Restart the Docker daemon. - - ```console - $ sudo service docker restart - ``` - -4. Verify that Docker can resolve external IP addresses by trying to pull an - image: - - ```console - $ docker pull hello-world - ``` - -5. If necessary, verify that Docker containers can resolve an internal hostname - by pinging it. - - ```console - $ docker run --rm -it alpine ping -c4 - - PING google.com (192.168.1.2): 56 data bytes - 64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms - 64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms - 64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms - 64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms - ``` - -#### Disable `dnsmasq` - -##### Ubuntu - -If you prefer not to change the Docker daemon's configuration to use a specific -IP address, follow these instructions to disable `dnsmasq` in NetworkManager. - -1. Edit the `/etc/NetworkManager/NetworkManager.conf` file. - -2. Comment out the `dns=dnsmasq` line by adding a `#` character to the beginning - of the line. - - ```none - # dns=dnsmasq - ``` - - Save and close the file. - -3. Restart both NetworkManager and Docker. As an alternative, you can reboot - your system. - - ```console - $ sudo systemctl restart network-manager - $ sudo systemctl restart docker - ``` - -##### RHEL, CentOS, or Fedora - -To disable `dnsmasq` on RHEL, CentOS, or Fedora: - -1. Disable the `dnsmasq` service: - - ```console - $ sudo systemctl stop dnsmasq - $ sudo systemctl disable dnsmasq - ``` - -2. Configure the DNS servers manually using the - [Red Hat documentation](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html){: target="_blank" rel="noopener" class="_"}. - -### Allow access to the remote API through a firewall - -If you run a firewall on the same host as you run Docker and you want to access -the Docker Remote API from another host and remote access is enabled, you need -to configure your firewall to allow incoming connections on the Docker port, -which defaults to `2376` if TLS encrypted transport is enabled or `2375` -otherwise. - -Two common firewall daemons are -[UFW (Uncomplicated Firewall)](https://help.ubuntu.com/community/UFW) (often -used for Ubuntu systems) and [firewalld](https://firewalld.org) (often used -for RPM-based systems). Consult the documentation for your OS and firewall, but -the following information might help you get started. These options are fairly -permissive and you may want to use a different configuration that locks your -system down more. - -- **UFW**: Set `DEFAULT_FORWARD_POLICY="ACCEPT"` in your configuration. - -- **firewalld**: Add rules similar to the following to your policy (one for - incoming requests and one for outgoing requests). Be sure the interface names - and chain names are correct. - - ```xml - - [ -i zt0 -j ACCEPT ] - [ -o zt0 -j ACCEPT ] - - ``` - -### `Your kernel does not support cgroup swap limit capabilities` - -On Ubuntu or Debian hosts, You may see messages similar to the following when -working with an image. - -```none -WARNING: Your kernel does not support swap limit capabilities. Limitation discarded. -``` - -This warning does not occur on RPM-based systems, which enable these -capabilities by default. - -If you don't need these capabilities, you can ignore the warning. You can enable -these capabilities on Ubuntu or Debian by following these instructions. Memory -and swap accounting incur an overhead of about 1% of the total available memory -and a 10% overall performance degradation, even if Docker is not running. - -1. Log into the Ubuntu or Debian host as a user with `sudo` privileges. - -2. Edit the `/etc/default/grub` file. Add or edit the `GRUB_CMDLINE_LINUX` line - to add the following two key-value pairs: - - ```none - GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" - ``` - - Save and close the file. - -3. Update GRUB. - - ```console - $ sudo update-grub - ``` - - If your GRUB configuration file has incorrect syntax, an error occurs. - In this case, repeat steps 2 and 3. - - The changes take effect when the system is rebooted. - ## Next steps -- Take a look at the [Get started](../../get-started/index.md) training modules to learn how to build an image and run it as a containerized application. -- Review the topics in [Develop with Docker](../../develop/index.md) to learn how to build new applications using Docker. +- Take a look at the [Get started](../../get-started/index.md) training modules + to learn how to build an image and run it as a containerized application. +- Review the topics in [Develop with Docker](../../develop/index.md) to learn + how to build new applications using Docker. diff --git a/engine/install/troubleshoot.md b/engine/install/troubleshoot.md new file mode 100644 index 0000000000..c1cfa1b8b3 --- /dev/null +++ b/engine/install/troubleshoot.md @@ -0,0 +1,293 @@ +--- +title: Troubleshoot Docker Engine +description: + Diagnose and resolve error messages related to the Docker Engine installation +keywords: Docker Engine, troubleshooting, error, Linux +--- + +This page contains instructions for troubleshooting and diagnosing the Docker +Engine installation. + +## Kernel compatibility + +Docker can't run correctly if your kernel is older than version 3.10, or if it's +missing kernel modules. To check kernel compatibility, you can download and run +the +[`check-config.sh`](https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh) +script. + +```console +$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh + +$ bash ./check-config.sh +``` + +The script only works on Linux. + +## Unable to connect to the Docker daemon + +```none +Cannot connect to the Docker daemon. Is 'docker daemon' running on this host? +``` + +This error may indicate: + +- The Docker daemon isn't running on your system. Start the daemon and try + running the command again. +- Your Docker client is attempting to connect to a Docker daemon on a different + host, and that host is unreachable. + +To see which host your client is connecting to, check the value of the +`DOCKER_HOST` variable in your environment. + +```console +$ env | grep DOCKER_HOST +``` + +If this command returns a value, the Docker client is set to connect to a Docker +daemon running on that host. If it's unset, the Docker client is set to connect +to the Docker daemon running on the local host. If it's set in error, use the +following command to unset it: + +```console +$ unset DOCKER_HOST +``` + +You may need to edit your environment in files such as `~/.bashrc` or +`~/.profile` to prevent the `DOCKER_HOST` variable from being set erroneously. + +If `DOCKER_HOST` is set as intended, verify that the Docker daemon is running on +the remote host and that a firewall or network outage isn't preventing you from +connecting. + +## IP forwarding problems + +If you manually configure your network using `systemd-network` with systemd +version 219 or later, Docker containers may not be able to access your network. +Beginning with systemd version 220, the forwarding setting for a given network +(`net.ipv4.conf..forwarding`) defaults to off. This setting prevents +IP forwarding. It also conflicts with Docker's behavior of enabling the +`net.ipv4.conf.all.forwarding` setting within containers. + +To work around this on RHEL, CentOS, or Fedora, edit the `.network` +file in `/usr/lib/systemd/network/` on your Docker host, for example, +`/usr/lib/systemd/network/80-container-host0.network`. + +Add the following block within the `[Network]` section. + +```systemd +[Network] +... +IPForward=kernel +# OR +IPForward=true +``` + +This configuration allows IP forwarding from the container as expected. + +## DNS resolver issues + +```console +DNS resolver found in resolv.conf and containers can't use it +``` + +Linux desktop environments often have a network manager program running, that +uses `dnsmasq` to cache DNS requests by adding them to `/etc/resolv.conf`. The +`dnsmasq` instance runs on a loopback address such as `127.0.0.1` or +`127.0.1.1`. It speeds up DNS look-ups and provides DHCP services. Such a +configuration doesn't work within a Docker container. The Docker container uses +its own network namespace, and resolves loopback addresses such as `127.0.0.1` +to itself, and it's unlikely to be running a DNS server on its own loopback +address. + +If Docker detects that no DNS server referenced in `/etc/resolv.conf` is a fully +functional DNS server, the following warning occurs: + +```none +WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers +can't use it. Using default external servers : [8.8.8.8 8.8.4.4] +``` + +If you see this warning, first check to see if you use `dnsmasq`: + +```console +$ ps aux | grep dnsmasq +``` + +If your container needs to resolve hosts which are internal to your network, the +public nameservers aren't adequate. You have two choices: + +- Specify DNS servers for Docker to use. +- Turn off `dnsmasq`. + + Turning off `dnsmasq` adds the IP addresses of actual DNS nameserver to + `/etc/resolv.conf`, and you lose the benefits of `dnsmasq`. + +You only need to use one of these methods. + +## Specify DNS servers for Docker + +The default location of the configuration file is `/etc/docker/daemon.json`. You +can change the location of the configuration file using the `--config-file` +daemon flag. The following instruction assumes that the location of the +configuration file is `/etc/docker/daemon.json`. + +1. Create or edit the Docker daemon configuration file, which defaults to + `/etc/docker/daemon.json` file, which controls the Docker daemon + configuration. + + ```console + $ sudo nano /etc/docker/daemon.json + ``` + +2. Add a `dns` key with one or more DNS server IP addresses as values. + + ```json + { + "dns": ["8.8.8.8", "8.8.4.4"] + } + ``` + + If the file has existing contents, you only need to add or edit the `dns` + line. If your internal DNS server can't resolve public IP addresses, include + at least one DNS server that can. Doing so allows you to connect to Docker + Hub, and your containers to resolve internet domain names. + + Save and close the file. + +3. Restart the Docker daemon. + + ```console + $ sudo service docker restart + ``` + +4. Verify that Docker can resolve external IP addresses by trying to pull an + image: + + ```console + $ docker pull hello-world + ``` + +5. If necessary, verify that Docker containers can resolve an internal hostname + by pinging it. + + ```console + $ docker run --rm -it alpine ping -c4 + + PING google.com (192.168.1.2): 56 data bytes + 64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms + 64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms + 64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms + 64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms + ``` + +## Turn off `dnsmasq` + +### Ubuntu + +If you prefer not to change the Docker daemon's configuration to use a specific +IP address, follow these instructions to turn off `dnsmasq` in NetworkManager. + +1. Edit the `/etc/NetworkManager/NetworkManager.conf` file. + +2. Comment out the `dns=dnsmasq` line by adding a `#` character to the beginning + of the line. + + ```none + # dns=dnsmasq + ``` + + Save and close the file. + +3. Restart both NetworkManager and Docker. As an alternative, you can reboot + your system. + + ```console + $ sudo systemctl restart network-manager + $ sudo systemctl restart docker + ``` + +### RHEL, CentOS, or Fedora + +To turn off `dnsmasq` on RHEL, CentOS, or Fedora: + +1. Turn off the `dnsmasq` service: + + ```console + $ sudo systemctl stop dnsmasq + $ sudo systemctl disable dnsmasq + ``` + +2. Configure the DNS servers manually using the + [Red Hat documentation](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html){: + target="_blank" rel="noopener" class="_"}. + +## Allow access to the remote API through a firewall + +If you run a firewall on the same host as you run Docker, and you want to access +the Docker Remote API from another remote host, you must configure your firewall +to allow incoming connections on the Docker port. The default port is `2376` if +you're using TLS encrypted transport, or `2375` otherwise. + +Two common firewall daemons are: + +- [Uncomplicated Firewall (UFW)](https://help.ubuntu.com/community/UFW), often + used for Ubuntu systems. +- [firewalld](https://firewalld.org), often used for RPM-based systems. + +Consult the documentation for your OS and firewall. The following information +might help you get started. These settings used in this instruction are +permissive, and you may want to use a different configuration that locks your +system down more. + +- For UFW, set `DEFAULT_FORWARD_POLICY="ACCEPT"` in your configuration. + +- For firewalld, add rules similar to the following to your policy. One for + incoming requests, and one for outgoing requests. + + ```xml + + [ -i zt0 -j ACCEPT ] + [ -o zt0 -j ACCEPT ] + + ``` + + Make sure that the interface names and chain names are correct. + +## Kernel cgroup swap limit capabilities + +On Ubuntu or Debian hosts, you may see messages similar to the following when +working with an image. + +```none +WARNING: Your kernel does not support swap limit capabilities. Limitation discarded. +``` + +If you don't need these capabilities, you can ignore the warning. + +You can turn on these capabilities on Ubuntu or Debian by following these +instructions. Memory and swap accounting incur an overhead of about 1% of the +total available memory and a 10% overall performance degradation, even when +Docker isn't running. + +1. Log into the Ubuntu or Debian host as a user with `sudo` privileges. + +2. Edit the `/etc/default/grub` file. Add or edit the `GRUB_CMDLINE_LINUX` line + to add the following two key-value pairs: + + ```none + GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" + ``` + + Save and close the file. + +3. Update the GRUB boot loader. + + ```console + $ sudo update-grub + ``` + + An error occurs if your GRUB configuration file has incorrect syntax. In this + case, repeat steps 2 and 3. + + The changes take effect when you reboot the system. diff --git a/engine/reference/commandline/info.md b/engine/reference/commandline/info.md index 9e01ff91f7..dd090f6ba1 100644 --- a/engine/reference/commandline/info.md +++ b/engine/reference/commandline/info.md @@ -30,4 +30,3 @@ WARNING: No swap limit support You can ignore these warnings unless you actually need the ability to [limit these resources](../../../config/containers/resource_constraints.md), in which case you should consult your operating system's documentation for enabling them. -[Learn more](../../install/linux-postinstall.md#your-kernel-does-not-support-cgroup-swap-limit-capabilities). From a6ea7fd7973be188ef9012a9f8f1a8f2e3263def Mon Sep 17 00:00:00 2001 From: Fazlan Nazeem Date: Wed, 26 Oct 2022 10:31:40 +0100 Subject: [PATCH 50/54] Remove duplicated content in 'Teams and Organizations' --- docker-hub/orgs.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docker-hub/orgs.md b/docker-hub/orgs.md index ae88708f59..37c6d53a7f 100644 --- a/docker-hub/orgs.md +++ b/docker-hub/orgs.md @@ -10,7 +10,10 @@ Docker Hub organizations let you create teams so you can give your team access to shared image repositories. An **Organization** is a collection of teams and repositories -that can be managed together. Docker users become members of an organization +that can be managed together. A **Team** is a group of Docker users that belong to an organization. +An organization can have multiple teams. + +Docker users become members of an organization when they are assigned to at least one team in the organization. When you first create an organization, you’ll see that you have a team, the **owners** (Admins) team, with a single member. An organization owner is someone that is part of the @@ -20,12 +23,6 @@ selecting a team the user should be part of. An org owner can also add additional org owners to help them manage users, teams, and repositories in the organization. -A **Team** is a group of Docker users that belong to an organization. An -organization can have multiple teams. When you first create an organization, -you’ll see that you have a team, the **owners** team, with a single member. An -organization owner can then create new teams and add members to an existing team -using their Docker ID or email address and by selecting a team the user should be part of. - ## Create an organization There are multiple ways to create an organization. You can create a brand new From a16eff5814bc380c6379c31a87f4f6bc840f4c87 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 26 Oct 2022 05:59:17 +0200 Subject: [PATCH 51/54] jekyll: last modification date for remote resources Signed-off-by: CrazyMax --- Gemfile | 1 - Gemfile.lock | 5 ----- _plugins/fetch_remote.rb | 21 +++++++++++---------- _plugins/last_modified_at.rb | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 _plugins/last_modified_at.rb diff --git a/Gemfile b/Gemfile index 32ecc842ec..6ac458fb5c 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,6 @@ gem 'wdm', '>= 0.1.0' if Gem.win_platform? gem 'jekyll', '4.2.2' group :jekyll_plugins do - gem 'jekyll-last-modified-at' gem 'jekyll-redirect-from' gem 'jekyll-relative-links' gem 'jekyll-sitemap' diff --git a/Gemfile.lock b/Gemfile.lock index 3a5e9de03a..51374f9eb8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -45,9 +45,6 @@ GEM rouge (~> 3.0) safe_yaml (~> 1.0) terminal-table (~> 2.0) - jekyll-last-modified-at (1.3.0) - jekyll (>= 3.7, < 5.0) - posix-spawn (~> 0.3.9) jekyll-redirect-from (0.16.0) jekyll (>= 3.3, < 5.0) jekyll-relative-links (0.6.1) @@ -91,7 +88,6 @@ GEM parallel (1.22.1) pathutil (0.16.2) forwardable-extended (~> 2.6) - posix-spawn (0.3.15) public_suffix (5.0.0) racc (1.6.0) rainbow (3.1.1) @@ -123,7 +119,6 @@ DEPENDENCIES git (= 1.12.0) html-proofer (= 3.19.4) jekyll (= 4.2.2) - jekyll-last-modified-at jekyll-redirect-from jekyll-relative-links jekyll-sitemap diff --git a/_plugins/fetch_remote.rb b/_plugins/fetch_remote.rb index 3a8b69c718..158fb3919a 100644 --- a/_plugins/fetch_remote.rb +++ b/_plugins/fetch_remote.rb @@ -49,19 +49,17 @@ module Jekyll puts " Opening #{clonedir}" begin git = Git.open(clonedir) - git.chdir do - puts " Fetching #{entry['ref']}" - git.checkout(entry['ref']) - git.fetch - end + puts " Fetching #{entry['ref']}" + git.fetch + git.checkout(entry['ref']) rescue => e FileUtils.rm_rf(clonedir) puts " Cloning repository into #{clonedir}" - Git.clone("#{entry['repo']}.git", Pathname.new(clonedir), branch: entry['ref']) + git = Git.clone("#{entry['repo']}.git", Pathname.new(clonedir), branch: entry['ref'], depth: 1) end else puts " Cloning repository into #{clonedir}" - Git.clone("#{entry['repo']}.git", Pathname.new(clonedir), branch: entry['ref']) + git = Git.clone("#{entry['repo']}.git", Pathname.new(clonedir), branch: entry['ref'], depth: 1) end entry['paths'].each do |path| @@ -111,13 +109,16 @@ module Jekyll # set edit and issue url and remote info for markdown files in site config defaults edit_url = "#{entry['repo']}/edit/#{entry['default_branch']}/#{file_clean}" issue_url = "#{entry['repo']}/issues/new?body=File: [#{file_clean}](#{get_docs_url}/#{destent.path.sub(/#{File.extname(destent.path)}$/, '')}/)" - puts " edit_url: #{edit_url}" - puts " issue_url: #{issue_url}" + last_modified_at = git.log.path(file_clean).first.date.strftime(LastModifiedAt::DATE_FORMAT) + puts " edit_url: #{edit_url}" + puts " issue_url: #{issue_url}" + puts " last_modified_at: #{last_modified_at}" site.config['defaults'] << { "scope" => { "path" => destent.path }, "values" => { "edit_url" => edit_url, - "issue_url" => issue_url + "issue_url" => issue_url, + "last_modified_at" => last_modified_at, }, } end, proc do |_| end) diff --git a/_plugins/last_modified_at.rb b/_plugins/last_modified_at.rb new file mode 100644 index 0000000000..09bddfd1d9 --- /dev/null +++ b/_plugins/last_modified_at.rb @@ -0,0 +1,35 @@ +require 'git' +require 'jekyll' +require 'octopress-hooks' + +module Jekyll + class LastModifiedAt < Octopress::Hooks::Site + DATE_FORMAT = '%Y-%m-%d %H:%M:%S %z' + def pre_render(site) + if get_docs_url == "http://localhost:4000" + # Do not generate last_modified_at for local development + return + end + + beginning_time = Time.now + Jekyll.logger.info "Starting plugin last_modified_at.rb..." + + git = Git.open(site.source) + site.pages.each do |page| + next if page.relative_path == "redirect.html" + next unless File.extname(page.relative_path) == ".md" || File.extname(page.relative_path) == ".html" + unless page.data.key?('last_modified_at') + begin + page.data['last_modified_at'] = git.log.path(page.relative_path).first.date.strftime(DATE_FORMAT) + rescue => e + # Ignored + end + end + puts" #{page.relative_path}\n last_modified_at: #{page.data['last_modified_at']}" + end + + end_time = Time.now + Jekyll.logger.info "done in #{(end_time - beginning_time)} seconds" + end + end +end From a06e8976a501e4d8a9247e3698ed43d9fea17b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20Ar=C4=B1l=C4=B1k?= Date: Wed, 26 Oct 2022 16:44:23 +0300 Subject: [PATCH 52/54] Update latest docker version --- desktop/install/ubuntu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/install/ubuntu.md b/desktop/install/ubuntu.md index fd1303c2d4..1e0606098e 100644 --- a/desktop/install/ubuntu.md +++ b/desktop/install/ubuntu.md @@ -48,7 +48,7 @@ Recommended approach to install Docker Desktop on Ubuntu: 1. Set up [Docker's package repository](../../engine/install/ubuntu.md#set-up-the-repository). -2. Download latest [DEB package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.12.0-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64). +2. Download latest [DEB package](https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.0-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64). 3. Install the package with apt as follows: From ec5edc79496928365f6f3d115f44e20204d19c27 Mon Sep 17 00:00:00 2001 From: Craig Osterhout <103533812+craig-osterhout@users.noreply.github.com> Date: Wed, 26 Oct 2022 13:56:54 -0700 Subject: [PATCH 53/54] [ENGDOCS-943] Create C# .NET language-specific guide (#15666) * create .net guide --- _data/toc.yaml | 14 + language/dotnet/build-images.md | 300 ++++++++++++ language/dotnet/configure-ci-cd.md | 249 ++++++++++ language/dotnet/deploy.md | 13 + language/dotnet/develop.md | 460 ++++++++++++++++++ language/dotnet/images/dotnet-adminer-add.png | Bin 0 -> 28057 bytes language/dotnet/images/dotnet-adminer-db.png | Bin 0 -> 50292 bytes .../dotnet/images/dotnet-adminer-login.png | Bin 0 -> 15030 bytes .../dotnet/images/dotnet-adminer-table.png | Bin 0 -> 39201 bytes .../dotnet/images/dotnet-app-verify-build.png | Bin 0 -> 16874 bytes .../images/dotnet-app-verify-db-add.png | Bin 0 -> 18152 bytes language/dotnet/images/dotnet-verify-db.png | Bin 0 -> 17928 bytes language/dotnet/index.md | 24 + language/dotnet/nav.html | 7 + language/dotnet/run-containers.md | 170 +++++++ language/images/c-sharp.png | Bin 0 -> 6307 bytes language/index.md | 5 +- 17 files changed, 1241 insertions(+), 1 deletion(-) create mode 100644 language/dotnet/build-images.md create mode 100644 language/dotnet/configure-ci-cd.md create mode 100644 language/dotnet/deploy.md create mode 100644 language/dotnet/develop.md create mode 100644 language/dotnet/images/dotnet-adminer-add.png create mode 100644 language/dotnet/images/dotnet-adminer-db.png create mode 100644 language/dotnet/images/dotnet-adminer-login.png create mode 100644 language/dotnet/images/dotnet-adminer-table.png create mode 100644 language/dotnet/images/dotnet-app-verify-build.png create mode 100644 language/dotnet/images/dotnet-app-verify-db-add.png create mode 100644 language/dotnet/images/dotnet-verify-db.png create mode 100644 language/dotnet/index.md create mode 100644 language/dotnet/nav.html create mode 100644 language/dotnet/run-containers.md create mode 100644 language/images/c-sharp.png diff --git a/_data/toc.yaml b/_data/toc.yaml index b999d72001..9a4c1b9dcb 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -115,6 +115,20 @@ guides: path: /language/golang/configure-ci-cd/ - title: "Deploy your app" path: /language/golang/deploy/ + - sectiontitle: C# (.NET) + section: + - title: "Overview" + path: /language/dotnet/ + - title: "Build images" + path: /language/dotnet/build-images/ + - title: "Run containers" + path: /language/dotnet/run-containers/ + - title: "Develop your app" + path: /language/dotnet/develop/ + - title: "Configure CI/CD" + path: /language/dotnet/configure-ci-cd/ + - title: "Deploy your app" + path: /language/dotnet/deploy/ - sectiontitle: Develop with Docker section: - path: /develop/ diff --git a/language/dotnet/build-images.md b/language/dotnet/build-images.md new file mode 100644 index 0000000000..eb7fe0d631 --- /dev/null +++ b/language/dotnet/build-images.md @@ -0,0 +1,300 @@ +--- +title: "Build your .NET image" +keywords: .net, build, images, dockerfile +description: Learn how to build your first Docker image by writing a Dockerfile +--- + +{% include_relative nav.html selected="1" %} + +## Prerequisites + +Work through the [Get started guide](../../get-started/index.md) to understand Docker concepts. + +## Overview + +Now that we have a good overview of containers and the Docker platform, let’s take a look at building our first image. An image includes everything needed to run an application - the code or binary, runtime, dependencies, and any other file system objects required. + +To complete this tutorial, you need the following: + +- .NET SDK version 6.0 or later. [Download .NET SDK](https://dotnet.microsoft.com/download){: target="_blank" rel="noopener" class="_"}. +- Docker running locally. Follow the instructions to [download and install Docker](../../get-docker.md). +- An IDE or a text editor to edit files. We recommend using [Visual Studio Code](https://code.visualstudio.com/){: target="_blank" rel="noopener" class="_"}. + +## Sample application + +For our sample application, let’s create a simple application from a template using .NET. Create a directory in your local machine named `dotnet-docker`. Open a terminal and change to that directory. Run the following `dotnet new` command to create a C# app using the ASP.NET Core Web App template. + +```console +$ mkdir dotnet-docker +$ cd dotnet-docker +$ dotnet new webApp -n myWebApp -o src --no-https +``` + +Output similar to the following appears. + +```console +The template ASP.NET Core Web App was created successfully. +This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore/6.0-third-party-notices for details. +``` + +The command will create a new directory called `src`. View the `src` directory and verify the contents. You should see the following directories and files. + +```shell +├── Pages +│ ├── Error.cshtml +│ ├── Error.cshtml.cs +│ ├── Index.cshtml +│ ├── Index.cshtml.cs +│ ├── Privacy.cshtml +│ ├── Privacy.cshtml.cs +│ ├── Shared +│ ├── _ViewImports.cshtml +│ └── _ViewStart.cshtml +├── Program.cs +├── Properties +│ └── launchSettings.json +├── appsettings.Development.json +├── appsettings.json +├── myWebApp.csproj +├── obj +│ ├── myWebApp.csproj.nuget.dgspec.json +│ ├── myWebApp.csproj.nuget.g.props +│ ├── myWebApp.csproj.nuget.g.targets +│ ├── project.assets.json +│ └── project.nuget.cache +└── wwwroot +├── css +├── favicon.ico +├── js +└── lib +``` + +## Test the application + +Let’s start our application and make sure it’s running properly. Open your terminal and navigate to the `src` directory and use the `dotnet run` command. + +```console +$ cd /path/to/dotnet-docker/src +$ dotnet run --urls http://localhost:5000 +``` + +Output similar to the following appears. + +```console +Building... +info: Microsoft.Hosting.Lifetime[0] + Now listening on: http://localhost:5000 +info: Microsoft.Hosting.Lifetime[0] + Application started. Press Ctrl+C to shut down. +info: Microsoft.Hosting.Lifetime[0] + Hosting environment: Development +info: Microsoft.Hosting.Lifetime[0] + Content root path: C:\Users\username\dotnet-docker\src\ +``` +Read the output to verify how you can access the application. In the example above, `Now listening on: http://localhost:5000` indicates that you access the application at `http://localhost:5000`. + +Open a web browser and access the application based on the URL in the output. The following page should appear. + +![image of app page](./images/dotnet-app-verify-build.png) + +Press Ctrl+C in the terminal window to stop the application. + +## Create a Dockerfile + +In the `dotnet-docker\src` directory, create a file named `Dockerfile`. + +Next, we need to add a line in our Dockerfile that tells Docker what image +we would like to use to build our application. Open the `Dockerfile` in an IDE or a text editor, and add the following instructions. + +```dockerfile +# syntax=docker/dockerfile:1 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 as build-env +``` + +Docker images can be inherited from other images. Therefore, instead of creating our own image, we’ll use the official .NET SDK image that already has all the tools and packages that we need to build a .NET application. + +We will use a multi-stage build and define a stage for building the application.We define a `build-env` stage in our Dockerfile using `as`. + +> **Note** +> +> To learn more about multi-stage builds, see [Multi-stage builds](../../build/building/multi-stage.md). + +To make things easier when running the rest of our commands, let’s create a working directory for our source files. This instructs Docker to use this path as the default location for all subsequent commands. By doing this, we do not have to type out full file paths but can use relative paths based on the working directory. + +```dockerfile +WORKDIR /src +``` + +Although not necessary, the commands below will copy only the csproj files and then run `dotnet restore`. Each command creates a new container layer. To speed the building of containers, Docker caches these layers. Since these files won't change often, we can take advantage of the caching by copying these files and running restore as separate commands. + + +```dockerfile +COPY src/*.csproj . +RUN dotnet restore +``` + +Next, you'll need to copy the rest of your source files into the image. The line below will copy the files from the `src` directory on your local machine to a directory called `src` in the image. + +```dockerfile +COPY src . +``` + +Next, you'll need to run the `dotnet publish` command to build the project. + +```dockerfile +RUN dotnet publish -c Release -o /publish +``` + +Next, you'll specify the image that you'll use to run the application, and define it as the `runtime` stage. + +```dockerfile +FROM mcr.microsoft.com/dotnet/aspnet:6.0 as runtime +``` + +Next, specify the working directory for this stage. + +```dockerfile +WORKDIR /app +``` + +Next, copy the /publish directory from the build-env stage into the runtime image. + +```dockerfile +COPY --from=build-env /publish . +``` + +Expose port 80 to incoming requests. + +```dockerfile +EXPOSE 80 +``` + +Now, all we have to do is to tell Docker what command we want to run when our image is executed inside a container. We do this using the ENTRYPOINT command. + +```dockerfile +ENTRYPOINT ["dotnet", "myWebApp.dll"] +``` + +Here's the complete Dockerfile. + +```dockerfile +# syntax=docker/dockerfile:1 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 as build-env +WORKDIR /src +COPY src/*.csproj . +RUN dotnet restore +COPY src . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +EXPOSE 80 +ENTRYPOINT ["dotnet", "myWebApp.dll"] +``` + +## .dockerignore file + +To make your build context as small as possible, add a .dockerignore file to your `dotnet-docker` folder and copy the following into it. + +```shell +**/bin/ +**/obj/ +``` + +> **Note** +> +> To learn more about .dockerignore, see [.dockerignore file](../../engine/reference/builder.md/#dockerignore-file). + + +### Directory structure + +Just to recap, we created a directory in our local machine called `dotnet-docker` and created a simple .NET application in the `src` folder. We also created a Dockerfile containing the commands to build an image as well as a .dockerignore file. The `dotnet-docker` directory structure should now look like: + +```shell +├── dotnet-docker +│ ├── src/ +│ ├── Dockerfile +│ ├── .dockerignore +``` + +## Build an image + +Now that we’ve created our Dockerfile, let’s build our image. To do this, we use the `docker build` command. The `docker build` command builds Docker images from a Dockerfile and a “context”. A build’s context is the set of files located in the specified PATH or URL. The Docker build process can access any of the files located in this context. + +The build command optionally takes a `--tag` flag. The tag is used to set the name of the image and an optional tag in the format `name:tag`. We’ll leave off the optional `tag` for now to help simplify things. If you do not pass a tag, Docker uses “latest” as its default tag. + +Let’s build our first Docker image. Change directory to the `dotnet-docker` directory and run `docker build`. + +```console +$ cd /path/to/dotnet-docker +$ docker build --tag dotnet-docker . +``` + +## View local images + +To see a list of images we have on our local machine, we have two options. One is to use the CLI and the other is to use [Docker Desktop](../../desktop/use-desktop/images.md). As we are currently working in the terminal let’s take a look at listing images using the CLI. + +To list images, simply run the `docker images` command. + +```console +$ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +dotnet-docker latest 8cae92a8fbd6 3 minutes ago 216MB +``` + +You should see at least one image listed, the image we just built `dotnet-docker:latest`. + +## Tag images + +As mentioned earlier, an image name is made up of slash-separated name components. Name components may contain lowercase letters, digits and separators. A separator is defined as a period, one or two underscores, or one or more dashes. A name component may not start or end with a separator. + +An image is made up of a manifest and a list of layers. Do not worry too much about manifests and layers at this point other than a “tag” points to a combination of these artifacts. You can have multiple tags for an image. Let’s create a second tag for the image we built and take a look at its layers. + +To create a new tag for the image we’ve built above, run the following command. + +```console +$ docker tag dotnet-docker:latest dotnet-docker:v1.0.0 +``` + +The `docker tag` command creates a new tag for an image. It does not create a new image. The tag points to the same image and is just another way to reference the image. + +Now, run the `docker images` command to see a list of our local images. + +```console +$ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +dotnet-docker latest 8cae92a8fbd6 4 minutes ago 216MB +dotnet-docker v1.0.0 8cae92a8fbd6 4 minutes ago 216MB +``` + +You can see that we have two images that start with `dotnet-docker`. We know they are the same image because if you take a look at the `IMAGE ID` column, you can see that the values are the same for the two images. + +Let’s remove the tag that we just created. To do this, we’ll use the `rmi` command. The `rmi` command stands for remove image. + +```console +$ docker rmi dotnet-docker:v1.0.0 +Untagged: dotnet-docker:v1.0.0 +``` + +Note that the response from Docker tells us that the image has not been removed but only “untagged”. You can check this by running the `docker images` command. + +```console +$ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +dotnet-docker latest 8cae92a8fbd6 6 minutes ago 216MB +``` + +Our image that was tagged with `:v1.0.0` has been removed, but we still have the `dotnet-docker:latest` tag available on our machine. + +## Next steps + +In this module, we took a look at setting up our example .NET application that we will use for the rest of the tutorial. We also created a Dockerfile that we used to build our Docker image. Then, we took a look at tagging our images and removing images. In the next module we’ll take a look at how to: + +[Run your image as a container](run-containers.md){: .button .primary-btn} + +## Feedback + +Help us improve this topic by providing your feedback. Let us know what you think by creating an issue in the [Docker Docs](https://github.com/docker/docker.github.io/issues/new?title=[dotnet%20docs%20feedback]){:target="_blank" rel="noopener" class="_"} GitHub repository. Alternatively, [create a PR](https://github.com/docker/docker.github.io/pulls){:target="_blank" rel="noopener" class="_"} to suggest updates. diff --git a/language/dotnet/configure-ci-cd.md b/language/dotnet/configure-ci-cd.md new file mode 100644 index 0000000000..f68533e0ad --- /dev/null +++ b/language/dotnet/configure-ci-cd.md @@ -0,0 +1,249 @@ +--- +title: "Configure CI/CD for your application" +keywords: .net, CI/CD, local, development +description: Learn how to Configure CI/CD for your application +--- + +{% include_relative nav.html selected="4" %} + +This page guides you through the process of setting up a GitHub Action CI/CD pipeline with Docker containers. Before setting up a new pipeline, we recommend that you take a look at [Ben's blog](https://www.docker.com/blog/best-practices-for-using-docker-hub-for-ci-cd/){:target="_blank" rel="noopener" class="_"} on CI/CD best practices . + +This guide contains instructions on how to: + +1. Use a sample Docker project as an example to configure GitHub Actions +2. Set up the GitHub Actions workflow +3. Optimize your workflow to reduce the number of pull requests and the total build time, and finally, +4. Push only specific versions to Docker Hub. + +## Set up a Docker project + +Let’s get started. This guide uses a simple Docker project as an example. The [SimpleWhaleDemo](https://github.com/usha-mandya/SimpleWhaleDemo){:target="_blank" rel="noopener" class="_"} repository contains an Nginx alpine image. You can either clone this repository, or use your own Docker project. + +![SimpleWhaleDemo](../../ci-cd/images/simplewhaledemo.png){:width="500px"} + +Before we start, ensure you can access [Docker Hub](https://hub.docker.com/) from any workflows you create. To do this: + +1. Add your Docker ID as a secret to GitHub. Navigate to your GitHub repository and click **Settings** > **Secrets** > **New secret**. + +2. Create a new secret with the name `DOCKER_HUB_USERNAME` and your Docker ID as value. + +3. Create a new Personal Access Token (PAT). To create a new token, go to [Docker Hub Settings](https://hub.docker.com/settings/security) and then click **New Access Token**. + +4. Let’s call this token **simplewhaleci**. + + ![New access token](../../ci-cd/images/github-access-token.png){:width="500px"} + +5. Now, add this Personal Access Token (PAT) as a second secret into the GitHub secrets UI with the name `DOCKER_HUB_ACCESS_TOKEN`. + + ![GitHub Secrets](../../ci-cd/images/github-secrets.png){:width="500px"} + +## Set up the GitHub Actions workflow + +In the previous section, we created a PAT and added it to GitHub to ensure we can access Docker Hub from any workflow. Now, let’s set up our GitHub Actions workflow to build and store our images in Hub. We can achieve this by creating two Docker actions: + +1. The first action enables us to log in to Docker Hub using the secrets we stored in the GitHub Repository. +2. The second one is the build and push action. + +In this example, let us set the push flag to `true` as we also want to push. We’ll then add a tag to specify to always go to the latest version. Lastly, we’ll echo the image digest to see what was pushed. + +To set up the workflow: + +1. Go to your repository in GitHub and then click **Actions** > **New workflow**. +2. Click **set up a workflow yourself** and add the following content: + +First, we will name this workflow: + +```yaml +name: CI to Docker Hub + ``` + +Then, we will choose when we run this workflow. In our example, we are going to do it for every push against the master branch of our project: + +```yaml +on: + push: + branches: [ master ] +``` + +> **Note** +> +> The branch name may be `main` or `master`. Verify the name of the branch for your repository and update the configuration accordingly. + +Now, we need to specify what we actually want to happen within our action (what jobs), we are going to add our build one and select that it runs on the latest Ubuntu instances available: + +```yaml +jobs: + + build: + runs-on: ubuntu-latest +``` + +Now, we can add the steps required. The first one checks-out our repository under `$GITHUB_WORKSPACE`, so our workflow can access it. The second is to use our PAT and username to log into Docker Hub. The third is the Builder, the action uses BuildKit under the hood through a simple Buildx action which we will also setup + +{% raw %} +```yaml + steps: + + - name: Check Out Repo + uses: actions/checkout@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: ./ + file: ./Dockerfile + push: true + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/simplewhale:latest + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} +``` +{% endraw %} + +Now, let the workflow run for the first time and then tweak the Dockerfile to make sure the CI is running and pushing the new image changes: + +![CI to Docker Hub](../../ci-cd/images/ci-to-hub.png){:width="500px"} + +## Optimizing the workflow + +Next, let’s look at how we can optimize the GitHub Actions workflow through build cache. This has two main advantages: + +1. Build cache reduces the build time as it will not have to re-download all of the images, and +2. It also reduces the number of pulls we complete against Docker Hub. We need to make use of GitHub cache to make use of this. + +Let us set up a Builder with a build cache. First, we need to set up cache for the builder. In this example, let us add the path and keys to store this under using GitHub cache for this. + +{% raw %} +```yaml + + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- +``` +{% endraw %} + +And lastly, after adding the builder and build cache snippets to the top of the Actions file, we need to add some extra attributes to the build and push step. This involves: + + - Setting up the builder to use the output of the buildx step, and then + - Using the cache we set up earlier for it to store to and to retrieve + +{% raw %} +```yaml + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: ./ + file: ./Dockerfile + builder: ${{ steps.buildx.outputs.name }} + push: true + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/simplewhale:latest + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} +``` +{% endraw %} + +Now, run the workflow again and verify that it uses the build cache. + +## Push tagged versions to Docker Hub + +Earlier, we learnt how to set up a GitHub Actions workflow to a Docker project, how to optimize the workflow by setting up a builder with build cache. Let’s now look at how we can improve it further. We can do this by adding the ability to have tagged versions behave differently to all commits to master. This means, only specific versions are pushed, instead of every commit updating the latest version on Docker Hub. + +You can consider this approach to have your commits go to a local registry to then use in nightly tests. By doing this, you can always test what is latest while reserving your tagged versions for release to Docker Hub. + +This involves two steps: + +1. Modifying the GitHub workflow to only push commits with specific tags to Docker Hub +2. Setting up a GitHub Actions file to store the latest commit as an image in the GitHub registry + +First, let us modify our existing GitHub workflow to only push to Hub if there’s a particular tag. For example: + +{% raw %} +```yaml +on: + push: + tags: + - "v*.*.*" +``` +{% endraw %} + +This ensures that the main CI will only trigger if we tag our commits with `Vn.n.n.` Let’s test this. For example, run the following command: + +```console +$ git tag -a v1.0.2 +$ git push origin v1.0.2 +``` + +Now, go to GitHub and check your Actions + +![Push tagged version](../../ci-cd/images/push-tagged-version.png){:width="500px"} + +Now, let’s set up a second GitHub action file to store our latest commit as an image in the GitHub registry. You may want to do this to: + +1. Run your nightly tests or recurring tests, or +2. To share work in progress images with colleagues. + +Let’s clone our previous GitHub action and add back in our previous logic for all pushes. This will mean we have two workflow files, our previous one and our new one we will now work on. +Next, change your Docker Hub login to a GitHub container registry login: + +{% raw %} +```yaml + if: github.event_name != 'pull_request' + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} +``` +{% endraw %} + +To authenticate against the [GitHub Container Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry), use the [`GITHUB_TOKEN`](https://docs.github.com/en/actions/reference/authentication-in-a-workflow) for the best security and experience. + +You may need to [manage write and read access of GitHub Actions](https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-ghcrio) for repositories in the container settings. + +You can also use a [personal access token (PAT)](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) with the [appropriate scopes](https://docs.github.com/en/packages/getting-started-with-github-container-registry/migrating-to-github-container-registry-for-docker-images#authenticating-with-the-container-registry). +Remember to change how the image is tagged. The following example keeps ‘latest’ as the only tag. However, you can add any logic to this if you prefer: + +{% raw %} +```yaml + tags: ghcr.io/${{ github.repository_owner }}/simplewhale:latest +``` +{% endraw %} + +![Update tagged images](../../ci-cd/images/ghcr-logic.png){:width="500px"} + +Now, we will have two different flows: one for our changes to master, and one for our pull requests. Next, we need to modify what we had before to ensure we are pushing our PRs to the GitHub registry rather than to Docker Hub. + +## Next steps + +In this module, you have learnt how to set up GitHub Actions workflow to an existing Docker project, optimize your workflow to improve build times and reduce the number of pull requests, and finally, we learnt how to push only specific versions to Docker Hub. You can also set up nightly tests against the latest tag, test each PR, or do something more elegant with the tags we are using and make use of the Git tag for the same tag in our image. + +You can also consider deploying your application. For detailed instructions, see: + +[Deploy your app](deploy.md){: .button .primary-btn} + +## Feedback + +Help us improve this topic by providing your feedback. Let us know what you think by creating an issue in the [Docker Docs](https://github.com/docker/docker.github.io/issues/new?title=[dotnet%20docs%20feedback]){:target="_blank" rel="noopener" class="_"} GitHub repository. Alternatively, [create a PR](https://github.com/docker/docker.github.io/pulls){:target="_blank" rel="noopener" class="_"} to suggest updates. diff --git a/language/dotnet/deploy.md b/language/dotnet/deploy.md new file mode 100644 index 0000000000..a7962547c0 --- /dev/null +++ b/language/dotnet/deploy.md @@ -0,0 +1,13 @@ +--- +title: "Deploy your app" +keywords: deploy, ACI, ECS, .net, local, development +description: Learn how to deploy your application +--- + +{% include_relative nav.html selected="5" %} + +{% include deploy.md %} + +## Feedback + +Help us improve this topic by providing your feedback. Let us know what you think by creating an issue in the [Docker Docs](https://github.com/docker/docker.github.io/issues/new?title=[dotnet%20docs%20feedback]){:target="_blank" rel="noopener" class="_"} GitHub repository. Alternatively, [create a PR](https://github.com/docker/docker.github.io/pulls){:target="_blank" rel="noopener" class="_"} to suggest updates. diff --git a/language/dotnet/develop.md b/language/dotnet/develop.md new file mode 100644 index 0000000000..d33c4bf2e0 --- /dev/null +++ b/language/dotnet/develop.md @@ -0,0 +1,460 @@ +--- +title: "Use containers for development" +keywords: .net, local, development, run, +description: Learn how to develop your application locally. +--- + +{% include_relative nav.html selected="3" %} + +## Prerequisites + +Work through the steps to build an image and run it as a containerized application in [Run your image as a container](run-containers.md). + +## Introduction + +In this module, we’ll walk through setting up a local development environment for the application we built in the previous modules. We’ll use Docker to build our images and Docker Compose to make everything a whole lot easier. + +## Run a database in a container + +First, we’ll take a look at running a database in a container and how we use volumes and networking to persist our data and allow our application to talk with the database. Then we’ll pull everything together into a Compose file which allows us to setup and run a local development environment with one command. + +Instead of downloading PostgreSQL, installing, configuring, and then running the PostgreSQL database as a service, we can use the Docker Official Image for PostgreSQL and run it in a container. + +Before we run PostgreSQL in a container, we'll create a volume that Docker can manage to store our persistent data. Let’s use the managed volumes feature that Docker provides instead of using bind mounts. You can read all about [Using volumes](../../storage/volumes.md) in our documentation. + +Let’s create our data volume now. + +```console +$ docker volume create postgres-data +``` + +Now we’ll create a network that our application and database will use to talk to each other. The network is called a user-defined bridge network and gives us a nice DNS lookup service which we can use when creating our connection string. + +```console +$ docker network create postgres-net +``` + +Now we can run PostgreSQL in a container and attach to the volume and network we created above. Docker pulls the image from Hub and runs it for you locally. +In the following command, option `-v` is for starting the container with the volume. For more information, see [Docker volumes](../../storage/volumes.md). + +```console +$ docker run --rm -d -v postgres-data:/var/lib/postgresql/data \ + --network postgres-net \ + --name db \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=example \ + postgres +``` + +Now, let’s make sure that our PostgreSQL database is running and that we can connect to it. Connect to the running PostgreSQL database inside the container using the following command: + +```console +$ docker exec -ti db psql -U postgres +psql (14.5 (Debian 14.5-1.pgdg110+1)) +Type "help" for help. + +postgres=# +``` + +Press CTRL-D to exit the interactive terminal. + + +## Update the application to connect to the database + +In the above command, we logged in to the PostgreSQL database by passing the `psql` command to the `db` container. + +Next, we'll update the sample application we created in the [Build images](build-images.md#sample-application) module. + +Let's add a package to allow the app to talk to a database and update the source files. On your local machine, open a terminal, change directory to the `src` directory and run the following command: + +```console +$ cd /path/to/dotnet-docker/src +$ dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL +``` + +In the `src` directory, create a `Models` folder. Inside the `Models` folder create a file named `Student.cs` and add the following code to `Student.cs`: + +```c# +using System; +using System.Collections.Generic; +namespace myWebApp.Models +{ + public class Student + { + public int ID { get; set; } + public string LastName { get; set; } + public string FirstMidName { get; set; } + public DateTime EnrollmentDate { get; set; } + } +} +``` +Save and close the `Student.cs` file. + +In the `src` directory, create a `Data` folder. Inside the `Data` folder create a file named `SchoolContext.cs` and add the following code to `SchoolContext.cs`: + +```c# +using Microsoft.EntityFrameworkCore; +namespace myWebApp.Data +{ + public class SchoolContext : DbContext + { + public SchoolContext(DbContextOptions options) : base(options) { } + public DbSet? Students { get; set; } + } +} +``` + +Save and close the `SchoolContext.cs` file. + +In the `Program.cs` file located in the `src` directory, replace the contents with the following code: + +```c# +using Microsoft.EntityFrameworkCore; +using myWebApp.Models; +using myWebApp.Data; + +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddRazorPages(); +// Add services to the container. +builder.Services.AddDbContext(options => + options.UseNpgsql(builder.Configuration.GetConnectionString("SchoolContext"))); + +var app = builder.Build(); +using (var scope = app.Services.CreateScope()) +{ + var services = scope.ServiceProvider; + try + { + // add 10 seconds delay to ensure the db server is up to accept connections + // this won't be needed in real world application + System.Threading.Thread.Sleep(10000); + var context = services.GetRequiredService(); + var created = context.Database.EnsureCreated(); + + } + catch (Exception ex) + { + var logger = services.GetRequiredService>(); + logger.LogError(ex, "An error occurred creating the DB."); + } +} + + +// Configure the HTTP request pipeline. +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); +} +app.UseStaticFiles(); + +app.UseRouting(); + +app.UseAuthorization(); + +app.MapRazorPages(); + +app.Run(); +``` + +Save and close the `Program.cs` file. + + +In the `appsettings.json` file located in the `src` directory, replace the contents with the following code: + +```json +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "SchoolContext": "Host=db;Database=my_db;Username=postgres;Password=example" + } +} +``` + +Save and close the `appsettings.json` file. + +In the `Index.cshtml` file located in the `src\Pages` directory, replace the contents with the following code: + +```html +@page +@model IndexModel +@{ + ViewData["Title"] = "Home page"; +} + +
    +

    Welcome

    +

    Learn about building Web apps with ASP.NET Core.

    +
    + +
    +

    Student Name is @Model.StudentName

    +
    +``` + +Save and close the `Index.cshtml` file. + +In the `Index.cshtml.cs` file located in the `src\Pages` directory, replace the contents with the following code: + +```c# +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace myWebApp.Pages; + +public class IndexModel : PageModel + { + public string StudentName { get; private set; } = "PageModel in C#"; + private readonly ILogger _logger; + private readonly myWebApp.Data.SchoolContext _context; + + public IndexModel(ILogger logger, myWebApp.Data.SchoolContext context) + { + _logger = logger; + _context= context; + } + + public void OnGet() + { + var s =_context.Students?.Where(d=>d.ID==1).FirstOrDefault(); + this.StudentName = $"{s?.FirstMidName} {s?.LastName}"; + } + } +``` + +Save and close the `Index.cshtml.cs` file. + +Now we can rebuild our image. Open a terminal, change directory to the `dotnet-docker` directory and run the following command: + +```console +$ docker build --tag dotnet-docker . +``` + +List your running containers. + +```console +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +146e1cb76e71 postgres "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 5432/tcp postgresqldb +72bef28b1cd4 dotnet-docker "./myWebApp" 40 minutes ago Up 40 minutes 0.0.0.0:5000->80/tcp dotnet-app +``` +Inspect the image column and stop any container that is using the `dotnet-docker` image. + +```console +$ docker stop dotnet-app +dotnet-app +``` + +Now, let’s run our container on the same network as the database. This allows us to access the database by its container name. + +```console +$ docker run \ + --rm -d \ + --network postgres-net \ + --name dotnet-app \ + -p 5000:80 \ + dotnet-docker +``` + +Let's test that the application works and is connecting to the database. Using a web browser, access `http://localhost:5000`. A page similar to the following image appears. + +![image of app page](./images/dotnet-verify-db.png) + + +## Connect Adminer and populate the database + +You now have an application accessing the database, but the database contains no entries. Let's connect Adminer to manage our database and create a database entry. + +```console +$ docker run \ + --rm -d \ + --network postgres-net \ + --name db-admin \ + -p 8080:8080 \ + adminer +``` + +Using a web browser, access `http://localhost:8080`. + +The Adminer login page appears. + +![image of app page](./images/dotnet-adminer-login.png) + + +Specify the following in the login page and then click **Login**: + * System: PostgreSQL + * Server: db + * Username: postgres + * Password: example + * Database: my_db + +The `Schema: public` page appears. + +![image of app page](./images/dotnet-adminer-db.png) + +In `Tables and views`, click `Students`. The `Table: Students` page appears. + +![image of app page](./images/dotnet-adminer-table.png) + +Click `New item`. The `Insert: Students` page appears. + +![image of app page](./images/dotnet-adminer-add.png) + +Specify a `LastName`, `FirstMidName`, and `EnrollmentDate`. Click `Save`. + +Verify that the student name appears in the application. Use a web browser to access `http://localhost:5000`. + +![image of app page](./images/dotnet-app-verify-db-add.png) + +List and then stop the application, database, and Adminer containers. + +```console +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +b76346800b6d adminer "entrypoint.sh docke…" 30 minutes ago Up 30 minutes 0.0.0.0:8080->8080/tcp db-admin +4ae70ac948a1 dotnet-docker "./myWebApp" 45 minutes ago Up 45 minutes 0.0.0.0:5000->80/tcp dotnet-app +75554c7694d8 postgres "docker-entrypoint.s…" 46 minutes ago Up 46 minutes 5432/tcp db +``` + +```console +$ docker stop db-admin dotnet-app db +db-admin +dotnet-app +db +``` + +## Better productivity with Docker Compose + +In this section, we’ll create a [Compose file](../../compose/index.md) to start our dotnet-docker app, Adminer, and the PostgreSQL database using a single command. + +Open the `dotnet-docker` directory in your IDE or a text editor and create a new file named `docker-compose.yml`. Copy and paste the following contents into the file. + +```yaml +services: + db: + image: postgres + restart: always + environment: + POSTGRES_PASSWORD: example + volumes: + - postgres-data:/var/lib/postgresql/data + adminer: + image: adminer + restart: always + ports: + - 8080:8080 + app: + build: + context: . + ports: + - 5000:80 + depends_on: + - db +volumes: + postgres-data: +``` + +Save and close the `docker-compose.yml` file. + +The `dotnet-docker` directory structure should now look like: + +```shell +├── dotnet-docker +│ ├── src/ +│ ├── Dockerfile +│ ├── .dockerignore +│ ├── docker-compose.yml +``` + +This Compose file is super convenient as we do not have to type all the parameters to pass to the `docker run` command. We can declaratively do that using a Compose file. + +We expose the ports so that we can reach the web server and Adminer inside the containers. We also map our local source code into the running container to make changes in our text editor and have those changes picked up in the container. + +Another really cool feature of using a Compose file is that we have service resolution set up to use the service names. Therefore, we are now able to use “db” in our connection string. The reason we use “db” is because that is what we've named our PostgreSQL service as in the Compose file. + +Now, to start our application and to confirm that it is running properly, run the following command: + +```console +$ docker-compose up --build +``` + +We pass the `--build` flag so Docker will compile our image and then start the containers. + +Now let’s test our application. Using a web browser, access `http://localhost:5000` to view the page. + +## Shutting down + +To stop the containers started by Docker Compose, press Ctrl+C in the terminal where we ran `docker-compose up`. To remove those containers after they have been stopped, run `docker-compose down`. + +## Detached mode + +You can run containers started by the `docker-compose` command in detached mode, just as you would with the docker command, by using the `-d` flag. + +To start the stack, defined by the Compose file in detached mode, run: + +```console +docker-compose up --build -d +``` + +Then, you can use `docker-compose stop` to stop the containers and `docker-compose down` to remove them. + +## The `.env` file + +Docker Compose will automatically read environment variables from a `.env` file if it is available. Since our Compose file requires `POSTGRES_PASSWORD` to be set, we create an `.env` file and add the following content: + +```shell +POSTGRES_PASSWORD=example +``` + +Now, update the compose file to use this variable. + +```yaml +services: + db: + image: postgres + restart: always + environment: + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?database password not set} + volumes: + - postgres-data:/var/lib/postgresql/data + adminer: + image: adminer + restart: always + ports: + - 8080:8080 + app: + build: + context: . + ports: + - 5000:80 + depends_on: + - db +volumes: + postgres-data: +``` + +`POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?database password not set}` means that if the environment variable `POSTGRES_PASSWORD` is not set on the host, Docker Compose will display an error. This is OK, because we don’t want to hard-code default values for the password. We set the password value in the `.env` file, which is local to our machine. It is always a good idea to add `.env` to `.gitignore` to prevent the secrets being checked into the version control. + +Build and run your application to confirm the changes are applied properly. + +```console +$ docker-compose up --build -d +``` + +Now let’s test our application. Using a web browser, access `http://localhost:5000` to view the page. + +## Next steps + +In the next module, we’ll take a look at how to set up a CI/CD pipeline using GitHub Actions. See: + +[Configure CI/CD](configure-ci-cd.md){: .button .primary-btn} + +## Feedback + +Help us improve this topic by providing your feedback. Let us know what you think by creating an issue in the [Docker Docs](https://github.com/docker/docker.github.io/issues/new?title=[dotnet%20docs%20feedback]){:target="_blank" rel="noopener" class="_"} GitHub repository. Alternatively, [create a PR](https://github.com/docker/docker.github.io/pulls){:target="_blank" rel="noopener" class="_"} to suggest updates. \ No newline at end of file diff --git a/language/dotnet/images/dotnet-adminer-add.png b/language/dotnet/images/dotnet-adminer-add.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f1f2e32f8343632630dd9750b6bbf1126374d9 GIT binary patch literal 28057 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 F@*i>H;>7>} literal 0 HcmV?d00001 diff --git a/language/dotnet/images/dotnet-adminer-db.png b/language/dotnet/images/dotnet-adminer-db.png new file mode 100644 index 0000000000000000000000000000000000000000..93883b3d1c0fdeec0311fcf7e8b2aff83ad01c0f GIT binary patch literal 50292 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

    2s>!;6d_#^l(7?-7_wo~jI@TsA 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 Ty|aKm1e)qI&8KCG7J>f_56%kR literal 0 HcmV?d00001 diff --git a/language/dotnet/images/dotnet-adminer-login.png b/language/dotnet/images/dotnet-adminer-login.png new file mode 100644 index 0000000000000000000000000000000000000000..98c73164614e235efcc327404d4d013dedf9506c GIT binary patch literal 15030 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 Zdl(~T6;&FCfEEEgy8rkd^6s;j{{t;|yOIC^ literal 0 HcmV?d00001 diff --git a/language/dotnet/images/dotnet-adminer-table.png b/language/dotnet/images/dotnet-adminer-table.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f817cecf1b66ef7c1b31276222faeae037d3ee GIT binary patch literal 39201 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 literal 0 HcmV?d00001 diff --git a/language/dotnet/images/dotnet-app-verify-db-add.png b/language/dotnet/images/dotnet-app-verify-db-add.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3a7b3d6efcf19ed46b2e9367520ada067c607b GIT binary patch literal 18152 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 LmO{nLw;%owQ&5?A literal 0 HcmV?d00001 diff --git a/language/dotnet/images/dotnet-verify-db.png b/language/dotnet/images/dotnet-verify-db.png new file mode 100644 index 0000000000000000000000000000000000000000..498cc3f9f378dc733deb96165e63af50204c64be GIT binary patch literal 17928 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 +

  • Build images
  • +
  • Run your image as a container
  • +
  • Use containers for development
  • +
  • Configure CI/CD
  • +
  • Deploy your app
  • + diff --git a/language/dotnet/run-containers.md b/language/dotnet/run-containers.md new file mode 100644 index 0000000000..ee3a98b442 --- /dev/null +++ b/language/dotnet/run-containers.md @@ -0,0 +1,170 @@ +--- +title: "Run your image as a container" +keywords: .net, run, image, container, +description: Learn how to run the image as a container. +--- + +{% include_relative nav.html selected="2" %} + +## Prerequisites + +Work through the steps to build a .NET image in [Build your .NET image](build-images.md). + +## Overview + +In the previous module, we created our sample application and then we created a Dockerfile that we used to produce an image. We created our image using the docker command docker build. Now that we have an image, we can run that image and see if our application is running correctly. + +A container is a normal operating system process except that this process is isolated in that it has its own file system, its own networking, and its own isolated process tree separate from the host. + +To run an image inside of a container, we use the `docker run` command. The `docker run` command requires one parameter which is the name of the image. Let’s start our image and make sure it is running correctly. Run the following command in your terminal. + +```console +$ docker run dotnet-docker +``` + +After running this command, you’ll notice that you were not returned to the command prompt. This is because our application is a server and runs in a loop waiting for incoming requests without returning control back to the OS until we stop the container. + +Let’s open a new browser and access `http://localhost:80`. + +As you'll see, the connection to our server was refused. This means, we were not able to connect to the localhost on port 80. This is expected because our container is running in isolation which includes networking. Let’s stop the container and restart with port 5000 published on our local network. + +To stop the container, press Ctrl-C. This will return you to the terminal prompt. + +To publish a port for our container, we’ll use the `--publish` flag (`-p` for short) on the `docker run` command. The format of the `--publish` command is `[host port]:[container port]`. So, if we wanted to expose port 80 inside the container to port 5050 outside the container, we would pass `5000:80` to the `--publish` flag. Run the container using the following command: + +```console +$ docker run --publish 5000:80 dotnet-docker +``` + +Now, let's access `http://localhost:5000` in a browser. You should see a page similar to the following image. + +![image of app page](./images/dotnet-app-verify-build.png) + +Success! We were able to connect to the application running inside of our container on port 80. + +Press Ctrl-C to stop the container. + +## Run in detached mode + +This is great so far, but our sample application is a web server and we don't have to be connected to the container. Docker can run your container in detached mode or in the background. To do this, we can use the `--detach` or `-d` for short. Docker starts your container the same as before but this time will “detach” from the container and return you to the terminal prompt. + +```console +$ docker run -d -p 5000:80 dotnet-docker +ce02b3179f0f10085db9edfccd731101868f58631bdf918ca490ff6fd223a93b +``` + +Docker started our container in the background and printed the Container ID on the terminal. + +Again, let’s make sure that our container is running properly. In a web browser, access `http://localhost:5000`. You should see a page similar to the following image. + +![image of app page](./images/dotnet-app-verify-build.png) + +## List containers + +Since we ran our container in the background, how do we know if our container is running or what other containers are running on our machine? Well, we can run the `docker ps` command. Just like on Linux to see a list of processes on your machine, we would run the `ps` command. In the same spirit, we can run the `docker ps` command which displays a list of containers running on our machine. + +```console +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ce02b3179f0f dotnet-docker "./myWebApp" 6 minutes ago Up 6 minutes 0.0.0.0:5000->80/tcp wonderful_kalam +``` + +The `docker ps` command provides a bunch of information about our running containers. We can see the container ID, The image running inside the container, the command that was used to start the container, when it was created, the status, ports that exposed and the name of the container. + +You are probably wondering where the name of our container is coming from. Since we didn’t provide a name for the container when we started it, Docker generated a random name. We’ll fix this in a minute, but first we need to stop the container. To stop the container, run the `docker stop` command which does just that, stops the container. You need to pass the name of the container or you can use the container ID. + +```console +$ docker stop wonderful_kalam +wonderful_kalam +``` + +Now, rerun the `docker ps` command to see a list of running containers. + +```console +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +``` + +## Stop, start, and name containers + +You can start, stop, and restart Docker containers. When we stop a container, it is not removed, but the status is changed to stopped and the process inside the container is stopped. When we ran the `docker ps` command in the previous module, the default output only shows running containers. When we pass the `--all` or `-a` for short, we see all containers on our machine, irrespective of their start or stop status. + +```console +$ docker ps -a +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ce02b3179f0f dotnet-docker "./myWebApp" 16 minutes ago Exited (0) 5 minutes ago wonderful_kalam +ec45285c456d dotnet-docker "./myWebApp" 28 minutes ago Exited (0) 20 minutes ago agitated_moser +fb7a41809e5d dotnet-docker "./myWebApp" 37 minutes ago Exited (0) 36 minutes ago goofy_khayyam +``` + +You should now see several containers listed. These are containers that we started and stopped but have not been removed. + +Let’s restart the container that we just stopped. Locate the name of the container we just stopped and replace the name of the container below in the restart command. + +```console +$ docker restart wonderful_kalam +``` + +Now list all the containers again using the `docker ps` command. + +```console +$ docker ps --all +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ce02b3179f0f dotnet-docker "./myWebApp" 19 minutes ago Up 8 seconds 0.0.0.0:5000->80/tcp wonderful_kalam +ec45285c456d dotnet-docker "./myWebApp" 31 minutes ago Exited (0) 23 minutes ago agitated_moser +fb7a41809e5d dotnet-docker "./myWebApp" 40 minutes ago Exited (0) 39 minutes ago goofy_khayyam +``` + +Notice that the container we just restarted has been started in detached mode and has port 80 exposed. Also, observe the status of the container is `Up X seconds`. When you restart a container, it starts with the same flags or commands that it was originally started with. + +Now, let’s stop and remove all of our containers and take a look at fixing the random naming issue. Stop the container we just started. Find the name of your running container and replace the name in the command below with the name of the container on your system. + +```console +$ docker stop wonderful_kalam +wonderful_kalam +``` + +Now that all of our containers are stopped, let’s remove them. When you remove a container, it is no longer running, nor it is in the stopped status, but the process inside the container has been stopped and the metadata for the container has been removed. + +```console +$ docker ps --all +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ce02b3179f0f dotnet-docker "./myWebApp" 19 minutes ago Exited (0) 2 minutes ago wonderful_kalam +ec45285c456d dotnet-docker "./myWebApp" 31 minutes ago Exited (0) 23 minutes ago agitated_moser +fb7a41809e5d dotnet-docker "./myWebApp" 40 minutes ago Exited (0) 39 minutes ago goofy_khayyam +``` + +To remove a container, simple run the `docker rm` command passing the container name. You can pass multiple container names to the command using a single command. Again, replace the container names in the following command with the container names from your system. + +```console +$ docker rm wonderful_kalam agitated_moser goofy_khayyam +wonderful_kalam +agitated_moser +goofy_khayyam +``` + +Run the `docker ps --all` command again to see that all containers are removed. + +Now, let’s address the random naming issue. Standard practice is to name your containers for the simple reason that it is easier to identify what is running in the container and what application or service it is associated with. + +To name a container, we just need to pass the `--name` flag to the `docker run` command. + +```console +$ docker run -d -p 5000:80 --name dotnet-app dotnet-docker +1aa5d46418a68705c81782a58456a4ccdb56a309cb5e6bd399478d01eaa5cdda +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +1aa5d46418a6 dotnet-docker "./myWebApp" 3 seconds ago Up 3 seconds 0.0.0.0:5000->80/tcp dotnet-app +``` + +That’s better! We can now easily identify our container based on the name. + +## Next steps + +In this module, we took a look at running containers, publishing ports, and running containers in detached mode. We also took a look at managing containers by starting, stopping, and, restarting them. We also looked at naming our containers so they are more easily identifiable. In the next module, we’ll learn how to run a database in a container and connect it to our application. See: + +[How to develop your application](develop.md){: .button .primary-btn} + +## Feedback + +Help us improve this topic by providing your feedback. Let us know what you think by creating an issue in the [Docker Docs](https://github.com/docker/docker.github.io/issues/new?title=[dotnet%20docs%20feedback]){:target="_blank" rel="noopener" class="_"} GitHub repository. Alternatively, [create a PR](https://github.com/docker/docker.github.io/pulls){:target="_blank" rel="noopener" class="_"} to suggest updates. diff --git a/language/images/c-sharp.png b/language/images/c-sharp.png new file mode 100644 index 0000000000000000000000000000000000000000..bd478d708daebc660ae5e82392d011818befa303 GIT binary patch literal 6307 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

    ZpIR!WM zi*;n?7144rhT^u#F@yDb7U{kR=Cank)h%E+eBktSxxBcHQ+Br!ujsC@6vto2VX&(h z@IJ<7n~J`cz2N4WE2nis33K#_o!9)0fbp-{36n0l^6ik}IqJLO&C5?cmX5FEwWhi7 zF78YHs9OLSiCrD0sh>zl8I5E9_H|4vrq()wg4i^g%POc)TdAX=Z|BLW)SErJID@Aj z*?4Q7Pkq8|bNZdMT0~F;`0+&S(D5sH&M=wA4H3^O@#(OTh3R0M^$fw@9a8sejb!!)RUyZE_S_dS8_PqS{ zt(7$8?i*29>5r=COqerd8E4n@{Tv~!6V4~xvsbH~?Gq}Z-;qN5* zYDY9ZGr$--u+t!Dx4E0-zPX2%(bHIKSMxj=@8Gumw4FUWf0&z@EeP2Ij|g!ug^_+! z!{4DnL|WADvvX`4n+1wXbhVdSGPgmL=fmJHaY>X?aF@SXpIZ9B^lAZISDZS7KiZak z1V8tnTa#0S9{t?~ceKgQ5N>npuun>rcA)O}6=w;|-~SCm(!9}hxo(6Bw&dxoh5Qt> ztxhMO9+{d`2qx^n2F9>YDkRh&B=K{10VZ4ZqUt2yI@h(JrM9lcBy zFm9+}J*!e>dRH@O5v!E3&Sk?7IXhg{Rjvu@k4^mZro08|;bou3)p>Drr^Sv{r8Glg zR{mv^??dyy(Hh!vAPpj!(WVdU2N`_CW*r;0`dMMk!Hzqv7Z?cxM%pSRRirA@uV!fX ztc<}JB!c!M&UW&5N}AK--_ZGH&TGwU>9gCO6bh`p^uMC!N*^&DL!GnD=&U_W-a}i`h5m96 zx}rhRsNo`+9L>g!*{;PQecRv;wvMHM9G+vt8W{we^GWQ}XYClc=+7UDoRjw`FNVvC zd`J?QD_}*541s3*b;GB*whL#}lOZ53w+g#z-#8H#qnFf`=>@sc#AS)-B5b__7lt5% zj$eQIELN@gJR$SYUu7iWhjr1S3iYI*-EmT&2ctyfkoeB*SwH6o#uvWGLS%~8BwG?} zl%#8{4@8PksAzVkgUSv#e{~!ZofkyY07keCR9hIL~+2OV5nH-ZA;E zY&@IamRSVBr|BP}$;}-tmHjK7-o7RSviyo&(&RHwWES&?nzL;ToptxNxtrO`M(o8e zzDYNpG;a~jysRL-@#J(PicX3dhSoG__BXP6TkX0#EY)4@W(_od!AKOB&>E%bOdPA4 zgn>tYR|=PdbwTl5xCdWOAqr)oO;06WA*yEmg8aX7}8f=)nx(9mZV zOD=moVh<_zqvI8PoP777<^0BO>+wdd9z|Um$GUgrbhegUpeph!6&XGWHQHYlm#!?X zKPT)@5H;tb_DW<@9-T=6QWes`G*YUrO}8S%Ck|OGcpPKoFFS4;`!@n;Sy)P)IK-{`Ob}LxxQsogLvZ1-VtwtfQQY!TUFYaf)C4g^u4< z_*H6K{6kpo;9(IfR#iaZXZu+80 zsCg`!nZfDFY7CN9!qA^v=h64(A2VA$S6rADd~P%HON_=}+}>h==Z|jgjb;G)F@+kg z=wI4B<9n%hVU^xog@swW-_X|bsxVsP(K8kV%6z8?bus2Sb^2{WC>LI`H`Vr933wMv z#~(#RI=B(zfSIRc>qT_O5&oRZWPmce)8i3Ad;jb!*lL2)*;dAUu&(Xbw2Fw=e`l(8 z<$9#bHG#0wR2Ifuz3n z6i&>Hj8(dnZ~bgG_C7zqqpS0DEb#uombtJPUt;6Eutt}%^y5Pzi6O2q_pn;?E-tH> zPiCKUOv;1Zs-D*|PgNPF1?!$W+0ce_-vT&W#8CZrV$A=Gi>Jn3Q(|e}JJLIgB;pZ% O07z3`qwetw*#7`X7qBM) literal 0 HcmV?d00001 diff --git a/language/index.md b/language/index.md index bca0f3899e..7e4f8ab71e 100644 --- a/language/index.md +++ b/language/index.md @@ -1,6 +1,6 @@ --- description: :Language-specific getting started guides overview -keywords: guides, docker, language, node, java, python, go, golang +keywords: guides, docker, language, node, java, python, go, golang, .net title: Overview toc_min: 1 toc_max: 2 @@ -36,5 +36,8 @@ Learn how to set up your Docker environment and start containerizing your applic

    Develop with Go
    +
    + Develop with C# +

  • From 09ed620df407cccb63dd1a211fae78cf8497bdb8 Mon Sep 17 00:00:00 2001 From: jerae-duffin <83294991+jerae-duffin@users.noreply.github.com> Date: Wed, 26 Oct 2022 20:49:13 -0500 Subject: [PATCH 54/54] Apply suggestions from code review --- docker-hub/orgs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-hub/orgs.md b/docker-hub/orgs.md index 37c6d53a7f..dcc7d0dd61 100644 --- a/docker-hub/orgs.md +++ b/docker-hub/orgs.md @@ -10,7 +10,7 @@ Docker Hub organizations let you create teams so you can give your team access to shared image repositories. An **Organization** is a collection of teams and repositories -that can be managed together. A **Team** is a group of Docker users that belong to an organization. +that can be managed together. A **Team** is a group of Docker members that belong to an organization. An organization can have multiple teams. Docker users become members of an organization
    + +
    +
    +
    +
    + Download and install +
    +

    Install Compose

    +

    Follow the instructions on how to install Docker Compose.

    +
    +
    +
    +
    +
    + Docker Compose +
    +

    Try Compose

    +

    Learn the key concepts of Docker Compose whilst building a simple Python web application.

    +
    +
    +
    +
    +
    + Release notes +
    +

    View the release notes

    +

    Find out about the latest enhancements and bug fixes.

    +
    +
    +
    + +
    +
    +
    +
    + FAQs +
    +

    Understand key features of Compose

    +

    Understand its key features and explore common use cases.

    +
    +
    +
    +
    +
    + Additional resources +
    +

    Explore the Compose file reference

    +

    Find information on defining services, networks, and volumes for a Docker application.

    +
    +
    +
    +
    +
    + Give feedback +
    +

    Browse common FAQs

    +

    Explore general FAQs and find out how to give feedback.

    +
    +
    +
    +