Docker:如何在精简的"distroless"映像中运行多个二进制文件?



我有一个Dockerfile,它目前正在使用amazonlinux作为基础映像。

镜像的目的是在容器中运行两个二进制文件。因此,Dockerfile的CMD指令目前看起来是这样的:

CMD [ "/bin/sh", "-c", "/binary1 & /binary2"]

我希望修改这个Dockerfile,将其迁移到";distroles";形象这需要修改Dockerfile FROM,使其构建在精简的基本映像(它本身将是基于Linux的(之上。

我的问题是,这个新的精简的基本图像将不再包含""之前的Linux映像中的shell附带的。它没有"&amp"或者,或者任何使我能够在Dockerfile中运行这两个二进制文件的操作符。

我想知道是否有办法在这样一个精简的映像中运行多个二进制文件?

例如,也许我可以安装包含"&"amp&";,或者我的Dockerfile中的一些类似命令来实现这一点;distroles";映像仍将基于Linux?如果是,我如何确定需要哪些特定文件,以及如何安装它们?

任何建议都将不胜感激,因为我是Docker的新手。

任何指针都将不胜感激,因为我是Docker的新手。

通常,不要尝试在这样的单个容器中运行多个二进制文件。在几乎所有情况下,运行两个独立的容器都更灵活,管理也更灵活:;distroles";在包含两个二进制文件的映像中,您将从同一映像启动两个容器(例如docker run myimage binary1docker run myimage binary2(。

当你做这样的事情时。。。

CMD [ "/bin/sh", "-c", "/binary1 & /binary2"]

您已经使binary1的失败对Docker不可见:如果命令失败,您的容器将愉快地继续运行,并且您不能使用重新启动策略来自动重新启动它。


或者,如果你真的想做你想做的事情,而不是使用";distroles";基本映像,考虑使用像busyboxalpine这样的最小映像:它们将为您提供一个shell和用于调试工作的通用unix实用程序,但仍然很小。

最新更新