Updated Dockerfiles for ARM Support

This commit is contained in:
headlessdev 2025-04-29 21:17:21 +02:00
parent 176dfac0c1
commit c3536ce715
2 changed files with 48 additions and 24 deletions

View File

@ -1,47 +1,51 @@
# Builder Stage # Builder Stage
FROM node:20-alpine AS builder FROM --platform=$BUILDPLATFORM node:20-alpine AS builder
ARG TARGETARCH # Wird automatisch von Buildx gesetzt
WORKDIR /app WORKDIR /app
RUN case ${TARGETARCH} in \
"amd64") export PRISMA_CLI_BINARY_TARGETS="linux-musl-x64-openssl-3.0.x" ;; \
"arm64") export PRISMA_CLI_BINARY_TARGETS="linux-musl-arm64-openssl-3.0.x" ;; \
"arm") export PRISMA_CLI_BINARY_TARGETS="linux-musl-arm-openssl-3.0.x" ;; \
*) echo "Unsupported ARCH: ${TARGETARCH}" && exit 1 ;; \
esac
COPY package.json package-lock.json* ./ COPY package.json package-lock.json* ./
COPY ./prisma ./prisma COPY ./prisma ./prisma
# Install all dependencies (including devDependencies)
RUN npm install RUN npm install
# Generate Prisma client
RUN npx prisma generate RUN npx prisma generate
# Build the application
COPY . . COPY . .
RUN npm run build RUN npm run build
# Production Stage # Production Stage
FROM node:20-alpine AS production FROM --platform=$TARGETPLATFORM node:20-alpine AS production
WORKDIR /app WORKDIR /app
ENV NODE_ENV production ENV NODE_ENV production
ENV PRISMA_CLI_BINARY_TARGETS="linux-musl-arm64-openssl-3.0.x"
# Copy package files
COPY package.json package-lock.json* ./
# Copy node_modules from builder
COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/node_modules ./node_modules
# Remove dev dependencies
RUN npm prune --production
# Copy Prisma files
COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/prisma ./prisma
# Copy built application
COPY --from=builder /app/.next ./.next COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/next.config.js* ./ COPY --from=builder /app/next.config.js* ./
EXPOSE 3000 RUN npm prune --production
# Run migrations and start EXPOSE 3000
CMD ["sh", "-c", "npx prisma migrate deploy && npm start"] CMD ["sh", "-c", "npx prisma migrate deploy && npm start"]
# - - BUILD COMMAND - -
# docker buildx build \
# --platform linux/amd64,linux/arm64,linux/arm/v7 \
# -t haedlessdev/corecontrol:1.0.0 \
# -t haedlessdev/corecontrol:latest \
# --push \
# .

View File

@ -1,25 +1,45 @@
# --- Build Stage --- # --- Build Stage ---
FROM golang:1.19-alpine AS builder # Multi-Arch Builder mit expliziter Plattform-Angabe
FROM --platform=$BUILDPLATFORM golang:1.19-alpine AS builder
ARG TARGETOS TARGETARCH
WORKDIR /app WORKDIR /app
ENV GO111MODULE=on ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=$TARGETOS \
GOARCH=$TARGETARCH
COPY go.mod go.sum ./ COPY go.mod go.sum ./
RUN go mod download RUN go mod download
COPY . . COPY . .
RUN go build -o app ./cmd/agent # Cross-Compile für Zielarchitektur
RUN go build -ldflags="-w -s" -o app ./cmd/agent
# --- Run Stage --- # --- Run Stage ---
# Multi-Arch Laufzeit-Image
FROM alpine:latest FROM alpine:latest
RUN apk --no-cache add ca-certificates # Notwendig für TLS/SSL-Zertifikate
RUN apk --no-cache add ca-certificates gcompat
WORKDIR /root/ WORKDIR /root/
COPY --from=builder /app/app . COPY --from=builder /app/app .
# Security Hardening
USER nobody:nobody
ENV GOMAXPROCS=1
CMD ["./app"] CMD ["./app"]
# - - BUILD COMMAND - -
# docker buildx build \
# --platform linux/amd64,linux/arm64,linux/arm/v7 \
# -t haedlessdev/corecontrol-agent:1.0.0 \
# -t haedlessdev/corecontrol-agent:latest \
# --push \
# .