diff --git a/_vale/Docker/Acronyms.yml b/_vale/Docker/Acronyms.yml index 9eb5e8b1442..ae5de53732f 100644 --- a/_vale/Docker/Acronyms.yml +++ b/_vale/Docker/Acronyms.yml @@ -73,6 +73,7 @@ exceptions: - NET - NFS - NOTE + - NTFS - NTLM - NUMA - NVDA diff --git a/_vale/config/vocabularies/Docker/accept.txt b/_vale/config/vocabularies/Docker/accept.txt index 6caaf6f20c1..1036af5ee67 100644 --- a/_vale/config/vocabularies/Docker/accept.txt +++ b/_vale/config/vocabularies/Docker/accept.txt @@ -186,3 +186,4 @@ ufw umask vSphere vpnkit +windowsfilter diff --git a/content/guides/_index.md b/content/guides/_index.md index 4d10f38ead8..1aed59cd077 100644 --- a/content/guides/_index.md +++ b/content/guides/_index.md @@ -6,8 +6,9 @@ params: icon: developer_guide layout: landing aliases: - - /learning-paths/ + - /guides/language/ - /language/ + - /learning-paths/ --- Explore our collection of guides to learn how Docker can optimize your diff --git a/content/manuals/build/ci/github-actions/multi-platform.md b/content/manuals/build/ci/github-actions/multi-platform.md index e6d44b7ea47..a04c73562cb 100644 --- a/content/manuals/build/ci/github-actions/multi-platform.md +++ b/content/manuals/build/ci/github-actions/multi-platform.md @@ -109,7 +109,10 @@ each platform across multiple runners and create manifest list using the The following workflow will build the image for each platform on a dedicated runner using a matrix strategy and push by digest. Then, the `merge` job will -create a manifest list and push it to Docker Hub. +create manifest lists and push them to two registries: + +- Docker Hub: `docker.io/docker-user/my-app` +- GitHub Container Registry: `ghcr.io/gh-user/my-app` This example also uses the [`metadata` action](https://github.com/docker/metadata-action) to set tags and labels. @@ -121,7 +124,8 @@ on: push: env: - REGISTRY_IMAGE: user/app + DOCKERHUB_REPO: docker-user/my-app + GHCR_REPO: ghcr.io/gh-user/my-app jobs: build: @@ -131,8 +135,6 @@ jobs: matrix: platform: - linux/amd64 - - linux/arm/v6 - - linux/arm/v7 - linux/arm64 steps: - name: Prepare @@ -144,7 +146,9 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ env.REGISTRY_IMAGE }} + images: | + ${{ env.DOCKERHUB_REPO }} + ${{ env.GHCR_REPO }} - name: Login to Docker Hub uses: docker/login-action@v3 @@ -152,6 +156,13 @@ jobs: username: ${{ vars.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -164,7 +175,7 @@ jobs: with: platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true + outputs: type=image,"name=${{ env.DOCKERHUB_REPO }},${{ env.GHCR_REPO }}",push-by-digest=true,name-canonical=true,push=true - name: Export digest run: | @@ -198,6 +209,13 @@ jobs: username: ${{ vars.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -205,17 +223,27 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ env.REGISTRY_IMAGE }} + images: | + ${{ env.DOCKERHUB_REPO }} + ${{ env.GHCR_REPO }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} - name: Create manifest list and push working-directory: /tmp/digests run: | docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + $(printf '${{ env.DOCKERHUB_REPO }}@sha256:%s ' *) + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.GHCR_REPO }}@sha256:%s ' *) - name: Inspect image run: | - docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} + docker buildx imagetools inspect ${{ env.DOCKERHUB_REPO }}:${{ steps.meta.outputs.version }} + docker buildx imagetools inspect ${{ env.GHCR_REPO }}:${{ steps.meta.outputs.version }} ``` ### With Bake diff --git a/content/manuals/engine/storage/drivers/select-storage-driver.md b/content/manuals/engine/storage/drivers/select-storage-driver.md index a4118a301b5..fe441ce5fc8 100644 --- a/content/manuals/engine/storage/drivers/select-storage-driver.md +++ b/content/manuals/engine/storage/drivers/select-storage-driver.md @@ -19,6 +19,12 @@ Docker host. After you have read the [storage driver overview](./_index.md), the next step is to choose the best storage driver for your workloads. Use the storage driver with the best overall performance and stability in the most usual scenarios. +> [!NOTE] +> This page discusses storage drivers for Docker Engine on Linux. If you're +> running the Docker daemon with Windows as the host OS, the only supported +> storage driver is windowsfilter. For more information, see +> [windowsfilter](windowsfilter-driver.md). + The Docker Engine provides the following storage drivers on Linux: | Driver | Description | @@ -189,7 +195,8 @@ to physical or logical disks on the Docker host. ## Related information -- [About images, containers, and storage drivers](./_index.md) -- [`overlay2` storage driver in practice](overlayfs-driver.md) -- [`btrfs` storage driver in practice](btrfs-driver.md) -- [`zfs` storage driver in practice](zfs-driver.md) +- [Storage drivers](./_index.md) +- [`overlay2` storage driver](overlayfs-driver.md) +- [`btrfs` storage driver](btrfs-driver.md) +- [`zfs` storage driver](zfs-driver.md) +- [`windowsfilter` storage driver](windowsfilter-driver.md) diff --git a/content/manuals/engine/storage/drivers/windowsfilter-driver.md b/content/manuals/engine/storage/drivers/windowsfilter-driver.md new file mode 100644 index 00000000000..a38f6d865d5 --- /dev/null +++ b/content/manuals/engine/storage/drivers/windowsfilter-driver.md @@ -0,0 +1,36 @@ +--- +description: Learn about the windowsfilter storage driver +keywords: container, storage, driver, windows, windowsfilter +title: windowsfilter storage driver +--- + +The windowsfilter storage driver is the default storage driver for Docker +Engine on Windows. The windowsfilter driver uses Windows-native file system +layers to for storing Docker layers and volume data on disk. The windowsfilter +storage driver only works on file systems formatted with NTFS. + +## Configure the windowsfilter storage driver + +For most use case, no configuring the windowsfilter storage driver is not +necessary. + +The default storage limit for Docker Engine on Windows is 127GB. To use a +different storage size, set the `size` option for the windowsfilter storage +driver. See [windowsfilter options](/reference/cli/dockerd.md#windowsfilter-options). + +Data is stored on the Docker host in `image` and `windowsfilter` subdirectories +within `C:\ProgramData\docker` by default. You can change the storage location +by configuring the `data-root` option in the [Daemon configuration file](/reference/cli/dockerd.md#on-windows): + +```json +{ + "data-root": "d:\\docker" +} +``` + +You must restart the daemon for the configuration change to take effect. + +## Additional information + +For more information about how container storage works on Windows, refer to +Microsoft's [Containers on Windows documentation](https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-storage).