baseimage-alpine/Dockerfile
Timo Reichl 0f1c6a2f93 Dockerfile: Reuse build arguments
Signed-off-by: Timo Reichl <thetredev@gmail.com>
2025-03-30 19:52:28 +02:00

183 lines
5 KiB
Docker

# syntax=docker/dockerfile:1
## Build arguments provided via cli arguments
ARG VERSION
ARG BUILD_DATE
## Runtime stage defaults
# Labels
ARG RUNTIME_LABEL_BUILD_VERSION="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
ARG RUNTIME_LABEL_MAINTAINER="TheLamer"
# User: root
ARG RUNTIME_ROOT_HOME="/root"
ARG RUNTIME_ROOT_TERM="xterm"
# User: abc
ARG RUNTIME_ABC_HOME=/config
ARG RUNTIME_ABC_SHELL=/bin/false
ARG RUNTIME_ABC_GROUP=users
ARG RUNTIME_ABC_GID=1000
ARG RUNTIME_ABC_UID=911
# Shell prompt
ARG RUNTIME_PS1="$(whoami)@$(hostname):$(pwd)\\$ "
# s6 overlay
ARG RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0"
ARG RUNTIME_S6_VERBOSITY=1
ARG RUNTIME_S6_STAGE2_HOOK=/docker-mods
# Virtual environment location of lsiopy
ARG RUNTIME_VIRTUAL_ENV=/lsiopy
# mod-scripts URL
ARG RUNTIME_MOD_SCRIPTS_URL_PREFIX=https://raw.githubusercontent.com/linuxserver/docker-mods/refs/heads/mod-scripts
## Build argument defaults
# Globals
ARG ROOTFS=/root-out
ARG REL=v3.21
ARG ARCH=x86_64
ARG MIRROR=http://dl-cdn.alpinelinux.org/alpine
ARG PACKAGES=alpine-baselayout,\
alpine-keys,\
apk-tools,\
busybox,\
libc-utils
# s6 overlay
ARG S6_OVERLAY_RELEASES_URL_PREFIX=https://github.com/just-containers/s6-overlay/releases/download
ARG S6_OVERLAY_VERSION="3.2.0.2"
ARG S6_OVERLAY_ARCH=${ARCH}
# Package versions
ARG MODS_VERSION="v3"
ARG PKG_INST_VERSION="v1"
ARG LSIOWN_VERSION="v1"
ARG WITHCONTENV_VERSION="v1"
# RootFS stage
FROM alpine:3.20 AS rootfs-stage
# import global arguments
ARG ROOTFS
ARG REL
ARG ARCH
ARG MIRROR
ARG PACKAGES
# import s6 overlay arguments
ARG S6_OVERLAY_RELEASES_URL_PREFIX
ARG S6_OVERLAY_VERSION
ARG S6_OVERLAY_ARCH
# install packages
RUN \
apk add --no-cache \
bash \
xz
# build rootfs
RUN \
mkdir -p "${ROOTFS}/etc/apk" && \
{ \
echo "${MIRROR}/${REL}/main"; \
echo "${MIRROR}/${REL}/community"; \
} > "${ROOTFS}/etc/apk/repositories" && \
apk --root "${ROOTFS}" --no-cache --keys-dir /etc/apk/keys add --arch $ARCH --initdb ${PACKAGES//,/ } && \
sed -i -e 's/^root::/root:!:/' ${ROOTFS}/etc/shadow
# add s6 overlay
ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp
RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-noarch.tar.xz
ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz /tmp
RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz
# add s6 optional symlinks
ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz /tmp
RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz && unlink ${ROOTFS}/usr/bin/with-contenv
ADD ${S6_OVERLAY_RELEASES_URL_PREFIX}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz /tmp
RUN tar -C ${ROOTFS} -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz
# Runtime stage
FROM scratch
# import Runtime stage label arguments
ARG RUNTIME_LABEL_BUILD_VERSION
ARG RUNTIME_LABEL_MAINTAINER
# import global arguments
ARG ROOTFS
# import Package version arguments
ARG MODS_VERSION
ARG PKG_INST_VERSION
ARG LSIOWN_VERSION
ARG WITHCONTENV_VERSION
# import runtime stage arguments
ARG RUNTIME_ROOT_HOME
ARG RUNTIME_ROOT_TERM
ARG RUNTIME_ABC_HOME
ARG RUNTIME_ABC_SHELL
ARG RUNTIME_ABC_GROUP
ARG RUNTIME_ABC_GID
ARG RUNTIME_ABC_UID
ARG RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME
ARG RUNTIME_S6_VERBOSITY
ARG RUNTIME_S6_STAGE2_HOOK
ARG RUNTIME_PS1
ARG RUNTIME_VIRTUAL_ENV
ARG RUNTIME_MOD_SCRIPTS_URL_PREFIX
LABEL build_version="${RUNTIME_LABEL_BUILD_VERSION}"
LABEL maintainer="${RUNTIME_LABEL_MAINTAINER}"
COPY --from=rootfs-stage ${ROOTFS} /
ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/docker-mods.${MODS_VERSION}" "${RUNTIME_S6_STAGE2_HOOK}"
ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/package-install.${PKG_INST_VERSION}" "/etc/s6-overlay/s6-rc.d/init-mods-package-install/run"
ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/lsiown.${LSIOWN_VERSION}" "/usr/bin/lsiown"
ADD --chmod=755 "${RUNTIME_MOD_SCRIPTS_URL_PREFIX}/with-contenv.${WITHCONTENV_VERSION}" "/usr/bin/with-contenv"
# environment variables
ENV PS1=${RUNTIME_PS1} \
HOME=${RUNTIME_ROOT_HOME} \
TERM=${RUNTIME_ROOT_TERM} \
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=${RUNTIME_S6_CMD_WAIT_FOR_SERVICES_MAXTIME} \
S6_VERBOSITY=${RUNTIME_S6_VERBOSITY} \
S6_STAGE2_HOOK=${RUNTIME_S6_STAGE2_HOOK} \
VIRTUAL_ENV=${RUNTIME_VIRTUAL_ENV} \
PATH="${RUNTIME_VIRTUAL_ENV}/bin:${PATH}"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache \
alpine-release \
bash \
ca-certificates \
catatonit \
coreutils \
curl \
findutils \
jq \
netcat-openbsd \
procps-ng \
shadow \
tzdata && \
echo "**** create abc user and make our folders ****" && \
groupmod -g ${RUNTIME_ABC_GID} ${RUNTIME_ABC_GROUP} && \
useradd -u ${RUNTIME_ABC_UID} -U -d ${RUNTIME_ABC_HOME} -s ${RUNTIME_ABC_SHELL} abc && \
usermod -G ${RUNTIME_ABC_GROUP} abc && \
mkdir -p \
/app \
${RUNTIME_ABC_HOME} \
/defaults \
${RUNTIME_VIRTUAL_ENV} && \
echo "**** cleanup ****" && \
rm -rf \
/tmp/*
# add local files
COPY root/ /
ENTRYPOINT ["/init"]