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

如何构建一个最小的“distroless”图像来运行运行 java 子服务的 golang 服务?

如何构建一个最小的“distroless”图像来运行运行 java 子服务的 golang 服务?

Go
喵喔喔 2023-02-06 10:37:24
现在我有一个用 golang 编写的程序,我试图在一个最小的容器中运行。这个go程序启动的时候正好启动了另外一个java写的子程序,这个子程序也需要运行在容器中。我想知道如何构建我的 Dockerfile 以将其作为“distroless”图像来实现。现在我正在探索这样的解决方案:FROM <golang-distro> as go-builderFROM <java-distro> as java-builderFROM <minimal-base-image># copy over all files needed to set up golang runtime to run go-parent-serviceCOPY --from=go-builder /<golang-binaries> /# copy over all files needed to set up java runtime so go-parent-service can run its java sub processCOPY --from-java-builder /<jvm-binaries> /# executable for the golang serviceCOPY /go-parent-service /# run the golang service, which will also start up the java service as sub processCMD ["/go-parent-service"]这种方法是否有意义,或者是否有更好的方法来构建此图像?我知道启动 java 服务的 go 服务使事情变得有点棘手,并且可能不是最佳实践。然而,由于我不拥有这个可执行文件,我无法分离出这些服务并在不同的容器中运行它们。
查看完整描述

1 回答

?
RISEBY

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

由于涉及 java,因此您的最小基础映像必须具有(至少)JRE 才能运行 java 类。


Go 程序不需要在目标映像上安装/复制 golang,因为它可以在目标映像的 go-distro 上构建为可执行文件。


如果go 源和 java 源可用于编译


FROM golang:<flavor> as go-builder 

# Build go program here, i.e. produce a binary


FROM jdk-image:<flavor> as java-builder

# Compile sources to java classes or jar here


FROM <jre image>:<flavor>

COPY --from go-builder <go executable> .

COPY --from java-builder <java jar and related deps> .


CMD/ENTRYPOINT ["<run go bainary>"]


风味:高山、纤细等。


ELSE二进制文件可用,即具有所需依赖项的 go binary 和 java jar;然后可以简单地将它们复制到最终的 Java-JRE 映像并运行。前提是二进制文件是在考虑目标操作系统的情况下创建的。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号