我有两个Dockerfile,一个用于开发环境,另一个用于生产环境:
生产环境:
FROM golang AS builder
WORKDIR /go/src/gitlab.com/company/project
COPY . .
RUN go build -o ./release/api .
FROM scratch
EXPOSE 9999
COPY --from=builder /go/src/gitlab.com/company/project/release/api .
CMD ["./api"]
和 DEV:
FROM golang
WORKDIR /go/src/gitlab.com/company/PROJECT
COPY . .
RUN go build -o ./release/api .
CMD ["./release/api"]
我希望将这两个合并为一个,因为维护两个Dockerfile是一种不好的做法。
主要区别在于开发时使用实用的
golang
镜像,而在生产中使用减小了二进制文件大小的scratch
镜像。似乎可以在一个Dockerfile中使用多个阶段,并在构建时指定阶段名称:
docker build . --target=builder
但是如果我这样做,我不知道如何在第一阶段有条件地运行我的应用程序=[如果我处于开发状态,则在第一阶段运行应用程序,否则在第二阶段运行应用程序]
我该怎么做?