feat(docker): add a reusable Alpine base image and refactor Alpine variants to extend it
This commit is contained in:
@@ -1,59 +1,9 @@
|
||||
FROM alpine:edge
|
||||
FROM host.today/ht-docker-node:alpine
|
||||
LABEL author="Task Venture Capital GmbH <hello@task.vc>"
|
||||
|
||||
WORKDIR /workspace
|
||||
ENV DENO_INSTALL="/root/.deno"
|
||||
|
||||
# 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 Deno (standard glibc binary works via gcompat in base image)
|
||||
RUN curl -fsSL https://deno.land/install.sh | sh
|
||||
|
||||
# Install required packages for NVM and Node.js
|
||||
# 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"]
|
||||
ENV PATH="$DENO_INSTALL/bin:$PATH"
|
||||
|
||||
Reference in New Issue
Block a user