为了账号安全,请及时绑定邮箱和手机立即绑定

如何为开发和生产使用相同的 dockerfile

如何为开发和生产使用相同的 dockerfile

Go
慕无忌1623718 2023-06-19 14:07:26
我有 2 个 Dockerfile,1 个用于开发,1 个用于生产:产品:FROM golang AS builderWORKDIR /go/src/gitlab.com/company/projectCOPY . .RUN go build -o ./release/api .FROM scratchEXPOSE 9999COPY --from=builder /go/src/gitlab.com/company/project/release/api .CMD ["./api"]和开发:FROM golangWORKDIR /go/src/gitlab.com/company/PROJECTCOPY . .RUN go build -o ./release/api .CMD ["./release/api"]我想将这两个合并为一个,因为维护 2 个 Dockerfile 是一种不好的做法主要区别在于,在 dev 中,我使用golang实用的图像,而在 prod 中,我使用scratch图像,这大大减少了我的二进制文件的大小。似乎我可以在 Dockerfile 中使用多个阶段,并在构建时指定阶段名称:docker build . --target=builder但是如果我这样做,我不知道如何在第一阶段有条件地运行我的应用程序 = [如果我在开发中,则在第一阶段运行该应用程序,否则,在第二阶段运行该应用程序]我应该怎么做?
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

像这样的事情怎么样?我没有测试它,也没有深入思考你的例子,但也许是接近你需要/帮助你找到最终解决方案的地方?


FROM golang:alpine AS base

WORKDIR /go/src/gitlab.com/company/project

COPY . .

RUN go build -o ./release/api .


FROM base AS dev

CMD ["./release/api"]


FROM scratch AS prod

EXPOSE 9999

COPY --from=base /go/src/gitlab.com/company/project/release/api .

CMD ["./api"]

根据 targetdocker build --target=prod或中指定的值docker build --target=dev,将构建不同的图像。


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信