我有以下内容Dockerfile
:
FROM gitlab-registry.foo.ru/project/my_project
FROM aerospike/aerospike-server
在第一个和第二个上面有一个ENTRYPOINT
. 众所周知,只有一个ENTRYPOINT
会被处决。是否存在运行所有父母的方式ENTRYPOINT
?
是否正确,我可以使用这样Docker-Compose
的任务?
我有以下内容Dockerfile
:
FROM gitlab-registry.foo.ru/project/my_project
FROM aerospike/aerospike-server
在第一个和第二个上面有一个ENTRYPOINT
. 众所周知,只有一个ENTRYPOINT
会被处决。是否存在运行所有父母的方式ENTRYPOINT
?
是否正确,我可以使用这样Docker-Compose
的任务?
从上面的评论来看,对 docker 所做的事情存在根本性的误解。容器是一个独立的进程。当您启动 docker 容器时,它会为您的应用程序启动一个进程,并且当该进程退出时,容器也会退出。一个好的最佳实践是每个容器一个应用程序。尽管有多种方法可以启动多个程序,但我不会推荐它们,因为它会使运行状况检查、升级、信号处理、日志记录和故障检测变得复杂。
没有将多个图像合并在一起的干净方法。在您列出的 Dockerfile 中,您定义了一个多阶段构建,可用于将文件从第一阶段复制到最后阶段。生成的图像将是最后FROM
一部分,而不是两个图像的合并。多阶段构建的典型用途是替换单独的编译映像或外部构建过程,并使用带有编译映像和运行时映像的单个命令,在运行时映像中输出应用程序。这与您正在寻找的内容非常不同。
在 docker 中运行多个应用程序的首选方法是作为来自不同映像的多个容器,并使用 docker 网络将它们连接在一起。你需要从一个docker-compose.yml开始,它既可以docker-compose
在独立的 docker 引擎上使用,也可以docker stack deploy
使用 swarm 模式的功能。
简单的答案是否定的。
您的 Dockerfile 使用Docker 多阶段构建,用于将依赖关系从一个映像传输到另一个映像。最后一条FROM
语句是生成图像的基础图像。
基础镜像的入口点只会被继承。如果您想要与来自最后一条FROM
指令的基本映像中指定的不同的入口点,则需要明确设置入口点。