diff --git a/docs/reference/dockerhub-containers.md b/docs/reference/dockerhub-containers.md index 198155dc00..94eed2c428 100644 --- a/docs/reference/dockerhub-containers.md +++ b/docs/reference/dockerhub-containers.md @@ -5,37 +5,42 @@ title: Garden Containers on Docker Hub # Garden containers on Docker Hub -We publish a number of containers to our official Docker Hub account ([hub.docker.com/u/gardendev](https://hub.docker.com/u/gardendev)). +We publish a number of containers to our official Docker Hub +account ([hub.docker.com/u/gardendev](https://hub.docker.com/u/gardendev)). ## Garden Containers and bundled tools -For your convenience, we build and publish Docker containers that contain the Garden CLI as well as a number of Cloud Provider tools with every Garden release (and prerelease). +For your convenience, we build and publish Docker containers that contain the Garden CLI as well as a number of Cloud +Provider tools with every Garden release (and prerelease). -| Container | Contents | -|-----------------------------------|------------------------------------------------------------------| -| [`gardendev/garden`](https://hub.docker.com/r/gardendev/garden) | Contains only Garden CLI | -| [`gardendev/garden-aws`](https://hub.docker.com/r/gardendev/garden-aws) | Contains the Garden CLI, and the AWS CLI v2 | -| [`gardendev/garden-azure`](https://hub.docker.com/r/gardendev/garden-azure) | Contains the Garden CLI, and the Azure CLI | -| [`gardendev/garden-gcloud`](https://hub.docker.com/r/gardendev/garden-gcloud) | Contains the Garden CLI, and the Google Cloud CLI | -| [`gardendev/garden-aws-gcloud`](https://hub.docker.com/r/gardendev/garden-aws-gcloud) | Contains the Garden CLI, the Google Cloud CLI and the AWS CLI v2 | +| Container | Contents | +|---------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------| +| [`gardendev/garden`](https://hub.docker.com/r/gardendev/garden) | Contains only Garden CLI | +| [`gardendev/garden-aws`](https://hub.docker.com/r/gardendev/garden-aws) | Contains the Garden CLI, and the AWS CLI v2 | +| [`gardendev/garden-azure`](https://hub.docker.com/r/gardendev/garden-azure) | Contains the Garden CLI, and the Azure CLI | +| [`gardendev/garden-gcloud`](https://hub.docker.com/r/gardendev/garden-gcloud) | Contains the Garden CLI, and the Google Cloud CLI | +| [`gardendev/garden-aws-gcloud`](https://hub.docker.com/r/gardendev/garden-aws-gcloud) | Contains the Garden CLI, the Google Cloud CLI and the AWS CLI v2 | | [`gardendev/garden-aws-gcloud-azure`](https://hub.docker.com/r/gardendev/garden-aws-gcloud-azure) | Contains the Garden CLI, the Google Cloud CLI, the AWS CLI v2, and the Azure CLI | ### Tags -| Tag name | Meaning | -|-----------------------------------|------------------------------------------------------------------| -| `latest` | Latest stable release of Garden CLI 0.13 (Codename Bonsai), the container is based on Alpine Linux. -| `bonsai-*` or `0.13-*` | Garden CLI version is 0.13 (Codename Bonsai). If the tag name does not contain edge, this is the latest stable release. | -| `acorn-*` or `0.12-*` | Garden CLI version is 0.12 (Codename Acorn). If the tag name does not contain `edge`, this is the latest stable release. | -| `x.y.z-n-*`, e.g. `0.13.0-0` | Garden CLI prerelease (Full semver version with prerelease modifier) | -| `x.y.z-*`, e.g. `0.13.0` | Garden CLI stable release (Semver version without prerelease) | -| `*-edge-*` | Edge tags contain the latest, potentially still unreleased changes to the Garden CLI in our development branches. | -| `*-alpine` or `*-alpine-*` | The container is based on Alpine Linux. | -| `*-buster` or `*-buster-*` | The container is based on Debian Linux (Buster version). | -| `*-rootless` | The default user of the container is `gardenuser`. The default user for all other containers is `root`. | +| Tag name | Meaning | +|--------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| `latest` | Latest stable release of Garden CLI 0.13 (Codename Bonsai), the container is based on Alpine Linux. | +| `bonsai-*` or `0.13-*` | Garden CLI version is 0.13 (Codename Bonsai). If the tag name does not contain edge, this is the latest stable release. | +| `acorn-*` or `0.12-*` | Garden CLI version is 0.12 (Codename Acorn). If the tag name does not contain `edge`, this is the latest stable release. | +| `x.y.z-n-*`, e.g. `0.13.0-0` | Garden CLI prerelease (Full semver version with prerelease modifier) | +| `x.y.z-*`, e.g. `0.13.0` | Garden CLI stable release (Semver version without prerelease) | +| `*-edge-*` | Edge tags contain the latest, potentially still unreleased changes to the Garden CLI in our development branches. | +| `*-alpine` or `*-alpine-*` | The container is based on Alpine Linux. | +| `*-buster` or `*-buster-*` | [DEPRECATED] The container is based on Debian Linux (Buster version). Since Garden `0.13.32`, Buster is no longer supported and maintained. | +| `*-bookwarm` or `*-bookwarm-*` | The container is based on Debian Linux (Bookwarm version). Debian Bookworm has been supported since Garden `0.13.32`. | +| `*-rootless` | The default user of the container is `gardenuser`. The default user for all other containers is `root`. | Examples: + - `0.12-edge-alpine`: Latest development build of Garden Acorn (0.12), based on Alpine Linux. - `bonsai-alpine`: Latest stable release of Bonsai (0.13), based on Alpine Linux. -- `0.13.0-alpine-rootless`: Stable release `0.13.0`, based on Alpine Linux, default user of the container is `gardenuser`. +- `0.13.0-alpine-rootless`: Stable release `0.13.0`, based on Alpine Linux, default user of the container + is `gardenuser`. - `0.13.0-0-alpine`: Pre-release `0.13.0-0`, based on Alpine Linux. diff --git a/support/alpine.Dockerfile b/support/alpine.Dockerfile index 47e3a83496..9154f8b9cb 100644 --- a/support/alpine.Dockerfile +++ b/support/alpine.Dockerfile @@ -63,10 +63,11 @@ RUN GARDEN_DISABLE_ANALYTICS=true GARDEN_DISABLE_VERSION_CHECK=true garden util WORKDIR /project -FROM python:3.11-alpine@sha256:e5d592c422d6e527cb946ae6abb1886c511a5e163d3543865f5a5b9b61c01584 AS aws-builder +# Apline-3.20 seems to have some issues, see https://github.com/aws/aws-cli/issues/8698#issuecomment-2135662844 +FROM python:3.11.9-alpine3.19@sha256:0b5ed25d3cc27cd35c7b0352bac8ef2ebc8dd3da72a0c03caaf4eb15d9ec827a AS aws-builder -ENV AWSCLI_VERSION=2.13.15 -ENV AWSCLI_SHA256="ac63e8f42c7f8775edccdc004921420159420de9185cf011952dba8fda5895ff" +ENV AWSCLI_VERSION=2.16.0 +ENV AWSCLI_SHA256="f6e15071a4327e57f0aa2b8f52a35b1378528b72cb68a586302ae7ae97087d05" RUN apk add --no-cache \ wget \ @@ -113,10 +114,10 @@ RUN rm -rf $(find /google-cloud-sdk/ -regex ".*/__pycache__") && rm -rf /google- FROM garden-base-root as garden-azure-base WORKDIR / -ENV AZURE_CLI_VERSION=2.53.0 +ENV AZURE_CLI_VERSION=2.61.0 RUN wget -O requirements.txt https://raw.githubusercontent.com/Azure/azure-cli/azure-cli-$AZURE_CLI_VERSION/src/azure-cli/requirements.py3.Linux.txt && \ - echo "833a12c837df6b9d8b27abf908073eb2da971c8506d2b112946be4a36e1db7af requirements.txt" | sha256sum -c + echo "8ebbef38b1278448666246483721be61320e244ddfc2edb999b475364591f2eb requirements.txt" | sha256sum -c RUN wget -O trim_sdk.py https://raw.githubusercontent.com/Azure/azure-cli/azure-cli-$AZURE_CLI_VERSION/scripts/trim_sdk.py && \ echo "2e6292f5285b4fcedbe8efd77309fade550667d1c502a6ffa078f1aa97942c64 trim_sdk.py" | sha256sum -c @@ -175,7 +176,6 @@ ENV CLOUDSDK_PYTHON=python3 COPY --chown=$USER:root --from=gcloud-base /google-cloud-sdk /google-cloud-sdk ENV PATH /google-cloud-sdk/bin:$PATH - # # garden-aws-gloud-azure # diff --git a/support/debian.Dockerfile b/support/debian.Dockerfile index d12466fe28..c306c68653 100644 --- a/support/debian.Dockerfile +++ b/support/debian.Dockerfile @@ -4,9 +4,9 @@ ARG VARIANT=root # NOTE: This is not the node version Garden itself will run in. Garden binaries have node "built in" and the version installed on the system does not matter. # The main reason we base these images off of the Node image is for Azure DevOps Support. -FROM node:20.13.1-buster-slim@sha256:7ab273816c6bc500ddba1400d825708a5a5ed963cdc17c32d3fce70ac9a0f477 as garden-buster-base-root +FROM node:22.2.0-bookworm-slim@sha256:840079c08ec485123cf7ea506a13afea630db25606f71e6140cf8dbdf9bba552 as garden-bookworm-base-root -FROM garden-buster-base-root as garden-base-root +FROM garden-bookworm-base-root as garden-base-root # system dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ @@ -49,7 +49,6 @@ FROM garden-base-root as garden-base-rootless ENV USER=gardenuser ENV HOME=/home/gardenuser RUN useradd -ms /bin/bash $USER - USER $USER FROM garden-base-$VARIANT as garden-base @@ -69,8 +68,8 @@ WORKDIR /project # garden-aws-base # FROM garden-base-root as garden-aws-base -ENV AWSCLI_VERSION=2.13.15 -ENV AWSCLI_SHA256="45d2e0f304eb0f57e6b58ffc0664879c0bc1cf8365fd2f64bcb5f3bbf2e9434f" +ENV AWSCLI_VERSION=2.16.0 +ENV AWSCLI_SHA256="e44efc8de54156d6d8c1d158c1976992f4045b85e550668ce4c6daf5d8777e2d" RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-${AWSCLI_VERSION}.zip" -o "awscliv2.zip" RUN echo "${AWSCLI_SHA256} awscliv2.zip" | sha256sum -c @@ -81,8 +80,8 @@ RUN ./aws/install # garden-gcloud-base # FROM garden-base as garden-gcloud-base -ENV GCLOUD_VERSION=444.0.0 -ENV GCLOUD_SHA256="cc76b9b40508253f812af5e52d4630e90230312969eece04ccfb5328c557acac" +ENV GCLOUD_VERSION=478.0.0 +ENV GCLOUD_SHA256="225c3a1f9b47241467a4ad8da0f432a57bade10c8d44158920003ae698f6d195" RUN curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-${GCLOUD_VERSION}-linux-x86_64.tar.gz RUN echo "${GCLOUD_SHA256} google-cloud-cli-${GCLOUD_VERSION}-linux-x86_64.tar.gz" | sha256sum -c @@ -94,7 +93,7 @@ RUN ./google-cloud-sdk/bin/gcloud components install kubectl gke-gcloud-auth-plu # garden-azure-base # FROM garden-base-root as garden-azure-base -ENV AZURE_CLI_VERSION=2.53.0 +ENV AZURE_CLI_VERSION=2.61.0 RUN apt-get update RUN apt-get install ca-certificates curl apt-transport-https lsb-release gnupg @@ -105,7 +104,7 @@ RUN chmod go+r /etc/apt/keyrings/microsoft.gpg RUN echo "deb [arch=`dpkg --print-architecture` signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" | \ tee /etc/apt/sources.list.d/azure-cli.list RUN apt-get update -RUN apt-get install azure-cli=${AZURE_CLI_VERSION}-1~buster +RUN apt-get install azure-cli=${AZURE_CLI_VERSION}-1~bookworm RUN az aks install-cli # @@ -123,7 +122,7 @@ COPY --chown=$USER:root --from=garden-azure-base /usr/local/bin/kubelogin /usr/l # garden-aws # FROM garden-base as garden-aws -ENV AWSCLI_VERSION=2.13.15 +ENV AWSCLI_VERSION=2.16.0 # Copy aws cli RUN mkdir -p ${HOME}/aws-cli COPY --chown=$USER:root --from=garden-aws-base /usr/local/aws-cli ${HOME}/aws-cli @@ -144,7 +143,7 @@ ENV PATH /google-cloud-sdk/bin:$PATH # garden-aws-gloud # FROM garden-base as garden-aws-gcloud -ENV AWSCLI_VERSION=2.13.15 +ENV AWSCLI_VERSION=2.16.0 # Copy aws cli RUN mkdir -p ${HOME}/aws-cli @@ -161,7 +160,7 @@ ENV PATH /google-cloud-sdk/bin:$PATH # garden-aws-gloud-azure # FROM garden-base as garden-aws-gcloud-azure -ENV AWSCLI_VERSION=2.13.15 +ENV AWSCLI_VERSION=2.16.0 # Copy aws cli RUN mkdir -p ${HOME}/aws-cli diff --git a/support/docker-bake-test.sh b/support/docker-bake-test.sh old mode 100644 new mode 100755 index aea5577855..8077f412ff --- a/support/docker-bake-test.sh +++ b/support/docker-bake-test.sh @@ -70,7 +70,7 @@ TEST "test cloud provider tool availability" docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" all # aws - for variant in bonsai{-alpine,-buster}{,-rootless} + for variant in bonsai{-alpine,-bookworm}{,-rootless} do echo "gardendev/garden-aws-gcloud-azure:$variant" should_succeed aws --version gardendev/garden-aws-gcloud-azure:$variant @@ -101,7 +101,7 @@ TEST "run all binaries" MAJOR_VERSION=0 MINOR_VERSION=13 PATCH_VERSION=0 CODENAME=bonsai \ docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" all - for variant in bonsai{-alpine,-buster}{,-rootless} + for variant in bonsai{-alpine,-bookworm}{,-rootless} do # Garden on vanilla images should_succeed garden version gardendev/garden:$variant @@ -131,17 +131,17 @@ TEST "run all binaries" TEST "edge tags for debian" MAJOR_VERSION=0 MINOR_VERSION=13 PRERELEASE=edge CODENAME=bonsai \ - docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" buster + docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" bookworm for image in gardendev/garden{,-aws,-azure,-gcloud,-aws-gcloud,-aws-gcloud-azure} do should_not_exist $image latest - should_not_exist $image 0.13-buster - should_not_exist $image 0.13-buster-rootless - should_exist $image 0.13-edge-buster - should_exist $image 0.13-edge-buster-rootless - should_exist $image bonsai-edge-buster - should_exist $image bonsai-edge-buster-rootless + should_not_exist $image 0.13-bookworm + should_not_exist $image 0.13-bookworm-rootless + should_exist $image 0.13-edge-bookworm + should_exist $image 0.13-edge-bookworm-rootless + should_exist $image bonsai-edge-bookworm + should_exist $image bonsai-edge-bookworm-rootless done TEST "edge tags for alpine" @@ -161,20 +161,20 @@ TEST "edge tags for alpine" TEST "prerelase tags for debian" MAJOR_VERSION=0 MINOR_VERSION=13 PATCH_VERSION=0 PRERELEASE=alpha1 CODENAME=bonsai \ - docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" buster + docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" bookworm for image in gardendev/garden{,-aws,-azure,-gcloud,-aws-gcloud,-aws-gcloud-azure} do should_not_exist $image latest - should_not_exist $image 0.13-buster - should_not_exist $image 0.13-buster-rootless - should_not_exist $image 0.13-alpha1-buster - should_not_exist $image 0.13-alpha1-buster-rootless - should_not_exist $image bonsai-alpha1-buster - should_not_exist $image bonsai-alpha1-buster-rootless - should_exist gardendev/garden 0.13.0-alpha1-buster - should_exist gardendev/garden 0.13.0-alpha1-buster-rootless + should_not_exist $image 0.13-bookworm + should_not_exist $image 0.13-bookworm-rootless + should_not_exist $image 0.13-alpha1-bookworm + should_not_exist $image 0.13-alpha1-bookworm-rootless + should_not_exist $image bonsai-alpha1-bookworm + should_not_exist $image bonsai-alpha1-bookworm-rootless + should_exist gardendev/garden 0.13.0-alpha1-bookworm + should_exist gardendev/garden 0.13.0-alpha1-bookworm-rootless done TEST "prerelease tags for alpine" @@ -196,22 +196,22 @@ TEST "prerelease tags for alpine" TEST "production release tags for debian" MAJOR_VERSION=0 MINOR_VERSION=13 PATCH_VERSION=0 CODENAME=bonsai \ - docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" buster + docker buildx bake --progress=plain -f "$(dirname "$0")/docker-bake.hcl" bookworm for image in gardendev/garden{,-aws,-azure,-gcloud,-aws-gcloud,-aws-gcloud-azure} do should_not_exist $image latest - should_exist $image 0.13-buster - should_exist $image 0.13-buster-rootless - should_exist $image 0.13.0-buster - should_exist $image 0.13.0-buster-rootless - should_exist $image bonsai-buster - should_exist $image bonsai-buster-rootless - should_not_exist $image 0.13-edge-buster - should_not_exist $image 0.13-edge-buster-rootless - should_not_exist $image bonsai-edge-buster - should_not_exist $image bonsai-edge-buster-rootless + should_exist $image 0.13-bookworm + should_exist $image 0.13-bookworm-rootless + should_exist $image 0.13.0-bookworm + should_exist $image 0.13.0-bookworm-rootless + should_exist $image bonsai-bookworm + should_exist $image bonsai-bookworm-rootless + should_not_exist $image 0.13-edge-bookworm + should_not_exist $image 0.13-edge-bookworm-rootless + should_not_exist $image bonsai-edge-bookworm + should_not_exist $image bonsai-edge-bookworm-rootless done TEST "production release tags for alpine" diff --git a/support/docker-bake.hcl b/support/docker-bake.hcl index 96cc5b6c6d..e6c26d8b1d 100644 --- a/support/docker-bake.hcl +++ b/support/docker-bake.hcl @@ -72,25 +72,25 @@ function "repository" { ## group "all" { - targets = ["buster", "alpine"] + targets = ["bookworm", "alpine"] } -group "buster" { +group "bookworm" { targets = [ - # Root buster - "buster-base", - "buster-aws", - "buster-azure", - "buster-gcloud", - "buster-aws-gcloud", - "buster-aws-gcloud-azure", - # Rootless buster - "buster-rootless", - "buster-aws-rootless", - "buster-azure-rootless", - "buster-gcloud-rootless", - "buster-aws-gcloud-rootless", - "buster-aws-gcloud-azure-rootless", + # Root bookworm + "bookworm-base", + "bookworm-aws", + "bookworm-azure", + "bookworm-gcloud", + "bookworm-aws-gcloud", + "bookworm-aws-gcloud-azure", + # Rootless bookworm + "bookworm-rootless", + "bookworm-aws-rootless", + "bookworm-azure-rootless", + "bookworm-gcloud-rootless", + "bookworm-aws-gcloud-rootless", + "bookworm-aws-gcloud-azure-rootless", ] } @@ -117,12 +117,12 @@ group "alpine" { ## Images ## -target "buster-base" { +target "bookworm-base" { dockerfile = "../../support/debian.Dockerfile" target = "garden-base" platforms = ["linux/amd64"] context = "dist/linux-amd64" - tags = repository("gardendev/garden", tags("buster")) + tags = repository("gardendev/garden", tags("bookworm")) } target "alpine-base" { @@ -136,7 +136,7 @@ target "alpine-base" { target "aws" { name = "${distro}-aws" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-base"] target = "garden-aws" @@ -146,7 +146,7 @@ target "aws" { target "azure" { name = "${distro}-azure" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-base"] target = "garden-azure" @@ -156,7 +156,7 @@ target "azure" { target "gcloud" { name = "${distro}-gcloud" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-base"] target = "garden-gcloud" @@ -166,7 +166,7 @@ target "gcloud" { target "aws-gcloud" { name = "${distro}-aws-gcloud" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-base"] target = "garden-aws-gcloud" @@ -176,7 +176,7 @@ target "aws-gcloud" { target "aws-gcloud-azure" { name = "${distro}-aws-gcloud-azure" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-base"] target = "garden-aws-gcloud-azure" @@ -190,7 +190,7 @@ target "aws-gcloud-azure" { target "rootless" { name = "${distro}-rootless" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-base"] tags = repository("gardendev/garden", tags("${distro}-rootless")) @@ -202,7 +202,7 @@ target "rootless" { target "aws-rootless" { name = "${distro}-aws-rootless" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-rootless", "${distro}-aws"] tags = repository("gardendev/garden-aws", tags("${distro}-rootless")) @@ -211,7 +211,7 @@ target "aws-rootless" { target "azure-rootless" { name = "${distro}-azure-rootless" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-rootless", "${distro}-azure"] tags = repository("gardendev/garden-azure", tags("${distro}-rootless")) @@ -220,7 +220,7 @@ target "azure-rootless" { target "gcloud-rootless" { name = "${distro}-gcloud-rootless" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-rootless", "${distro}-gcloud"] tags = repository("gardendev/garden-gcloud", tags("${distro}-rootless")) @@ -229,7 +229,7 @@ target "gcloud-rootless" { target "aws-gcloud-rootless" { name = "${distro}-aws-gcloud-rootless" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-rootless", "${distro}-aws-gcloud"] tags = repository("gardendev/garden-aws-gcloud", tags("${distro}-rootless")) @@ -238,8 +238,8 @@ target "aws-gcloud-rootless" { target "aws-gcloud-azure-rootless" { name = "${distro}-aws-gcloud-azure-rootless" matrix = { - distro = ["buster", "alpine"] + distro = ["bookworm", "alpine"] } inherits = ["${distro}-rootless", "${distro}-aws-gcloud-azure"] tags = repository("gardendev/garden-aws-gcloud-azure", tags("${distro}-rootless")) -} \ No newline at end of file +}