From 7c18c6131d6a178b4577dd62319c3183d7b68952 Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 19 Jul 2023 17:52:25 +0000 Subject: [PATCH 1/9] Update dind install --- .../devcontainer-feature.json | 7 +- src/docker-in-docker/install.sh | 77 ++++--------------- 2 files changed, 16 insertions(+), 68 deletions(-) diff --git a/src/docker-in-docker/devcontainer-feature.json b/src/docker-in-docker/devcontainer-feature.json index 334982161..1cec1a796 100644 --- a/src/docker-in-docker/devcontainer-feature.json +++ b/src/docker-in-docker/devcontainer-feature.json @@ -24,11 +24,10 @@ "type": "string", "enum": [ "none", - "v1", - "v2" + "latest" ], - "default": "v1", - "description": "Default version of Docker Compose (v1 or v2 or none)" + "default": "latest", + "description": "Default version of Docker Compose (latest, none or specific version number)" }, "azureDnsAutoDetection": { "type": "boolean", diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index 6c889f5ac..97848a6fe 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -10,7 +10,7 @@ DOCKER_VERSION="${VERSION:-"latest"}" # The Docker/Moby Engine + CLI should match in version USE_MOBY="${MOBY:-"true"}" -DOCKER_DASH_COMPOSE_VERSION="${DOCKERDASHCOMPOSEVERSION:-"v1"}" # v1 or v2 or none +DOCKER_DASH_COMPOSE_VERSION="${DOCKERDASHCOMPOSEVERSION:-"latest"}" # v1 or v2 or none AZURE_DNS_AUTO_DETECTION="${AZUREDNSAUTODETECTION:-"true"}" DOCKER_DEFAULT_ADDRESS_POOL="${DOCKERDEFAULTADDRESSPOOL}" USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" @@ -244,73 +244,22 @@ echo "Finished installing docker / moby!" # If 'docker-compose' command is to be included if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then - # Install Docker Compose if not already installed and is on a supported architecture - if type docker-compose > /dev/null 2>&1; then - echo "Docker Compose v1 already installed." - else - target_compose_arch="${architecture}" - if [ "${target_compose_arch}" = "amd64" ]; then - target_compose_arch="x86_64" - fi - if [ "${target_compose_arch}" != "x86_64" ]; then - # Use pip to get a version that runs on this architecture - check_packages python3-minimal python3-pip libffi-dev python3-venv - export PIPX_HOME=/usr/local/pipx - mkdir -p ${PIPX_HOME} - export PIPX_BIN_DIR=/usr/local/bin - export PYTHONUSERBASE=/tmp/pip-tmp - export PIP_CACHE_DIR=/tmp/pip-tmp/cache - pipx_bin=pipx - if ! type pipx > /dev/null 2>&1; then - pip3 install --disable-pip-version-check --no-cache-dir --user pipx - pipx_bin=/tmp/pip-tmp/bin/pipx - fi - - set +e - ${pipx_bin} install --pip-args '--no-cache-dir --force-reinstall' docker-compose - exit_code=$? - set -e - - if [ ${exit_code} -ne 0 ]; then - # Temporary: https://github.com/devcontainers/features/issues/616 - # See https://github.com/yaml/pyyaml/issues/601 - echo "(*) Failed to install docker-compose via pipx. Trying via pip3..." - - export PYTHONUSERBASE=/usr/local - pip3 install --disable-pip-version-check --no-cache-dir --user "Cython<3.0" pyyaml wheel docker-compose --no-build-isolation - fi - - rm -rf /tmp/pip-tmp - else - compose_v1_version="1" - find_version_from_git_tags compose_v1_version "https://github.com/docker/compose" "tags/" - echo "(*) Installing docker-compose ${compose_v1_version}..." - curl -fsSL "https://github.com/docker/compose/releases/download/${compose_v1_version}/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose - fi + if [ "${architecture}" == "amd64" ]; then + dockerComposeArch="x86_64" + elif [ "${architecture}" == "arm64" ]; then + dockerComposeArch="aarch64" fi - # Install docker-compose switch if not already installed - https://github.com/docker/compose-switch#manual-installation - current_v1_compose_path="$(which docker-compose)" - target_v1_compose_path="$(dirname "${current_v1_compose_path}")/docker-compose-v1" - if ! type compose-switch > /dev/null 2>&1; then - echo "(*) Installing compose-switch..." - compose_switch_version="latest" - find_version_from_git_tags compose_switch_version "https://github.com/docker/compose-switch" - curl -fsSL "https://github.com/docker/compose-switch/releases/download/v${compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/compose-switch - chmod +x /usr/local/bin/compose-switch - # TODO: Verify checksum once available: https://github.com/docker/compose-switch/issues/11 - - # Setup v1 CLI as alternative in addition to compose-switch (which maps to v2) - mv "${current_v1_compose_path}" "${target_v1_compose_path}" - update-alternatives --install /usr/local/bin/docker-compose docker-compose /usr/local/bin/compose-switch 99 - update-alternatives --install /usr/local/bin/docker-compose docker-compose "${target_v1_compose_path}" 1 - fi - if [ "${DOCKER_DASH_COMPOSE_VERSION}" = "v1" ]; then - update-alternatives --set docker-compose "${target_v1_compose_path}" + if [ "${DOCKER_DASH_COMPOSE_VERSION}" == "latest" ]; then + docker_compose_version=$( curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | jq -r '.tag_name' ) else - update-alternatives --set docker-compose /usr/local/bin/compose-switch + docker_compose_version="${DOCKER_DASH_COMPOSE_VERSION}" fi + + curl --location https://github.com/docker/compose/releases/download/${docker_compose_version}/docker-compose-linux-${dockerComposeArch} \ + --output /usr/local/bin/docker-compose + + chmod +x /usr/local/bin/docker-compose fi # If init file already exists, exit From 4754e5bd78bbdde017097c3068536a37253bb1c2 Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 19 Jul 2023 20:11:03 +0000 Subject: [PATCH 2/9] Use find_version_from_git_tags --- src/docker-in-docker/devcontainer-feature.json | 2 +- src/docker-in-docker/install.sh | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/docker-in-docker/devcontainer-feature.json b/src/docker-in-docker/devcontainer-feature.json index 1cec1a796..6e026e7ce 100644 --- a/src/docker-in-docker/devcontainer-feature.json +++ b/src/docker-in-docker/devcontainer-feature.json @@ -27,7 +27,7 @@ "latest" ], "default": "latest", - "description": "Default version of Docker Compose (latest, none or specific version number)" + "description": "Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2)" }, "azureDnsAutoDetection": { "type": "boolean", diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index 97848a6fe..1ba74e668 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -251,12 +251,15 @@ if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then fi if [ "${DOCKER_DASH_COMPOSE_VERSION}" == "latest" ]; then - docker_compose_version=$( curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | jq -r '.tag_name' ) + docker_compose_version="latest" + find_version_from_git_tags docker_compose_version "https://github.com/docker/compose" "refs/tags/v" else docker_compose_version="${DOCKER_DASH_COMPOSE_VERSION}" fi - curl --location https://github.com/docker/compose/releases/download/${docker_compose_version}/docker-compose-linux-${dockerComposeArch} \ + echo "(*) Installing docker-compose ${docker_compose_version}..." + + curl --location https://github.com/docker/compose/releases/download/v${docker_compose_version}/docker-compose-linux-${dockerComposeArch} \ --output /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose From 5a770c5b964c99178baa9360d224b56f5bc799cc Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 19 Jul 2023 20:18:53 +0000 Subject: [PATCH 3/9] Bump version Update README --- src/docker-in-docker/README.md | 4 ++-- src/docker-in-docker/devcontainer-feature.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/docker-in-docker/README.md b/src/docker-in-docker/README.md index bfca77357..83dd91082 100644 --- a/src/docker-in-docker/README.md +++ b/src/docker-in-docker/README.md @@ -7,7 +7,7 @@ Create child containers *inside* a container, independent from the host's docker ```json "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": {} + "ghcr.io/devcontainers/features/docker-in-docker:3": {} } ``` @@ -17,7 +17,7 @@ Create child containers *inside* a container, independent from the host's docker |-----|-----|-----|-----| | version | Select or enter a Docker/Moby Engine version. (Availability can vary by OS version.) | string | latest | | moby | Install OSS Moby build instead of Docker CE | boolean | true | -| dockerDashComposeVersion | Default version of Docker Compose (v1 or v2 or none) | string | v1 | +| dockerDashComposeVersion | Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2) | string | latest | | azureDnsAutoDetection | Allow automatically setting the dockerd DNS server when the installation script detects it is running in Azure | boolean | true | | dockerDefaultAddressPool | Define default address pools for Docker networks. e.g. base=192.168.0.0/16,size=24 | string | - | | installDockerBuildx | Install Docker Buildx | boolean | true | diff --git a/src/docker-in-docker/devcontainer-feature.json b/src/docker-in-docker/devcontainer-feature.json index 6e026e7ce..c543b1064 100644 --- a/src/docker-in-docker/devcontainer-feature.json +++ b/src/docker-in-docker/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "docker-in-docker", - "version": "2.2.1", + "version": "3.0.0", "name": "Docker (Docker-in-Docker)", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/docker-in-docker", "description": "Create child containers *inside* a container, independent from the host's docker instance. Installs Docker extension in the container along with needed CLIs.", From ef557fd24d45edbad28b9ae263630e5487048c26 Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 19 Jul 2023 21:31:09 +0000 Subject: [PATCH 4/9] Update references to v1 Remove reference to compose-switch --- test/docker-in-docker/docker_build.sh | 5 ++--- test/docker-in-docker/docker_build_no_compose.sh | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/docker-in-docker/docker_build.sh b/test/docker-in-docker/docker_build.sh index d51e7d644..a0ed7caac 100755 --- a/test/docker-in-docker/docker_build.sh +++ b/test/docker-in-docker/docker_build.sh @@ -9,8 +9,7 @@ source dev-container-features-test-lib check "docker-buildx" docker buildx version check "docker-build" docker build ./ -check "installs docker-compose v1 install" bash -c "type docker-compose" -check "installs compose-switch" bash -c "[[ -f /usr/local/bin/compose-switch ]]" - +check "installs docker-compose v2 install" bash -c "type docker-compose" +check # Report result reportResults diff --git a/test/docker-in-docker/docker_build_no_compose.sh b/test/docker-in-docker/docker_build_no_compose.sh index e913be321..a420b8b10 100755 --- a/test/docker-in-docker/docker_build_no_compose.sh +++ b/test/docker-in-docker/docker_build_no_compose.sh @@ -9,8 +9,7 @@ source dev-container-features-test-lib check "docker-buildx" docker buildx version check "docker-build" docker build ./ -check "not installing compose skips docker-compose v1 install" bash -c "! type docker-compose" -check "not installing compose skips compose-switch" bash -c "[[ ! -f /usr/local/bin/compose-switch ]]" +check "not installing compose skips docker-compose v2 install" bash -c "! type docker-compose" # Report result reportResults From 35b9bd7ef773700953b3d3382c455e8c212091ae Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 19 Jul 2023 21:48:11 +0000 Subject: [PATCH 5/9] Updated docker-outside-of-docker --- src/docker-outside-of-docker/README.md | 2 +- .../devcontainer-feature.json | 9 ++-- src/docker-outside-of-docker/install.sh | 53 ++++++------------- test/docker-outside-of-docker/docker_build.sh | 2 +- .../docker_build_no_compose.sh | 2 +- .../docker_dash_compose_v1.sh | 13 ----- .../docker_dash_compose_v1_moby.sh | 1 - .../docker_dash_compose_v2.sh | 2 - test/docker-outside-of-docker/scenarios.json | 23 +------- 9 files changed, 26 insertions(+), 81 deletions(-) delete mode 100755 test/docker-outside-of-docker/docker_dash_compose_v1.sh delete mode 120000 test/docker-outside-of-docker/docker_dash_compose_v1_moby.sh diff --git a/src/docker-outside-of-docker/README.md b/src/docker-outside-of-docker/README.md index 94c891564..f8a389519 100644 --- a/src/docker-outside-of-docker/README.md +++ b/src/docker-outside-of-docker/README.md @@ -19,7 +19,7 @@ Re-use the host docker socket, adding the Docker CLI to a container. Feature inv |-----|-----|-----|-----| | version | Select or enter a Docker/Moby CLI version. (Availability can vary by OS version.) | string | latest | | moby | Install OSS Moby build instead of Docker CE | boolean | true | -| dockerDashComposeVersion | Compose version to use for docker-compose (v1 or v2 or none) | string | v2 | +| dockerDashComposeVersion | Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2) | string | latest | | installDockerBuildx | Install Docker Buildx | boolean | true | ## Customizations diff --git a/src/docker-outside-of-docker/devcontainer-feature.json b/src/docker-outside-of-docker/devcontainer-feature.json index d3123fabe..d61993bdd 100644 --- a/src/docker-outside-of-docker/devcontainer-feature.json +++ b/src/docker-outside-of-docker/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "docker-outside-of-docker", - "version": "1.3.0", + "version": "2.0.0", "name": "Docker (docker-outside-of-docker)", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/docker-outside-of-docker", "description": "Re-use the host docker socket, adding the Docker CLI to a container. Feature invokes a script to enable using a forwarded Docker socket within a container to run Docker commands.", @@ -24,11 +24,10 @@ "type": "string", "enum": [ "none", - "v1", - "v2" + "latest" ], - "default": "v2", - "description": "Compose version to use for docker-compose (v1 or v2 or none)" + "default": "latest", + "description": "Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2)" }, "installDockerBuildx": { "type": "boolean", diff --git a/src/docker-outside-of-docker/install.sh b/src/docker-outside-of-docker/install.sh index 7bf2138b4..88c488e99 100755 --- a/src/docker-outside-of-docker/install.sh +++ b/src/docker-outside-of-docker/install.sh @@ -218,44 +218,25 @@ fi # If 'docker-compose' command is to be included if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then - # Install Docker Compose if not already installed and is on a supported architecture - if type docker-compose > /dev/null 2>&1; then - echo "Docker Compose already installed." - elif [ "${DOCKER_DASH_COMPOSE_VERSION}" = "v1" ]; then - TARGET_COMPOSE_ARCH="$(uname -m)" - if [ "${TARGET_COMPOSE_ARCH}" = "amd64" ]; then - TARGET_COMPOSE_ARCH="x86_64" - fi - if [ "${TARGET_COMPOSE_ARCH}" != "x86_64" ]; then - # Use pip to get a version that runs on this architecture - check_packages python3-minimal python3-pip libffi-dev python3-venv - export PIPX_HOME=/usr/local/pipx - mkdir -p ${PIPX_HOME} - export PIPX_BIN_DIR=/usr/local/bin - export PYTHONUSERBASE=/tmp/pip-tmp - export PIP_CACHE_DIR=/tmp/pip-tmp/cache - pipx_bin=pipx - if ! type pipx > /dev/null 2>&1; then - pip3 install --disable-pip-version-check --no-cache-dir --user pipx - pipx_bin=/tmp/pip-tmp/bin/pipx - fi - ${pipx_bin} install --pip-args '--no-cache-dir --force-reinstall' docker-compose - rm -rf /tmp/pip-tmp - else - compose_v1_version="1" - find_version_from_git_tags compose_v1_version "https://github.com/docker/compose" "tags/" - echo "(*) Installing docker-compose ${compose_v1_version}..." - curl -fsSL "https://github.com/docker/compose/releases/download/${compose_v1_version}/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose - fi + if [ "${architecture}" == "amd64" ]; then + dockerComposeArch="x86_64" + elif [ "${architecture}" == "arm64" ]; then + dockerComposeArch="aarch64" + fi + + if [ "${DOCKER_DASH_COMPOSE_VERSION}" == "latest" ]; then + docker_compose_version="latest" + find_version_from_git_tags docker_compose_version "https://github.com/docker/compose" "refs/tags/v" else - echo "(*) Installing compose-switch as docker-compose..." - compose_switch_version="latest" - find_version_from_git_tags compose_switch_version "https://github.com/docker/compose-switch" - curl -fsSL "https://github.com/docker/compose-switch/releases/download/v${compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose - # TODO: Verify checksum once available: https://github.com/docker/compose-switch/issues/11 + docker_compose_version="${DOCKER_DASH_COMPOSE_VERSION}" fi + + echo "(*) Installing docker-compose ${docker_compose_version}..." + + curl --location https://github.com/docker/compose/releases/download/v${docker_compose_version}/docker-compose-linux-${dockerComposeArch} \ + --output /usr/local/bin/docker-compose + + chmod +x /usr/local/bin/docker-compose fi # Setup a docker group in the event the docker socket's group is not root diff --git a/test/docker-outside-of-docker/docker_build.sh b/test/docker-outside-of-docker/docker_build.sh index 056a76425..a78f1bc8b 100755 --- a/test/docker-outside-of-docker/docker_build.sh +++ b/test/docker-outside-of-docker/docker_build.sh @@ -9,7 +9,7 @@ source dev-container-features-test-lib check "docker-buildx" docker buildx version check "docker-build" docker build ./ -check "installs docker-compose v1 install" bash -c "type docker-compose" +check "installs docker-compose v2 install" bash -c "type docker-compose" # Report result reportResults diff --git a/test/docker-outside-of-docker/docker_build_no_compose.sh b/test/docker-outside-of-docker/docker_build_no_compose.sh index 477bf2149..a420b8b10 100755 --- a/test/docker-outside-of-docker/docker_build_no_compose.sh +++ b/test/docker-outside-of-docker/docker_build_no_compose.sh @@ -9,7 +9,7 @@ source dev-container-features-test-lib check "docker-buildx" docker buildx version check "docker-build" docker build ./ -check "not installing compose skips docker-compose v1 install" bash -c "! type docker-compose" +check "not installing compose skips docker-compose v2 install" bash -c "! type docker-compose" # Report result reportResults diff --git a/test/docker-outside-of-docker/docker_dash_compose_v1.sh b/test/docker-outside-of-docker/docker_dash_compose_v1.sh deleted file mode 100755 index d95f3cf73..000000000 --- a/test/docker-outside-of-docker/docker_dash_compose_v1.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -set -e - -# Optional: Import test library -source dev-container-features-test-lib - -# Definition specific tests -check "docker compose" bash -c "docker compose version | grep -E '2.[0-9]+.[0-9]+'" -check "docker-compose" bash -c "docker-compose --version | grep -E '1.[0-9]+.[0-9]+'" - -# Report result -reportResults diff --git a/test/docker-outside-of-docker/docker_dash_compose_v1_moby.sh b/test/docker-outside-of-docker/docker_dash_compose_v1_moby.sh deleted file mode 120000 index 51dc7d26b..000000000 --- a/test/docker-outside-of-docker/docker_dash_compose_v1_moby.sh +++ /dev/null @@ -1 +0,0 @@ -./docker_dash_compose_v1.sh \ No newline at end of file diff --git a/test/docker-outside-of-docker/docker_dash_compose_v2.sh b/test/docker-outside-of-docker/docker_dash_compose_v2.sh index b24238f0d..8f2a104f5 100755 --- a/test/docker-outside-of-docker/docker_dash_compose_v2.sh +++ b/test/docker-outside-of-docker/docker_dash_compose_v2.sh @@ -9,7 +9,5 @@ source dev-container-features-test-lib check "docker compose" bash -c "docker compose version | grep -E '2.[0-9]+.[0-9]+'" check "docker-compose" bash -c "docker-compose --version | grep -E '2.[0-9]+.[0-9]+'" -check "installs compose-switch as docker-compose" bash -c "[[ -f /usr/local/bin/docker-compose ]]" - # Report result reportResults diff --git a/test/docker-outside-of-docker/scenarios.json b/test/docker-outside-of-docker/scenarios.json index 3b82c6cc5..889e725a0 100644 --- a/test/docker-outside-of-docker/scenarios.json +++ b/test/docker-outside-of-docker/scenarios.json @@ -49,7 +49,8 @@ "image": "mcr.microsoft.com/devcontainers/base:ubuntu-20.04", "features": { "docker-outside-of-docker": { - "moby": true + "moby": true, + "dockerDashComposeVersion": "v2" } }, "containerUser": "vscode" @@ -76,26 +77,6 @@ }, "containerUser": "vscode" }, - "docker_dash_compose_v1": { - "image": "mcr.microsoft.com/devcontainers/base:ubuntu-20.04", - "features": { - "docker-outside-of-docker": { - "moby": false, - "dockerDashComposeVersion": "v1" - } - }, - "containerUser": "vscode" - }, - "docker_dash_compose_v1_moby": { - "image": "mcr.microsoft.com/devcontainers/base:ubuntu-20.04", - "features": { - "docker-outside-of-docker": { - "moby": true, - "dockerDashComposeVersion": "v1" - } - }, - "containerUser": "vscode" - }, "docker_dash_compose_v2": { "image": "mcr.microsoft.com/devcontainers/base:ubuntu-20.04", "features": { From 12c446ce85120644c13d522e113808f4e9610462 Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 26 Jul 2023 20:16:57 +0000 Subject: [PATCH 6/9] Revert docker-in-docker README --- src/docker-in-docker/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/docker-in-docker/README.md b/src/docker-in-docker/README.md index 83dd91082..bfca77357 100644 --- a/src/docker-in-docker/README.md +++ b/src/docker-in-docker/README.md @@ -7,7 +7,7 @@ Create child containers *inside* a container, independent from the host's docker ```json "features": { - "ghcr.io/devcontainers/features/docker-in-docker:3": {} + "ghcr.io/devcontainers/features/docker-in-docker:2": {} } ``` @@ -17,7 +17,7 @@ Create child containers *inside* a container, independent from the host's docker |-----|-----|-----|-----| | version | Select or enter a Docker/Moby Engine version. (Availability can vary by OS version.) | string | latest | | moby | Install OSS Moby build instead of Docker CE | boolean | true | -| dockerDashComposeVersion | Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2) | string | latest | +| dockerDashComposeVersion | Default version of Docker Compose (v1 or v2 or none) | string | v1 | | azureDnsAutoDetection | Allow automatically setting the dockerd DNS server when the installation script detects it is running in Azure | boolean | true | | dockerDefaultAddressPool | Define default address pools for Docker networks. e.g. base=192.168.0.0/16,size=24 | string | - | | installDockerBuildx | Install Docker Buildx | boolean | true | From 1c084daeaa467f830ab158f2d535160ae1dcf5a5 Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 26 Jul 2023 20:18:16 +0000 Subject: [PATCH 7/9] Revert docker-outside-of-docker README --- src/docker-outside-of-docker/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docker-outside-of-docker/README.md b/src/docker-outside-of-docker/README.md index f8a389519..94c891564 100644 --- a/src/docker-outside-of-docker/README.md +++ b/src/docker-outside-of-docker/README.md @@ -19,7 +19,7 @@ Re-use the host docker socket, adding the Docker CLI to a container. Feature inv |-----|-----|-----|-----| | version | Select or enter a Docker/Moby CLI version. (Availability can vary by OS version.) | string | latest | | moby | Install OSS Moby build instead of Docker CE | boolean | true | -| dockerDashComposeVersion | Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2) | string | latest | +| dockerDashComposeVersion | Compose version to use for docker-compose (v1 or v2 or none) | string | v2 | | installDockerBuildx | Install Docker Buildx | boolean | true | ## Customizations From 78c9082082e457e6ed8535c931a82fcebfdebdfa Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 26 Jul 2023 20:22:34 +0000 Subject: [PATCH 8/9] Use single equality Add else --- src/docker-in-docker/install.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index 1ba74e668..5bca89722 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -244,10 +244,13 @@ echo "Finished installing docker / moby!" # If 'docker-compose' command is to be included if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then - if [ "${architecture}" == "amd64" ]; then + if [ "${architecture}" = "amd64" ]; then dockerComposeArch="x86_64" elif [ "${architecture}" == "arm64" ]; then dockerComposeArch="aarch64" + else + echo "(!) Architecture ${architecture} unsupported" + exit 1 fi if [ "${DOCKER_DASH_COMPOSE_VERSION}" == "latest" ]; then From 4241686c2ee705b2ac457f74f1ecddecd663d3c3 Mon Sep 17 00:00:00 2001 From: Jacob Woffenden Date: Wed, 26 Jul 2023 21:25:08 +0000 Subject: [PATCH 9/9] test major version Update install Update tests --- .../devcontainer-feature.json | 10 ++++---- src/docker-in-docker/install.sh | 23 +++++++++++-------- test/docker-in-docker/docker_build.sh | 2 +- test/docker-in-docker/docker_build_2.sh | 2 ++ .../docker_build_compose_v1.sh | 15 ++++++++++++ test/docker-in-docker/docker_build_older.sh | 2 ++ test/docker-in-docker/scenarios.json | 16 +++++++++---- 7 files changed, 51 insertions(+), 19 deletions(-) create mode 100644 test/docker-in-docker/docker_build_compose_v1.sh diff --git a/src/docker-in-docker/devcontainer-feature.json b/src/docker-in-docker/devcontainer-feature.json index c543b1064..db6156a8a 100644 --- a/src/docker-in-docker/devcontainer-feature.json +++ b/src/docker-in-docker/devcontainer-feature.json @@ -22,12 +22,14 @@ }, "dockerDashComposeVersion": { "type": "string", - "enum": [ - "none", - "latest" + "proposals": [ + "latest", + "2.20.2", + "2.20", + "2" ], "default": "latest", - "description": "Default version of Docker Compose (latest, none or specific version number e.g. 2.20.2)" + "description": "Select or enter a Docker Compose version" }, "azureDnsAutoDetection": { "type": "boolean", diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index 5bca89722..da57b8bc7 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -10,7 +10,7 @@ DOCKER_VERSION="${VERSION:-"latest"}" # The Docker/Moby Engine + CLI should match in version USE_MOBY="${MOBY:-"true"}" -DOCKER_DASH_COMPOSE_VERSION="${DOCKERDASHCOMPOSEVERSION:-"latest"}" # v1 or v2 or none +DOCKER_DASH_COMPOSE_VERSION="${DOCKERDASHCOMPOSEVERSION:-"latest"}" AZURE_DNS_AUTO_DETECTION="${AZUREDNSAUTODETECTION:-"true"}" DOCKER_DEFAULT_ADDRESS_POOL="${DOCKERDEFAULTADDRESSPOOL}" USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" @@ -244,6 +244,14 @@ echo "Finished installing docker / moby!" # If 'docker-compose' command is to be included if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then + + dockerComposeMajorVersion="$(echo ${DOCKER_DASH_COMPOSE_VERSION} | grep -oE '^[0-9]+' || echo '')" + + if [ "${dockerComposeMajorVersion}" = "1" ]; then + echo "(!) docker-compose v1 is not supported. To use docker-compose, set the DOCKER_DASH_COMPOSE_VERSION feature option to a v2 version (eg: 2.0.0)" + exit 1 + fi + if [ "${architecture}" = "amd64" ]; then dockerComposeArch="x86_64" elif [ "${architecture}" == "arm64" ]; then @@ -253,16 +261,11 @@ if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then exit 1 fi - if [ "${DOCKER_DASH_COMPOSE_VERSION}" == "latest" ]; then - docker_compose_version="latest" - find_version_from_git_tags docker_compose_version "https://github.com/docker/compose" "refs/tags/v" - else - docker_compose_version="${DOCKER_DASH_COMPOSE_VERSION}" - fi - - echo "(*) Installing docker-compose ${docker_compose_version}..." + find_version_from_git_tags DOCKER_DASH_COMPOSE_VERSION "https://github.com/docker/compose" "refs/tags/v" + + echo "(*) Installing docker-compose ${DOCKER_DASH_COMPOSE_VERSION}..." - curl --location https://github.com/docker/compose/releases/download/v${docker_compose_version}/docker-compose-linux-${dockerComposeArch} \ + curl --location https://github.com/docker/compose/releases/download/v${DOCKER_DASH_COMPOSE_VERSION}/docker-compose-linux-${dockerComposeArch} \ --output /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose diff --git a/test/docker-in-docker/docker_build.sh b/test/docker-in-docker/docker_build.sh index a0ed7caac..a78f1bc8b 100755 --- a/test/docker-in-docker/docker_build.sh +++ b/test/docker-in-docker/docker_build.sh @@ -10,6 +10,6 @@ check "docker-buildx" docker buildx version check "docker-build" docker build ./ check "installs docker-compose v2 install" bash -c "type docker-compose" -check + # Report result reportResults diff --git a/test/docker-in-docker/docker_build_2.sh b/test/docker-in-docker/docker_build_2.sh index 742b222fb..a78f1bc8b 100644 --- a/test/docker-in-docker/docker_build_2.sh +++ b/test/docker-in-docker/docker_build_2.sh @@ -9,5 +9,7 @@ source dev-container-features-test-lib check "docker-buildx" docker buildx version check "docker-build" docker build ./ +check "installs docker-compose v2 install" bash -c "type docker-compose" + # Report result reportResults diff --git a/test/docker-in-docker/docker_build_compose_v1.sh b/test/docker-in-docker/docker_build_compose_v1.sh new file mode 100644 index 000000000..a420b8b10 --- /dev/null +++ b/test/docker-in-docker/docker_build_compose_v1.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +# Definition specific tests +check "docker-buildx" docker buildx version +check "docker-build" docker build ./ + +check "not installing compose skips docker-compose v2 install" bash -c "! type docker-compose" + +# Report result +reportResults diff --git a/test/docker-in-docker/docker_build_older.sh b/test/docker-in-docker/docker_build_older.sh index 742b222fb..a78f1bc8b 100644 --- a/test/docker-in-docker/docker_build_older.sh +++ b/test/docker-in-docker/docker_build_older.sh @@ -9,5 +9,7 @@ source dev-container-features-test-lib check "docker-buildx" docker buildx version check "docker-build" docker build ./ +check "installs docker-compose v2 install" bash -c "type docker-compose" + # Report result reportResults diff --git a/test/docker-in-docker/scenarios.json b/test/docker-in-docker/scenarios.json index 9c44478f1..5bd168062 100644 --- a/test/docker-in-docker/scenarios.json +++ b/test/docker-in-docker/scenarios.json @@ -32,7 +32,7 @@ "docker-in-docker": { "version": "latest", "moby": "false", - "dockerDashComposeVersion": "v2" + "dockerDashComposeVersion": "2" } }, "remoteUser": "node" @@ -44,7 +44,7 @@ "version": "latest", "installDockerBuildx": true, "moby": "false", - "dockerDashComposeVersion": "v2" + "dockerDashComposeVersion": "2" } } }, @@ -54,7 +54,7 @@ "docker-in-docker": { "version": "20", "moby": "false", - "dockerDashComposeVersion": "v2" + "dockerDashComposeVersion": "2" } }, "remoteUser": "node" @@ -67,6 +67,14 @@ } }, "remoteUser": "node" + }, + "docker_build_compose_v1": { + "image": "mcr.microsoft.com/devcontainers/javascript-node:0-18", + "features": { + "docker-in-docker": { + "dockerDashComposeVersion": "1" + } + }, + "remoteUser": "node" } - }