provisioner.Dockerfile 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # syntax=docker/dockerfile:1.1.7-experimental
  2. # Base Go environment
  3. # -------------------
  4. FROM golang:1.20-alpine as base
  5. WORKDIR /porter
  6. RUN apk update && apk add --no-cache gcc musl-dev git protoc
  7. COPY go.mod go.sum ./
  8. COPY /cmd ./cmd
  9. COPY /internal ./internal
  10. COPY /api ./api
  11. COPY /ee ./ee
  12. COPY /scripts ./scripts
  13. COPY /provisioner ./provisioner
  14. COPY /pkg ./pkg
  15. RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
  16. RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
  17. RUN --mount=type=cache,target=$GOPATH/pkg/mod \
  18. go mod download
  19. # Go build environment
  20. # --------------------
  21. FROM base AS build-go
  22. # build proto files
  23. RUN sh ./scripts/build/proto.sh
  24. RUN --mount=type=cache,target=/root/.cache/go-build \
  25. --mount=type=cache,target=$GOPATH/pkg/mod \
  26. go build -ldflags '-w -s' -a -tags ee -o ./bin/provisioner ./cmd/provisioner
  27. # Go test environment
  28. # -------------------
  29. FROM base AS porter-test
  30. RUN --mount=type=cache,target=/root/.cache/go-build \
  31. --mount=type=cache,target=$GOPATH/pkg/mod \
  32. go test ./...
  33. # Deployment environment
  34. # ----------------------
  35. FROM alpine
  36. RUN apk update
  37. COPY --from=build-go /porter/bin/provisioner /porter/
  38. EXPOSE 8080
  39. CMD /porter/provisioner