feat: init

This commit is contained in:
nyyu 2025-03-30 09:52:32 +02:00
commit 667709b526
5 changed files with 107 additions and 0 deletions

54
Dockerfile_base Normal file
View file

@ -0,0 +1,54 @@
# Stage 1: Build the base system
FROM busybox:1.37.0 AS builder
# Set working directory
WORKDIR /build
# Define build arguments
ARG BASE_FILES_VERSION=13.7
ARG LIBGCC_VERSION=14.2.0-19
ARG GLIBC_VERSION=2.41-6
ARG TZDATA_VERSION=2025b-1
# Download required Debian packages
RUN wget -q \
https://ftp.debian.org/debian/pool/main/b/base-files/base-files_${BASE_FILES_VERSION}_amd64.deb \
https://ftp.debian.org/debian/pool/main/g/gcc-14/libgcc-s1_${LIBGCC_VERSION}_amd64.deb \
https://ftp.debian.org/debian/pool/main/g/glibc/libc6_${GLIBC_VERSION}_amd64.deb \
https://ftp.debian.org/debian/pool/main/g/glibc/libc-bin_${GLIBC_VERSION}_amd64.deb \
https://ftp.debian.org/debian/pool/main/t/tzdata/tzdata_${TZDATA_VERSION}_all.deb
# Extract and clean up the downloaded packages
RUN mkdir -p var/lib/dpkg && \
for deb in *.deb; do \
echo "Processing $deb" && \
ar x $deb control.tar.xz data.tar.xz && \
tar xf data.tar.xz && tar xf control.tar.xz ./control && \
(cat control; echo) >> var/lib/dpkg/status && \
rm -f $deb control.tar.xz data.tar.xz control; \
done && \
# Create a non-root user directory
mkdir -p /home/nonroot && \
chown 65532:65532 /home/nonroot && \
# Copy nsswitch.conf for proper name resolution
cp usr/share/libc-bin/nsswitch.conf etc/nsswitch.conf && \
# Remove unnecessary files to reduce image size
rm -rf usr/bin usr/sbin usr/share/base-files usr/share/common-licenses usr/share/doc \
usr/share/libc-bin usr/share/lintian usr/share/man usr/lib/x86_64-linux-gnu/gconv && \
find usr/share/zoneinfo ! -name "Paris" ! -name "UTC" ! -name "New_York" -delete
# Stage 2: Temporary scratch image
FROM scratch AS tmp
# Copy root directory and extracted files from the builder stage
COPY rootdir/ /
COPY --from=builder /build/ /
# Stage 3: Final minimal image
FROM scratch
# Set environment variables
ENV LANG=C.utf8
# Copy everything from the temporary stage
COPY --from=tmp / /

36
Dockerfile_java Normal file
View file

@ -0,0 +1,36 @@
# Define build arguments
ARG JAVA_VERSION=21.0.6+7
FROM busybox:1.37.0 AS builder
# Set working directory
WORKDIR /build
# Define build arguments
ARG JAVA_VERSION
ARG JAVA_HOME=opt/java/openjdk
# Download and extract OpenJDK
RUN MAJOR=$(echo ${JAVA_VERSION} | cut -d'.' -f1) && \
VERSION_UNDERSCORE=$(echo ${JAVA_VERSION} | sed 's/+/_/') && \
wget -q https://github.com/adoptium/temurin${MAJOR}-binaries/releases/download/jdk-${JAVA_VERSION}/OpenJDK${MAJOR}U-jre_x64_linux_hotspot_${VERSION_UNDERSCORE}.tar.gz && \
mkdir -p $JAVA_HOME && \
tar xf OpenJDK${MAJOR}U-jre_x64_linux_hotspot_${VERSION_UNDERSCORE}.tar.gz -C $JAVA_HOME --strip-components 1 --no-same-owner && \
rm -rf $JAVA_HOME/legal OpenJDK${MAJOR}U-jre_x64_linux_hotspot_${VERSION_UNDERSCORE}.tar.gz
# Use a minimal base image
FROM base
# Define build arguments
ARG JAVA_VERSION
# Set environment variables
ENV JAVA_HOME=/opt/java/openjdk
ENV JAVA_VERSION=$JAVA_VERSION
ENV PATH=$JAVA_HOME/bin:$PATH
# Copy Java runtime from the builder stage
COPY --from=builder /build /
# Set the default command
ENTRYPOINT ["java"]

11
build.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
docker build -t base -f Dockerfile_base .
docker run --rm -it --entrypoint /lib64/ld-linux-x86-64.so.2 base --version
#docker build --build-arg JAVA_VERSION=17.0.14+7 -t java17 -f Dockerfile.java .
#docker run --rm -it java17 java --version
docker build -t java21 -f Dockerfile_java .
docker run --rm -it java21 --version

3
rootdir/etc/group Normal file
View file

@ -0,0 +1,3 @@
root:x:0:
nobody:x:65534:
nonroot:x:65532:

3
rootdir/etc/passwd Normal file
View file

@ -0,0 +1,3 @@
root:x:0:0:root:/root:/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin
nonroot:x:65532:65532:nonroot:/home/nonroot:/sbin/nologin