1

我有以下内容Dockerfile

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

在第一个和第二个上面有一个ENTRYPOINT. 众所周知,只有一个ENTRYPOINT会被处决。是否存在运行所有父母的方式ENTRYPOINT

是否正确,我可以使用这样Docker-Compose的任务?

4

2 回答 2

2

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

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

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

于 2018-02-01T15:06:00.640 回答
1

简单的答案是否定的。

您的 Dockerfile 使用Docker 多阶段构建,用于将依赖关系从一个映像传输到另一个映像。最后一条FROM语句是生成图像的基础图像。

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

于 2018-01-31T10:31:20.407 回答