Dockerfile 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # syntax = docker/dockerfile:experimental
  2. ARG GO_VERSION=1.14.2
  3. FROM golang:${GO_VERSION} AS fs
  4. ARG TARGET_OS=unknown
  5. ARG TARGET_ARCH=unknown
  6. ARG PWD=$GOPATH/src/github.com/docker/api
  7. RUN apt-get update && apt-get install --no-install-recommends -y \
  8. make \
  9. git \
  10. protobuf-compiler \
  11. libprotobuf-dev
  12. RUN go get github.com/golang/protobuf/protoc-gen-go && \
  13. go get gotest.tools/gotestsum
  14. WORKDIR ${PWD}
  15. ADD go.* ${PWD}
  16. RUN go mod download
  17. ADD . ${PWD}
  18. FROM fs AS make-protos
  19. RUN make protos
  20. FROM make-protos AS make-bins
  21. RUN --mount=type=cache,target=/root/.cache/go-build \
  22. GOOS=${TARGET_OS} \
  23. GOARCH=${TARGET_ARCH} \
  24. make bins
  25. FROM make-protos as make-test
  26. RUN make test
  27. FROM make-protos AS make-xbins
  28. RUN --mount=type=cache,target=/root/.cache/go-build \
  29. make xbins
  30. FROM scratch AS protos
  31. COPY --from=make-protos /go/src/github.com/docker/api/backend/v1/*.pb.go ./backend/v1/
  32. COPY --from=make-protos /go/src/github.com/docker/api/compose/v1/*.pb.go ./compose/v1/
  33. COPY --from=make-protos /go/src/github.com/docker/api/cli/v1/*.pb.go ./cli/v1/
  34. FROM scratch AS bins
  35. COPY --from=make-bins /go/src/github.com/docker/api/bin/* .
  36. FROM scratch AS xbins
  37. COPY --from=make-xbins /go/src/github.com/docker/api/bin/* .