Docker 多重继承 entry_point 执行

Docker multiple inheriting entry_point execution

我有以下 Dockerfile:

FROM gitlab-registry.foo.ru/project/my_project
FROM aerospike/aerospike-server

并且在第一个和第二个上面有一个ENTRYPOINT。 众所周知,只会执行一个ENTRYPOINT。它是否存在 运行 所有 parents ENTRYPOINT 的方法?

我可以使用 Docker-Compose 来完成这样的任务,对吗?

简单的答案是否定的

您的 Dockerfile 使用 Docker Multi-Stage builds 用于将依赖项从一个图像传输到另一个图像。最后一个 FROM 语句是生成图像的基础图像。

基础镜像的入口点只会被继承。如果您想要一个与来自最后一个 FROM 指令的基本映像中指定的不同的入口点,则需要明确设置入口点。

从上面的评论来看,对 docker 所做的事情存在根本性的误解。容器是一个孤立的进程。当您启动 docker 容器时,它会为您的应用程序启动一个进程,当该进程退出时,容器也会退出。一个好的最佳实践是每个容器一个应用程序。尽管有启动多个程序的方法,但我不推荐它们,因为它会使健康检查、升级、信号处理、日志记录和故障检测复杂化。

没有将多个图像合并在一起的简洁方法。在您列出的 Dockerfile 中,您定义了一个多阶段构建,可用于将文件从第一阶段复制到最后阶段。生成的图像将是最后一个 FROM 部分,而不是两个图像的合并。多阶段构建的典型用途是替换单独的编译映像或外部构建过程,并使用带有编译映像和 运行time 映像的单个命令在 运行time 内输出应用程序图片。这与您正在寻找的完全不同。

在 docker 中 运行 多个应用程序的首选方法是作为来自不同图像的多个容器,并使用 docker 网络将它们连接在一起。您需要从 docker-compose.yml 开始,它可以被 docker-compose 在独立的 docker 引擎上使用,或者与 docker stack deploy 一起使用以使用 swarm 模式的功能。