# syntax=docker/dockerfile:1 # Сборка из корня репозитория: # docker build -f services/api/Dockerfile --target api --build-arg VERSION=1.2.3 . # docker build -f services/api/Dockerfile --target storage-agent --build-arg VERSION=1.2.3 . FROM golang:1.24-alpine AS build WORKDIR /src COPY services/api/go.mod services/api/go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod go mod download COPY services/api/ ./ ARG VERSION=0.0.0-dev ENV CGO_ENABLED=0 RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build \ go build -trimpath -ldflags "-s -w -X pipu/api/internal/buildinfo.Version=${VERSION}" -o /out/api ./cmd/api && \ go build -trimpath -ldflags "-s -w -X pipu/api/internal/buildinfo.Version=${VERSION}" -o /out/storage-agent ./cmd/storage-agent FROM gcr.io/distroless/static-debian12:nonroot AS api COPY --from=build /out/api /usr/local/bin/api EXPOSE 8080 ENTRYPOINT ["/usr/local/bin/api"] # Агенту нужны nfs-utils для mount -t nfs и root внутри контейнера (CAP_SYS_ADMIN задаётся в compose). FROM alpine:3.22 AS storage-agent RUN apk add --no-cache nfs-utils ca-certificates COPY --from=build /out/storage-agent /usr/local/bin/storage-agent EXPOSE 8090 ENTRYPOINT ["/usr/local/bin/storage-agent"]