diff --git a/tarkov/v4.0.11/Dockerfile b/tarkov/v4.0.11/Dockerfile index 4981e4a..a44f56d 100644 --- a/tarkov/v4.0.11/Dockerfile +++ b/tarkov/v4.0.11/Dockerfile @@ -1,15 +1,16 @@ -FROM --platform=$TARGETOS/$TARGETARCH ghcr.io/2sharkystudios/base:ubuntu +# ========================================== +# STAGE 1: BUILDER +# ========================================== +FROM --platform=$TARGETOS/$TARGETARCH ghcr.io/2sharkystudios/base:ubuntu AS builder LABEL author="Kyle Speight" maintainer="chillcog3142@proton.me" ENV DEBIAN_FRONTEND=noninteractive -# 1. Install base dependencies (Running as root by default) RUN apt-get update \ - && apt-get install -y ca-certificates gnupg lsb-release wget curl \ + && apt-get install -y ca-certificates gnupg lsb-release wget curl git git-lfs iproute2 libgdiplus tini software-properties-common \ && rm -rf /var/lib/apt/lists/* -# 2. Install .NET SDK (Running as root) RUN wget -q https://dot.net/v1/dotnet-install.sh \ && chmod +x dotnet-install.sh \ && D_V="$(curl -sSL https://dotnet.microsoft.com/en-us/download/dotnet/9.0 | grep -i '

SDK 9.*.*

' | head -1 | awk -F\" '{print $3}' | awk '{print $2;}' | sed 's/<\/h3>//g')" \ @@ -17,7 +18,6 @@ RUN wget -q https://dot.net/v1/dotnet-install.sh \ && ln -s /usr/share/dotnet /usr/bin/dotnet \ && rm dotnet-install.sh -# 3. Install PowerShell (Running as root) RUN mkdir -p /etc/apt/keyrings \ && curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /etc/apt/keyrings/microsoft-prod.gpg \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/repos/microsoft-ubuntu-jammy-prod jammy main" > /etc/apt/sources.list.d/microsoft-prod.list \ @@ -25,30 +25,56 @@ RUN mkdir -p /etc/apt/keyrings \ && apt-get install -y powershell \ && rm -rf /var/lib/apt/lists/* -# 4. Install remaining dependencies (Running as root) -RUN apt-get update \ - && apt-get install -y git git-lfs iproute2 libgdiplus tini software-properties-common \ - && rm -rf /var/lib/apt/lists/* +WORKDIR /home/container/git +RUN git clone https://github.com/2SharkyStudios/SPT-Server-Build.git . \ + && git lfs pull -# 5. Build the application (Running as root) -RUN mkdir -p /home/container/git/ /home/container/build/ \ - && cd /home/container/ \ - && git clone https://github.com/2SharkyStudios/SPT-Server-Build.git /home/container/git \ - && cd /home/container/git/ \ - && git lfs pull \ - && cd /home/container/git/SPTarkov.Server/ \ - && dotnet restore \ +WORKDIR /home/container/git/SPTarkov.Server/ +RUN dotnet restore \ && dotnet build -o /home/container/build/ -c Release -p:SptBuildType=RELEASE -p:SptVersion=4.0.11 -# 6. Switch to non-root user NOW (After all installations are done) +# ========================================== +# STAGE 2: RUNTIME +# ========================================== +FROM --platform=$TARGETOS/$TARGETARCH ghcr.io/2sharkystudios/base:ubuntu AS runtime + +LABEL author="Kyle Speight" maintainer="chillcog3142@proton.me" + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update \ + && apt-get install -y ca-certificates gnupg lsb-release wget curl \ + && rm -rf /var/lib/apt/lists/* + +RUN wget -q https://dot.net/v1/dotnet-install.sh \ + && chmod +x dotnet-install.sh \ + && D_V="$(curl -sSL https://dotnet.microsoft.com/en-us/download/dotnet/9.0 | grep -i '

SDK 9.*.*

' | head -1 | awk -F\" '{print $3}' | awk '{print $2;}' | sed 's/<\/h3>//g')" \ + && ./dotnet-install.sh -i /usr/share -v "$D_V" \ + && ln -s /usr/share/dotnet /usr/bin/dotnet \ + && rm dotnet-install.sh + +RUN mkdir -p /etc/apt/keyrings \ + && curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /etc/apt/keyrings/microsoft-prod.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/repos/microsoft-ubuntu-jammy-prod jammy main" > /etc/apt/sources.list.d/microsoft-prod.list \ + && apt-get update \ + && apt-get install -y powershell \ + && rm -rf /var/lib/apt/lists/* + +RUN apt-get update \ + && apt-get install -y iproute2 libgdiplus tini \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /home/container/ +COPY --from=builder /home/container/build/ /home/container/build/ +COPY --from=builder /home/container/git/SPTarkov.Server/ /home/container/git/SPTarkov.Server/ + USER container ENV USER=container HOME=/home/container -WORKDIR /home/container/ - -STOPSIGNAL SIGINT COPY --chown=container:container ./../entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh +STOPSIGNAL SIGINT + ENTRYPOINT ["/usr/bin/tini", "-g", "--"] CMD ["/entrypoint.sh"] \ No newline at end of file