Reorganise extension part 2: publish section (#16268)

* Add doc about sharing extensions

Signed-off-by: Guillaume Tardif <guillaume.tardif@gmail.com>

* Re-organise extension publish section

Signed-off-by: Guillaume Tardif <guillaume.tardif@gmail.com>

Signed-off-by: Guillaume Tardif <guillaume.tardif@gmail.com>
This commit is contained in:
Guillaume Tardif 2022-12-06 17:08:38 +01:00 committed by GitHub
parent 01dc5ead30
commit 4c8c02fe4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 137 additions and 119 deletions

View File

@ -1193,16 +1193,18 @@ manuals:
path: /desktop/extensions-sdk/build/test-debug/
- sectiontitle: "Part two: Publish"
section:
- title: Publish your extension
- title: Overview
path: /desktop/extensions-sdk/extensions/
- title: Share your extension
path: /desktop/extensions-sdk/extensions/share
- title: Metadata
path: /desktop/extensions-sdk/extensions/METADATA/
- title: Labels
path: /desktop/extensions-sdk/extensions/labels/
- title: Packaging, distribution, and API dependencies
- title: Package and release your extension
path: /desktop/extensions-sdk/extensions/DISTRIBUTION/
- title: Generate a share link
path: /desktop/extensions-sdk/extensions/share/
- title: Publish in the marketplace
path: /desktop/extensions-sdk/extensions/publish/
- title: Build multi-arch extensions
path: /desktop/extensions-sdk/extensions/multi-arch/
- sectiontitle: "Design and UI styling"

View File

@ -1,54 +1,52 @@
---
title: Packaging, distribution, and API dependencies
title: Package and release your extension
description: Docker extension disctribution
keywords: Docker, extensions, sdk, distribution
---
This page contains additional information on how Docker Extensions are packaged and distributed, and specifying API dependencies.
This page contains additional information on how to package and distribute Docker Extensions.
## Packaging
## Package your extension
Docker Extensions are packaged as Docker images. The entire extension runtime including the UI, backend services (host or VM) and any necessary binary must be included in the extension image.
Every extension image must contain a metadata.json file at the root of its filesystem that [defines the contents of the extension](METADATA.md).
Every extension image must contain a metadata.json file at the root of its filesystem that defines the [contents of the extension](METADATA.md).
The image must have [several labels](labels.md):
The Docker image must have several [image labels](labels.md), providing information about the extension.
- `org.opencontainers.image.title` for the name of the extension.
- `org.opencontainers.image.vendor` for the provider for the extension.
- `com.docker.desktop.extension.api.version`for the Docker API version the extension is compatible with.
> See how to use [extension labels](labels.md) to provide extension overview information.
Packaging and releasing an extension is done by running `docker build` to create the image, and `docker push` to make the image available on Docker Hub with a specific tag that allows you to manage versions of the extension.
To Package and release an extension, you must build a Docker image (`docker build`), and push the image to [DockerHub](https://hub.docker.com/){: target="_blank" rel="noopener" class="_" } (`docker push`) with a specific tag that allows you to manage versions of the extension.
Take advantage of multi-arch images to build images that include ARM/AMD binaries. The right image will be used for Mac users depending on their architecture.
For extensions on Docker Desktop for Windows, Windows binaries that are to be installed on the host must be included in the same extension image. We will revisit this with some tag conventions to allow some images specific to Windows, and other images specific to Mac, based on a tag prefix. See [how to build extensions for multiple architectures](multi-arch.md).
## Release your extension
You can implement extensions without any constraints on the code repository. Docker does not need access to the code repository in order to use the extension. Release of new versions of the extension is managed you.
Docker image tags must follow semver conventions in order to allow fetching the latest version of the extension, and to know if there are updates available.
## Distribution and new releases
> See [semver.org](https://semver.org/){:target="_blank" rel="noopener" class="_"} to learn more about semantic versioning.
Releasing a Docker Desktop extension is done by running `docker push` to push the extension image to Docker Hub.
Extension images must be multi-arch images so that users can install extensions on ARM/AMD hardware. These multi-arch images can include ARM/AMD specific binaries. Mac users will automatically use the right image based on their architecture.
Extensions that install binaries on the host must also provide Windows binaries in the same extension image.
Docker Desktop includes an allow-list of extensions available to users. The extension image Hub repository (like `mycompany/my-desktop-extension`) must be part of the Docker Desktop allow-list to be recognized as an extension.
> See how to [build a multi-arch image](multi-arch.md) for your extension.
This allow-list specifies which Hub repositories are to be used by Docker Desktop to download and install extensions with a specific version at a given point in time.
You can implement extensions without any constraints on the code repository. Docker doesn't need access to the code repository in order to use the extension. Also, you can entirely manage new releases of your extension, without any dependency on Docker Desktop releases.
Any new image pushed to a repository that is part of the allow-list corresponds to a new version of the extension. Image tags are used to identify version numbers. Extension versions must follow semver to make it easy to understand and compare versions.
## New releases and updates
With a given release of Docker Desktop (including some extensions), users should not need to upgrade Docker Desktop in order to obtain new versions of a specific extension. Newer versions of the extension can be released independently of Docker Desktop releases, provided there is no Extension API mismatchs.
You can release a new version of your Docker extension by pushing a new image with a new tag to Docker Hub.
Docker Desktop scans the list of published extensions for new versions regularly, and provides notifications to users when they can upgrade a specific extension.
Any new image pushed to an image repository corresponding to a Docker Extension defines a new version of that extension. Image tags are used to identify version numbers. Extension versions must follow semver to make it easy to understand and compare versions.
Users can download and install the newer version of an extension without updating Docker Desktop itself.
Docker Desktop scans the list of extensions published in the marketplace for new versions, and provides notifications to users when they can upgrade a specific extension. Extensions that aren't part of the marketplace don't have automatic update notifications at the moment.
## API dependencies
Users can download and install the newer version of any extension without updating Docker Desktop itself.
Extensions must specify the Extension API version they rely on. Currently there is no technical validation of this version, as the extension framework is still experimental.
## Extension API dependencies
Docker Desktop can use this Extension API version to detect if a newer version of an extension is valid given the user's current version of Docker Desktop. If it is, the user sees a notification to upgrade the corresponding extension.
Extensions must specify the Extension API version they rely on. Docker Desktop will check the extension required version, and only propose to install extensions that are compatible with the current Docker Desktop installed. Users might need to update Docker Desktop in order to install the latest extensions available.
The API version that the extension relies upon must be specified in the extension image labels. This allows Docker Desktop to inspect newer versions of extension images without downloading the full extension image upfront.
Extension image labels must specify the API version that the extension relies upon. This allows Docker Desktop to inspect newer versions of extension images without downloading the full extension image upfront.
## License on Extensions and the Extension SDK
## License on extensions and the extension SDK
The [Docker Extension SDK](https://www.npmjs.com/package/@docker/extension-api-client) is licensed under the Apache 2.0 License and is free to use.

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -1,76 +1,43 @@
---
title: Publish your extension
title: Extension release process
description: General steps in how to publish an extension
keywords: Docker, Extensions, sdk, publish
---
This section provides a how-to guide, general information on publishing your extension to the Extensions Marketplace.
This section describes how to make your extension available, and how to make your extension more visible so users can discover it and install it in a single click.
For information on how Docker Extensions are packaged and distributed, see [Packaging, distribution and API dependencies](DISTRIBUTION.md)
## Release your extension
## How to publish your extension
You have developed your extension and tested it locally. You are now ready to release the extension and make it available for others to install and use (either internally with your team, or more publicly).
To publish the extension you need to upload the Docker image to [DockerHub](https://hub.docker.com/){: target="_blank" rel="noopener" class="_" }:
Releasing your extension consists of:
1. Tag the previous image to prepend the account owner at the beginning of the image name:
- Provide information about your extension: description, screenshots, etc. so users can decide to install your extension
- Validate the extension is built in the right format and includes the required information
- Make the extension image available on [DockerHub](https://hub.docker.com/){: target="_blank" rel="noopener" class="_" }:
```console
$ docker tag <name-of-your-extension> owner/<name-of-your-extension>
```
See [Package and release your extension](DISTRIBUTION.md) for details about the release process.
> Note
>
> For Docker Extensions images to be listed in Docker Desktop, they must be approved by Docker and the tags must follow semantic versioning, e.g: `0.0.1`.
>
> See [distribution and new releases](DISTRIBUTION.md#distribution-and-new-releases) for more information.
>
> See [semver.org](https://semver.org/){:target="_blank" rel="noopener" class="_"} to learn more about semantic versioning.
## Promote your extension
2. Push the image to Docker Hub:
Once your extension is available on Docker Hub, users who have access to the extension image can install it using the Docker CLI.
However, you might want a better way to make your extension visible and easy to install than copy-pasting CLI commands in a terminal.
```console
$ docker push owner/<name-of-your-extension>
```
### Use a share extension link
> Having trouble pushing the image?
>
> Ensure you are logged into DockerHub. Otherwise, run `docker login` to authenticate.
You can [generate a share URL](share.md) in order to share your extension within your team, or promote your extension on the internet (website, blogs, social media...). This will allow users to view the extension description and screenshots, and decide to install it in a single click.
## Submit your extension to be published in the Extensions Marketplace
### Publish your extension in the Marketplace
Docker Desktop displays published extensions in [the Extensions Marketplace](https://hub.docker.com/search?q=&type=extension){: target="_blank" rel="noopener" class="_" }. The Extensions Marketplace is a curated space where developers can discover extensions to improve their developer experience and upload their own extension to share with the world.
You can publish your extension in the Extension marketplace to make it more discoverable. You must [submit your extension](publish.md) if you want to have it published in the marketplace.
If you want your extension to be published in the Marketplace, you can submit your extension [here](https://www.docker.com/products/extensions/submissions/){: target="_blank" rel="noopener" class="_" }.
## What happens next
All extensions submitted to the Extension Marketplace are reviewed and approved by our team before listing. This review process ensures a level of trust, security, and quality for developers using Docker Extensions and allows for extension developers to get feedback.
### Extension new releases
### Before you submit
Once you have released your extension, you can push a new release just by pushing a new version of the extension image, with an incremented tag (still using semver conventions).
Docker extensions published in the marketplace will benefit from update notifications to all Desktop users that have installed the extension. See more details about [new releases and updates](DISTRIBUTION.md#new-releases-and-updates)
Ensure your extension has followed the guidelines outlined in this section before submitting for your extension for review. We highly encourage you to check our guidelines as not doing so may considerably impact the duration of the approval process.
### Extension support and user feedback
These guidelines do not replace our terms of service or guarantee approval. As the Extension Marketplace continues adding new features for both Extension users and publishers, expect that your extension should be maintained over time to ensure it stays available in the Marketplace.
#### Guidelines:
- Test your extension for crashes, bugs, and performance issues
- Test your extension with potential users
- Ensure that youve ran our [validation checks](../build/build-install.md)
- Review our [design guidelines](../design/design-guidelines.md)
- Ensure the [UI styling](../design/overview.md) is in line with Docker Desktop guidelines
- Ensure your extensions support both light and dark mode
- Consider the needs of both new and existing users of your extension
- Test your extension on various platforms (Mac, Windows, Linux)
- Read our [Terms of Service](https://www.docker.com/legal/extensions_marketplace_developer_agreement/){: target="_blank" rel="noopener" class="_" }
### After you submit
Once youve submitted your extension, here is what you can expect from the review process:
- Timing: Extensions are reviewed by us manually. Although we strive for having your submission approved as soon as possible, bear in mind this is a manual process to ensure extensions meet high standards. If your extension is complex, if it does not follow our guidelines, or if you did not complete the submission form properly, it may require more time to properly consider your extension.
- Rejections: Docker strives to review extensions for consideration fairly and consistently. We will do our best to provide adequate and actionable feedback for you so that we can reconsider publishing your extension after youve made appropriate changes. If your extension has been rejected, you can communicate directly with us.
## What's next
Find more information about:
- [The `metadata.json` file](METADATA.md)
- [Labels in your `Dockerfile`](labels.md)
- [Distributing your extension](DISTRIBUTION.md)
- [Building extensions for multiple architectures](multi-arch.md)
In addition to provide a description of you extension features, and screenshots, you should also specify additional URLs in [extension labels](labels.md). This will direct users to your website for reporting bugs and feedback, and accessing documentation and support.

View File

@ -4,42 +4,50 @@ description: Docker extension labels
keywords: Docker, extensions, sdk, labels
---
[Labels](../../../engine/reference/builder.md#label) are specified in the extension's `Dockerfile` and used to provide information about the extension.
Extensions use image labels to provide additional information like title, description, screenshots, and more.
| Label | Required | Description | Example |
|---------------------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `org.opencontainers.image.title` | Yes | Human-readable title of the image (string). This appears in the UI for Docker Desktop. | my-extension |
| `org.opencontainers.image.description` | Yes | Human-readable description of the software packaged in the image (string) | This extension is cool. |
| `org.opencontainers.image.vendor` | Yes | Name of the distributing entity, organization, or individual. | Acme, Inc. |
| `com.docker.desktop.extension.api.version` | Yes | Version of the Docker Extension manager that the extension is compatible with. It must follow [semantic versioning](https://semver.org/). | A specific version like `0.1.0` or, a constraint expression: `>= 0.1.0`, `>= 1.4.7, < 2.0` . For your first extension, you can use `docker extension version` to know the SDK API version and specify `>= <SDK_API_VERSION>`. |
| `com.docker.desktop.extension.icon` | Yes | The extension icon (format: .svg .png .jpg) | <a href="{{ site.docs_url }}/assets/images/engine.svg" target="__blank">{{ site.docs_url }}/assets/images/engine.svg<a> |
| `com.docker.extension.screenshots` | Yes | A JSON array of image URLs and an alternative text displayed to users (in the order they appear in your metadata) in your extension's details page. **Note:** The recommended size for sceenshots is 2400x1600 pixels. | `"[{"alt":"alternative text for image 1",` `"url":"https://foo.bar/image1.png"},` `{"alt":"alternative text for image2",` `"url":"https://foo.bar/image2.jpg"}]"` |
| `com.docker.extension.detailed-description` | Yes | Additional information in plain text or HTML about the extension to be displayed in the details dialog. | `My detailed description` or `<h1>My detailed description</h1>` |
| `com.docker.extension.publisher-url` | Yes | The publisher website URL to be displayed in the details dialog. | `https://foo.bar` |
| `com.docker.extension.additional-urls` | No | A JSON array of titles and additional URLs displayed to users (in the order they appear in your metadata) in your extension's details page. We recommend you display the following links if they apply: documentation, support, terms of service, and privacy policy links. | `[{"title":"Documentation","url":"https://foo.bar/docs"},` `{"title":"Support","url":"https://foo.bar/support"},` `{"title":"Terms of Service","url":"https://foo.bar/tos"},` `{"title":"Privacy policy","url":"https://foo.bar/privacy-policy"}]` |
| `com.docker.extension.changelog` | Yes | Changelog in plain text or HTML containing the change for the current version only. | `Extension changelog` or `<p>Extension changelog<ul>` `<li>New feature A</li>` `<li>Bug fix on feature B</li></ul></p>` |
| `com.docker.extension.account-info` | No | Whether the user needs to sign up or log in to a SaaS platform to use some features of the extension. | `required` in case it does, leave it empty otherwise. |
These information allow to display an overview of the extension to users so they can choose to install it:
![List preview](images/marketplace-details.png)
You can define [Image labels](../../../engine/reference/builder.md#label) in the extension's `Dockerfile`.
Here is the list of labels you need to specify when building your extension:
| Label | Required | Description | Example |
| ------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `org.opencontainers.image.title` | Yes | Human-readable title of the image (string). This appears in the UI for Docker Desktop. | my-extension |
| `org.opencontainers.image.description` | Yes | Human-readable description of the software packaged in the image (string) | This extension is cool. |
| `org.opencontainers.image.vendor` | Yes | Name of the distributing entity, organization, or individual. | Acme, Inc. |
| `com.docker.desktop.extension.api.version` | Yes | Version of the Docker Extension manager that the extension is compatible with. It must follow [semantic versioning](https://semver.org/). | A specific version like `0.1.0` or, a constraint expression: `>= 0.1.0`, `>= 1.4.7, < 2.0` . For your first extension, you can use `docker extension version` to know the SDK API version and specify `>= <SDK_API_VERSION>`. |
| `com.docker.desktop.extension.icon` | Yes | The extension icon (format: .svg .png .jpg) | <a href="{{ site.docs_url }}/assets/images/engine.svg" target="__blank">{{ site.docs_url }}/assets/images/engine.svg<a> |
| `com.docker.extension.screenshots` | Yes | A JSON array of image URLs and an alternative text displayed to users (in the order they appear in your metadata) in your extension's details page. **Note:** The recommended size for screenshots is 2400x1600 pixels. | `"[{"alt":"alternative text for image 1",` `"url":"https://foo.bar/image1.png"},` `{"alt":"alternative text for image2",` `"url":"https://foo.bar/image2.jpg"}]"` |
| `com.docker.extension.detailed-description` | Yes | Additional information in plain text or HTML about the extension to display in the details dialog. | `My detailed description` or `<h1>My detailed description</h1>` |
| `com.docker.extension.publisher-url` | Yes | The publisher website URL to display in the details dialog. | `https://foo.bar` |
| `com.docker.extension.additional-urls` | No | A JSON array of titles and additional URLs displayed to users (in the order they appear in your metadata) in your extension's details page. Docker recommends you display the following links if they apply: documentation, support, terms of service, and privacy policy links. | `[{"title":"Documentation","url":"https://foo.bar/docs"},` `{"title":"Support","url":"https://foo.bar/support"},` `{"title":"Terms of Service","url":"https://foo.bar/tos"},` `{"title":"Privacy policy","url":"https://foo.bar/privacy-policy"}]` |
| `com.docker.extension.changelog` | Yes | Changelog in plain text or HTML containing the change for the current version only. | `Extension changelog` or `<p>Extension changelog<ul>` `<li>New feature A</li>` `<li>Bug fix on feature B</li></ul></p>` |
| `com.docker.extension.account-info` | No | Whether the user needs to register to a SaaS platform to use some features of the extension. | `required` in case it does, leave it empty otherwise. |
| `com.docker.extension.categories` | No | The list of Marketplace categories that your extension belongs to: `ci-cd`, `container-orchestration`, `cloud-deployment`, `cloud-development`, `database`, `kubernetes`, `networking`, `security`,`testing-tools`, `utility-tools`,`volumes`. If you don't specify this label, users won't be able to find your extension in the Extension Marketplace when filtering by a category. Extensions published to the Marketplace before the 22nd of September 2022 have been auto-categorized by Docker. | Specified as comma separated values in case of having multiple categories e.g: `kubernetes,security` or a single value e.g. `kubernetes`. |
> Missing required labels
>
> If any of the previous _required_ labels are missing in the `Dockerfile`, Docker Desktop considers the extension invalid and does not list it in the Marketplace.
> If any of the previous **required** labels are missing in the `Dockerfile`, Docker Desktop considers the extension invalid and doesn't list it in the Marketplace.
> HTML content styling
>
> Docker Desktop CSS styles will be applied to the provided HTML content. You can make sure that it renders nicely [within the marketplace](#preview-the-extension-in-the-marketplace). We recommend that you follow our [Styling guidelines](../design/overview.md).
> Docker Desktop will apply CSS styles to the provided HTML content. You can make sure that it renders correctly [within the marketplace](#preview-the-extension-in-the-marketplace). Docker recommends that you follow the [Styling guidelines](../design/overview.md).
## Preview the extension in the Marketplace
You can validate that the image labels render as you expect.
When you build and install your unpublished extension, you can preview the extension in the Marketplace "installed" tab. You can see how the extension labels are rendered in the list and in the details page of the extension.
When you build and install your unpublished extension, you can preview the extension in the Marketplace "installed" tab. You can see how the extension labels render in the list and in the details page of the extension.
> Preview extensions already listed in Marketplace
>
> When you install a local image of an extension already published in the Marketplace, for example with the tag `latest`, your local image is currently not detected as "unpublished".
>
> You can retag your image in order to have a different image name that is not listed as a published extension.
> You can re-tag your image in order to have a different image name that's not listed as a published extension.
> Use `docker tag org/published-extension unpublished-extension` and then `docker extension install unpublished-extension`.
![List preview](images/list-preview.png)

View File

@ -52,6 +52,10 @@ Manifests:
Platform: linux/arm64
```
> Having trouble pushing the image?
>
> Ensure you are logged into DockerHub. Otherwise, run `docker login` to authenticate.
> **Note**
>
> For more information, see [Multi-platform images](../../../build/building/multi-platform.md) page.
@ -131,7 +135,7 @@ As a result, when `TARGETARCH` equals:
- `arm64`, the `kubectl` binary fetched corresponds to the `arm64` architecture, and is copied to `/darwin/kubectl` in the final stage.
- `amd64`, two `kubectl` binaries are fetched. One for Darwin and another for Windows. They are copied to `/darwin/kubectl` and `/windows/kubectl.exe` respectively, in the final stage.
> Note
> Note
>
> The binary destination path for darwin is darwin/kubectl in both cases. The only change is the architecture-specific binary that is downloaded.
@ -142,4 +146,3 @@ When the extension is installed, the extension framework copies the binaries fro
### Can I develop extensions that run Windows containers?
Although Docker Extensions is supported on Docker Desktop for Windows, Mac, and Linux, the extension framework only supports linux containers. Therefore, you must target `linux` as the OS when you build your extension image.

View File

@ -0,0 +1,38 @@
---
title: Publish your extension to the marketplace
description: Docker extension distribution
keywords: Docker, extensions, publish
---
## Submit your extension to the marketplace
Docker Desktop displays published extensions in [the Extensions Marketplace](https://hub.docker.com/search?q=&type=extension){: target="_blank" rel="noopener" class="_" }. The Extensions Marketplace is a curated space where developers can discover extensions to improve their developer experience and propose their own extension to be available for all Desktop users.
If you want to publish your extension in the Marketplace, you can submit your extension [here](https://www.docker.com/products/extensions/submissions/){: target="_blank" rel="noopener" class="_" }.
All extensions submitted to the Extension Marketplace are reviewed and approved by the Docker Extension team before listing. This review process ensures a level of trust, security, and quality for developers using Docker Extensions and allows for extension developers to get feedback.
### Before you submit
Ensure your extension has followed the guidelines outlined in this section before submitting for your extension for review. Docker highly encourage you to check the guidelines as not doing so may considerably impact the duration of the approval process.
These guidelines don't replace Docker's terms of service or guarantee approval. As the Extension Marketplace continues adding new features for both Extension users and publishers, expect that you maintain your extension over time to ensure it stays available in the Marketplace.
#### Guidelines:
- Ensure that youve ran the [validation checks](../build/build-install.md)
- Review the [design guidelines](../design/design-guidelines.md)
- Ensure the [UI styling](../design/overview.md) is in line with Docker Desktop guidelines
- Ensure your extensions support both light and dark mode
- Consider the needs of both new and existing users of your extension
- Test your extension with potential users
- Test your extension for crashes, bugs, and performance issues
- Test your extension on various platforms (Mac, Windows, Linux)
- Read the [Terms of Service](https://www.docker.com/legal/extensions_marketplace_developer_agreement/){: target="_blank" rel="noopener" class="_" }
### After you submit
Once youve submitted your extension, here is what you can expect from the review process:
- Timing: Extensions are reviewed by Docker manually. Although we strive for having your submission approved as soon as possible, bear in mind this is a manual process to ensure extensions meet high standards. If your extension is complex, if it doesn't follow the guidelines, or if you didn't complete the submission form properly, it may require more time to consider your extension.
- Rejections: Docker strives to review extensions for consideration fairly and consistently. We will do our best to provide adequate and actionable feedback for you so that we can reconsider publishing your extension after youve made appropriate changes. If your extension has been rejected, you can communicate directly with us.

View File

@ -4,31 +4,32 @@ description: Docker extension distribution
keywords: Docker, extensions, share
---
## Share your extension with others
Once your extension image is accessible on Docker Hub, anyone with access to the image can install the extension.
People can install your extension by typing `docker extension install my/awesome-extension:latest` in to the terminal.
People can install your extension by typing `docker extension install my/awesome-extension:latest` in to the terminal.
However, this option doesn't provide a preview of the extension before it's installed.
However, this option doesn't provide a preview of the extension before it's installed.
## Share with URL
Docker now allows you to share your extensions using a URL.
Docker now allows you to share your extensions using a URL.
When people navigate to this URL, it opens Docker Desktop and displays a preview of your extension in the same way as an extension in the Marketplace. From the preivew, users can then select **Install**.
When people navigate to this URL, it opens Docker Desktop and displays a preview of your extension in the same way as an extension in the Marketplace. From the preview, users can then select **Install**.
![Navigate to extension link](images/open-share.PNG)
![Navigate to extension link](images/open-share.png)
To generate this link you can either:
- Run the following command:
```console
$ docker extension share my/awesome-extension:0.0.1
```
```console
$ docker extension share my/awesome-extension:0.0.1
```
- Once you have installed your extension locally, navigate to the **Manage** tab and select **Share**.
![Share button](images/list-preview.png)
![Share button](images/list-preview.png)
Previews of the extension description or screenshots, for example, are created using [extension labels](labels.md).

View File

@ -1,6 +1,6 @@
---
description: Understand the process of creating an extension.
title: The build build and publish process
title: The build and publish process
keyword: Docker Extensions, sdk, build, create, publish
---
@ -26,9 +26,9 @@ This build section provides sample folders with ready-to-go examples that walk y
- An extension that invokes Docker CLI commands
- A simple backend extension
>Note
> Note
>
>Whilst you're building your extension, make sure you follow our [design](design/design-guidelines.md) and [UI styling](design/overview.md) guidelines to ensure visual consistency and [level AA accessibility standards](https://www.w3.org/WAI/WCAG2AA-Conformance){:target="_blank" rel="noopener" class="_"}.
> Whilst you're building your extension, make sure you follow our [design](design/design-guidelines.md) and [UI styling](design/overview.md) guidelines to ensure visual consistency and [level AA accessibility standards](https://www.w3.org/WAI/WCAG2AA-Conformance){:target="_blank" rel="noopener" class="_"}.
If your extension requires additional services running in the Docker Desktop VM, see the [VM UI](https://github.com/docker/extensions-sdk/tree/main/samples/vm-service){:target="_blank" rel="noopener" class="_"} example.
@ -36,17 +36,18 @@ For further inspiration, see the other examples in the [samples folder](https://
### Part two: Publish and distribute your extension
Docker Desktop displays published extensions in the Extensions Marketplace. The Extensions Marketplace is a curated space where developers from all over can discover extensions to improve their developer experience and upload their own extension to share with the world.
Docker Desktop displays published extensions in the Extensions Marketplace. The Extensions Marketplace is a curated space where developers from all over can discover extensions to improve their developer experience and upload their own extension to share with the world.
All extensions submitted to the Extension Marketplace are reviewed and approved by our team before listing. This review process ensures a level of trust, security, and quality for developers using Extensions and allows for Extension developers to get feedback on what will improve their Extensions experience.
If you want your extension to be published in the Marketplace, you can submit your extension [here](https://www.docker.com/products/extensions/submissions/){:target="_blank" rel="noopener" class="_"}. Well review your submission and provide feedback if changes are needed before we can validate and publish it to make it available to all Docker Desktop users.
## Whats next?
If you want to get up and running quickly with a Docker Extension, see the [Quickstart guide](quickstart.md).
Alternatively, get started with Part one: Build for more in-depth information about each step of the extension creation process.
For an in-depth tutorial of the entire build process, we recommend the following video walkthrough from DockerCon 2022:
<iframe width="560" height="315" src="https://www.youtube.com/embed/Yv7OG-EGJsg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Yv7OG-EGJsg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>