diff --git a/docker/Base.Dockerfile b/docker/Base.Dockerfile index 47dabaf..b7e0539 100644 --- a/docker/Base.Dockerfile +++ b/docker/Base.Dockerfile @@ -2,6 +2,14 @@ FROM node:18.17.1-bookworm-slim ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" + + +# TARGETPLATFORM: linux/amd64, linux/arm64, linux/arm/v7 +ARG TARGETPLATFORM + +# TARGETARCH: amd64, arm64, arm/v7 +ARG TARGETARCH + RUN apt update && apt install --yes --no-install-recommends \ curl \ ca-certificates \ @@ -18,7 +26,12 @@ RUN apt update && apt install --yes --no-install-recommends \ && apt update \ && apt --yes --no-install-recommends install \ docker-ce-cli \ - docker-compose-plugin \ && rm -rf /var/lib/apt/lists/* \ && npm install pnpm -g \ && pnpm install -g tsx + +# Download docker-compose, as the repo's docker-compose is not up-to-date. +COPY ./extra/download-docker-compose.ts ./extra/download-docker-compose.ts +ARG DOCKER_COMPOSE_VERSION="2.23.3" +RUN tsx ./extra/download-docker-compose.ts ${TARGETPLATFORM} ${DOCKER_COMPOSE_VERSION} \ + && docker compose version diff --git a/extra/download-docker-compose.ts b/extra/download-docker-compose.ts new file mode 100644 index 0000000..0a18531 --- /dev/null +++ b/extra/download-docker-compose.ts @@ -0,0 +1,39 @@ +import fs from "fs"; + +async function main() { + // TARGETPLATFORM + const targetPlatform = process.argv[2]; + + // Docker Compose version + const dockerComposeVersion = process.argv[3]; + + // Arch + let arch = ""; + + if (targetPlatform === "linux/amd64") { + arch = "x86_64"; + } else if (targetPlatform === "linux/arm64") { + arch = "aarch64"; + } else if (targetPlatform === "linux/arm/v7") { + arch = "armv7"; + } else { + throw new Error(`Unknown target platform: ${targetPlatform}`); + } + + // mkdir -p /root/.docker/cli-plugins + fs.mkdirSync("/root/.docker/cli-plugins", { recursive: true }); + + // Download URL + const url = `https://github.com/docker/compose/releases/download/v${dockerComposeVersion}/docker-compose-linux-${arch}`; + + console.log(url); + + // Download docker-compose using fetch api, to "/root/.docker/cli-plugins/docker-compose" + const buffer = await (await fetch(url)).arrayBuffer(); + fs.writeFileSync("/root/.docker/cli-plugins/docker-compose", Buffer.from(buffer)); + + // chmod +x /root/.docker/cli-plugins/docker-compose + fs.chmodSync("/root/.docker/cli-plugins/docker-compose", 0o111); +} + +main();