Files
MyClub/Dockerfile.eshop.backend
T
Tomas Dvorak 4ca3f4ff53 fix
2026-03-13 15:03:11 +01:00

59 lines
1.6 KiB
Docker

# MyClub E-shop backend Dockerfile
# Separate lightweight Go build, sharing the same module and internal packages as the main backend.
# Build stage
ARG GO_IMAGE_TAG=1.25.8-bookworm
FROM golang:${GO_IMAGE_TAG} AS builder
WORKDIR /app
ENV GOPROXY=https://proxy.golang.org,direct
ENV GOSUMDB=sum.golang.org
# Copy Go module files and download dependencies
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
go mod download && go mod verify
# Copy the full source tree
COPY . .
# Build the dedicated eshop backend binary
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-w -s" -trimpath -o eshop-backend ./eshop/backend
# Runtime stage
FROM debian:bullseye-slim
WORKDIR /app
# Install runtime dependencies
RUN --mount=type=cache,target=/var/lib/apt/lists \
--mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
tzdata \
wget \
&& rm -rf /var/lib/apt/lists/*
# Create non-root user and required directories
RUN addgroup --system app && adduser --system --ingroup app app \
&& mkdir -p /app/uploads /app/cache \
&& chown -R app:app /app
# Copy compiled binary
COPY --from=builder /app/eshop-backend ./eshop-backend
ENV GIN_MODE=release
USER app
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
CMD wget -q -O - http://127.0.0.1:8080/api/v1/eshop/health >/dev/null 2>&1 || exit 1
CMD ["./eshop-backend"]