Compare commits

...

2 Commits

Author SHA1 Message Date
fa00a25d4d v5.9.0
Some checks failed
Docker (tags) / security (push) Failing after 2s
Docker (tags) / test (push) Has been skipped
Docker (tags) / release (push) Has been skipped
Docker (tags) / metadata (push) Has been skipped
2026-03-18 16:32:56 +00:00
547902d7dc feat(docker): add a reusable Alpine base image and refactor Alpine variants to extend it 2026-03-18 16:32:56 +00:00
9 changed files with 302 additions and 452 deletions

View File

@@ -27,6 +27,7 @@ RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selectio
ssh \ ssh \
wget \ wget \
unzip \ unzip \
jq \
iputils-ping \ iputils-ping \
dnsutils \ dnsutils \
tini \ tini \

61
Dockerfile_alpine Normal file
View File

@@ -0,0 +1,61 @@
FROM alpine:latest
LABEL author="Task Venture Capital GmbH <hello@task.vc>"
WORKDIR /workspace
# Important environment variables
ENV NODE_VERSION_LTS="24.13.0" \
NVM_DIR="/usr/local/nvm" \
NVM_NODEJS_ORG_MIRROR="https://unofficial-builds.nodejs.org/download/release"
# Install required packages for NVM and Node.js
RUN apk add --no-cache \
bash \
curl \
git \
ca-certificates \
unzip \
gcompat \
libstdc++ \
tini
# Install NVM (latest version for better Alpine/musl support)
RUN mkdir -p $NVM_DIR && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# Make nvm available globally in all bash shells (interactive + non-interactive)
# IMPORTANT: Create /etc/bash.bashrc with nvm initialization
RUN printf '%s\n%s\n%s\n' \
'export NVM_DIR="/usr/local/nvm"' \
'[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \
'[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \
> /etc/bash.bashrc
# Copy nvm wrapper scripts from support directory
COPY image_support_files/bash-with-nvm /usr/local/bin/bash-with-nvm
COPY image_support_files/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/bash-with-nvm /usr/local/bin/docker-entrypoint.sh
# Use wrapper for RUN commands to enable nvm
SHELL ["/usr/local/bin/bash-with-nvm"]
# Enable nvm for runtime bash commands (CI/CD workflows)
ENV BASH_ENV=/etc/bash.bashrc
# Install Node.js LTS via NVM
# Use musl-specific builds from unofficial-builds for Alpine compatibility
# TARGETARCH fix: QEMU buildx can report wrong arch via uname -m, causing NVM
# to download x64 binaries on arm64. We override nvm_get_arch to ensure the
# correct architecture binary is downloaded.
ARG TARGETARCH
RUN NVM_MUSL_ARCH=$([ "$TARGETARCH" = "arm64" ] && echo "arm64-musl" || echo "x64-musl") \
&& nvm_get_arch() { echo "$NVM_MUSL_ARCH"; } \
&& nvm install $NODE_VERSION_LTS \
&& nvm alias default $NODE_VERSION_LTS \
&& nvm use default
ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION_LTS/lib/node_modules
ENV PATH=$NVM_DIR/versions/node/v$NODE_VERSION_LTS/bin:$PATH
# Set entrypoint to make nvm available in all runtime contexts
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD ["bash"]

View File

@@ -1,59 +1,9 @@
FROM alpine:latest FROM host.today/ht-docker-node:alpine
LABEL author="Task Venture Capital GmbH <hello@task.vc>" LABEL author="Task Venture Capital GmbH <hello@task.vc>"
WORKDIR /workspace ENV BUN_INSTALL="/root/.bun"
# Important environment variables # Install Bun
ENV NODE_VERSION_LTS="24.13.0" \ RUN curl -fsSL https://bun.sh/install | bash
NVM_DIR="/usr/local/nvm" \
BUN_INSTALL="/root/.bun" \
NVM_NODEJS_ORG_MIRROR="https://unofficial-builds.nodejs.org/download/release"
# Install required packages for NVM and Node.js ENV PATH="$BUN_INSTALL/bin:$PATH"
RUN apk add --no-cache \
bash \
curl \
git \
ca-certificates \
unzip \
libstdc++ \
tini
# Install NVM (latest version for better Alpine/musl support)
RUN mkdir -p $NVM_DIR && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# Make nvm available globally in all bash shells (interactive + non-interactive)
# IMPORTANT: Create /etc/bash.bashrc with nvm initialization
RUN printf '%s\n%s\n%s\n' \
'export NVM_DIR="/usr/local/nvm"' \
'[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \
'[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \
> /etc/bash.bashrc
# Copy nvm wrapper scripts from support directory
COPY image_support_files/bash-with-nvm /usr/local/bin/bash-with-nvm
COPY image_support_files/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/bash-with-nvm /usr/local/bin/docker-entrypoint.sh
# Use wrapper for RUN commands to enable nvm
SHELL ["/usr/local/bin/bash-with-nvm"]
# Enable nvm for runtime bash commands (CI/CD workflows)
ENV BASH_ENV=/etc/bash.bashrc
# Install Node.js LTS via NVM and Bun
# TARGETARCH fix: QEMU buildx can report wrong arch via uname -m
ARG TARGETARCH
RUN NVM_MUSL_ARCH=$([ "$TARGETARCH" = "arm64" ] && echo "arm64-musl" || echo "x64-musl") \
&& nvm_get_arch() { echo "$NVM_MUSL_ARCH"; } \
&& nvm install $NODE_VERSION_LTS \
&& nvm alias default $NODE_VERSION_LTS \
&& nvm use default \
&& curl -fsSL https://bun.sh/install | bash
ENV PATH="$BUN_INSTALL/bin:$NVM_DIR/versions/node/v$NODE_VERSION_LTS/bin:$PATH"
ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION_LTS/lib/node_modules
# Set entrypoint to make nvm available in all runtime contexts
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD ["bash"]

View File

@@ -1,59 +1,9 @@
FROM alpine:edge FROM host.today/ht-docker-node:alpine
LABEL author="Task Venture Capital GmbH <hello@task.vc>" LABEL author="Task Venture Capital GmbH <hello@task.vc>"
WORKDIR /workspace ENV DENO_INSTALL="/root/.deno"
# Important environment variables # Install Deno (standard glibc binary works via gcompat in base image)
ENV NODE_VERSION_LTS="24.13.0" \ RUN curl -fsSL https://deno.land/install.sh | sh
NVM_DIR="/usr/local/nvm" \
NVM_NODEJS_ORG_MIRROR="https://unofficial-builds.nodejs.org/download/release"
# Install required packages for NVM and Node.js ENV PATH="$DENO_INSTALL/bin:$PATH"
# Install Deno from Alpine community repository (native musl build)
RUN apk add --no-cache \
bash \
curl \
git \
ca-certificates \
unzip \
libstdc++ \
tini \
deno
# Install NVM (latest version for better Alpine/musl support)
RUN mkdir -p $NVM_DIR && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# Make nvm available globally in all bash shells (interactive + non-interactive)
# IMPORTANT: Create /etc/bash.bashrc with nvm initialization
RUN printf '%s\n%s\n%s\n' \
'export NVM_DIR="/usr/local/nvm"' \
'[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \
'[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \
> /etc/bash.bashrc
# Copy nvm wrapper scripts from support directory
COPY image_support_files/bash-with-nvm /usr/local/bin/bash-with-nvm
COPY image_support_files/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/bash-with-nvm /usr/local/bin/docker-entrypoint.sh
# Use wrapper for RUN commands to enable nvm
SHELL ["/usr/local/bin/bash-with-nvm"]
# Enable nvm for runtime bash commands (CI/CD workflows)
ENV BASH_ENV=/etc/bash.bashrc
# Install Node.js LTS via NVM (Deno already installed from Alpine repos)
# TARGETARCH fix: QEMU buildx can report wrong arch via uname -m
ARG TARGETARCH
RUN NVM_MUSL_ARCH=$([ "$TARGETARCH" = "arm64" ] && echo "arm64-musl" || echo "x64-musl") \
&& nvm_get_arch() { echo "$NVM_MUSL_ARCH"; } \
&& nvm install $NODE_VERSION_LTS \
&& nvm alias default $NODE_VERSION_LTS \
&& nvm use default
ENV PATH="$NVM_DIR/versions/node/v$NODE_VERSION_LTS/bin:$PATH"
ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION_LTS/lib/node_modules
# Set entrypoint to make nvm available in all runtime contexts
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD ["bash"]

View File

@@ -1,74 +1,22 @@
FROM alpine:latest FROM host.today/ht-docker-node:alpine
LABEL author="Task Venture Capital GmbH <hello@task.vc>" LABEL author="Task Venture Capital GmbH <hello@task.vc>"
WORKDIR /workspace ENV PNPM_HOME="/root/.local/share/pnpm"
# Important environment variables # Install additional build tools for native modules
ENV NODE_VERSION_LTS="24.13.0" \
NVM_DIR="/usr/local/nvm" \
PNPM_HOME="/root/.local/share/pnpm" \
NVM_NODEJS_ORG_MIRROR="https://unofficial-builds.nodejs.org/download/release"
# Install required packages for NVM and Node.js
RUN apk add --no-cache \ RUN apk add --no-cache \
bash \
curl \
git \
build-base \ build-base \
python3 \ python3 \
linux-headers \ linux-headers \
ca-certificates \
wget \ wget \
unzip \
iputils \ iputils \
bind-tools \ bind-tools
libstdc++ \
tini
# Install NVM (latest version for better Alpine/musl support)
RUN mkdir -p $NVM_DIR && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# Make nvm available globally in all bash shells (interactive + non-interactive)
# IMPORTANT: Create /etc/bash.bashrc with nvm initialization
RUN printf '%s\n%s\n%s\n' \
'export NVM_DIR="/usr/local/nvm"' \
'[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \
'[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \
> /etc/bash.bashrc
# Copy nvm wrapper scripts from support directory
COPY image_support_files/bash-with-nvm /usr/local/bin/bash-with-nvm
COPY image_support_files/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/bash-with-nvm /usr/local/bin/docker-entrypoint.sh
# Use wrapper for RUN commands to enable nvm
SHELL ["/usr/local/bin/bash-with-nvm"]
# Enable nvm for runtime bash commands (CI/CD workflows)
ENV BASH_ENV=/etc/bash.bashrc
# Prepare pnpm directory # Prepare pnpm directory
RUN mkdir -p ${PNPM_HOME} RUN mkdir -p ${PNPM_HOME}
ENV PATH="$PNPM_HOME:$PATH" ENV PATH="$PNPM_HOME:$PATH"
# Install Node.js LTS via NVM and pnpm # Install pnpm
# Use musl-specific builds from unofficial-builds for Alpine compatibility RUN npm install -g pnpm \
# TARGETARCH fix: QEMU buildx can report wrong arch via uname -m, causing NVM
# to download x64 binaries on arm64. We create a temporary uname wrapper to
# ensure the correct architecture binary is downloaded.
ARG TARGETARCH
RUN NVM_MUSL_ARCH=$([ "$TARGETARCH" = "arm64" ] && echo "arm64-musl" || echo "x64-musl") \
&& nvm_get_arch() { echo "$NVM_MUSL_ARCH"; } \
&& nvm install $NODE_VERSION_LTS \
&& nvm alias default $NODE_VERSION_LTS \
&& nvm use default \
&& npm install -g pnpm \
&& pnpm -v \ && pnpm -v \
&& pnpm config set unsafe-perm true && pnpm config set unsafe-perm true
ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION_LTS/lib/node_modules
ENV PATH=$NVM_DIR/versions/node/v$NODE_VERSION_LTS/bin:$PATH
# Set entrypoint to make nvm available in all runtime contexts
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD ["bash"]

View File

@@ -12,7 +12,7 @@ ENV NODE_VERSION_LTS="24.13.0" \
# System packages (single layer) # System packages (single layer)
# docker:latest already includes docker-cli and docker-compose plugin # docker:latest already includes docker-cli and docker-compose plugin
RUN apk add --no-cache \ RUN apk add --no-cache \
bash curl git openssl ca-certificates wget unzip \ bash curl git openssl ca-certificates wget unzip jq \
build-base python3 python3-dev py3-pip linux-headers \ build-base python3 python3-dev py3-pip linux-headers \
libgcc libstdc++ libc6-compat gnupg \ libgcc libstdc++ libc6-compat gnupg \
libffi-dev openssl-dev libc-dev \ libffi-dev openssl-dev libc-dev \

View File

@@ -1,5 +1,13 @@
# Changelog # Changelog
## 2026-03-18 - 5.9.0 - feat(docker)
add a reusable Alpine base image and refactor Alpine variants to extend it
- introduces a new Dockerfile_alpine base image with NVM-managed Node.js for Alpine
- simplifies alpine-node, alpine-bun, and alpine-deno images by inheriting from the shared alpine base image
- adds jq to Debian and database images for improved shell tooling
- updates the release script to use verbose output and bumps @git.zone/tsdocker to ^2.1.0
## 2026-02-10 - 5.8.0 - feat(docker) ## 2026-02-10 - 5.8.0 - feat(docker)
install Rust toolchain (rustup) and add aarch64 cross-compilation support to Docker images install Rust toolchain (rustup) and add aarch64 cross-compilation support to Docker images

View File

@@ -1,12 +1,12 @@
{ {
"name": "ht-docker-node", "name": "ht-docker-node",
"version": "5.8.0", "version": "5.9.0",
"description": "A Docker image that integrates Node.js with shipzone.io support.", "description": "A Docker image that integrates Node.js with shipzone.io support.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"test": "echo \"no npm test specified\"", "test": "echo \"no npm test specified\"",
"build": "tsdocker build", "build": "tsdocker build",
"release": "tsdocker push" "release": "tsdocker push --verbose"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -35,6 +35,6 @@
"typescript" "typescript"
], ],
"devDependencies": { "devDependencies": {
"@git.zone/tsdocker": "^1.17.4" "@git.zone/tsdocker": "^2.1.0"
} }
} }

492
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff