Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Docker跟踪软件版本/安装?_Docker - Fatal编程技术网

使用Docker跟踪软件版本/安装?

使用Docker跟踪软件版本/安装?,docker,Docker,我有一个定期更新的数据处理应用程序。这个应用程序有一系列的依赖项,这些依赖项也会不时更新。但是,不同版本的软件(+依赖项)可能会产生不同的结果(这是预期的)。应用程序在远程计算机上运行,可以通过网页进行访问。每次用户使用网页进行处理时,她/他也会选择要使用的软件版本 现在我正试图决定哪种方法是跟踪不同软件(+依赖项)版本的最佳方法。当然,最简单的方法是将我的软件的每个版本及其依赖项编译并安装在不同的文件夹中,然后根据用户发送的请求选择适当的文件夹。然而,这听起来很笨拙。所以我想我可以用Docke

我有一个定期更新的数据处理应用程序。这个应用程序有一系列的依赖项,这些依赖项也会不时更新。但是,不同版本的软件(+依赖项)可能会产生不同的结果(这是预期的)。应用程序在远程计算机上运行,可以通过网页进行访问。每次用户使用网页进行处理时,她/他也会选择要使用的软件版本

现在我正试图决定哪种方法是跟踪不同软件(+依赖项)版本的最佳方法。当然,最简单的方法是将我的软件的每个版本及其依赖项编译并安装在不同的文件夹中,然后根据用户发送的请求选择适当的文件夹。然而,这听起来很笨拙。所以我想我可以用Docker来跟踪不同的软件版本。你认为这是个好主意吗?如果是,每次我有新版本的软件(和/或依赖项)时,最合适的做法是:1)用新版本从头创建一个新容器(最终有多个容器),或2)更新现有容器并提交更改?(我想我可以访问容器的旧提交,对吗?)


PS:请记住,我之所以研究Docker而不是简单的虚拟机解决方案,是因为我运行的应用程序是基于GPU的高性能软件。

Docker是一个合理的选择。您的存储库将包含您希望发布的所有应用程序版本。请注意,只有将生成的应用程序文件系统组织到不同的层中,才能实现节约,其中较低的层最不可能在不同版本之间更改。这将使存储需求保持在最低水平

然后你必须决定如何处理每项工作。一个健壮(但复杂)的解决方案是拥有一个或多个API容器,这些容器接收来自用户的处理作业,并将它们“分发”给工作者容器(每个发布版本中有一个或多个)。这将提供最低的响应延迟,并且是非阻塞的。您可以查看不同的服务发现模型,以了解“worker”容器如何向“manager”容器注册。这可能比你想删掉的要多,但是考虑使用一个很好的键值数据库(另一个容器),比如ETCD或者第三方服务发现工具,比如ZooKeal/Eurka/Cuffl。 一个简单得多的模型将有一个API容器,每个容器都有一个已创建但未启动的发布容器。API容器将启动、引导并停止相应的发布容器。您可能会导致启动延迟,但这是最少的资源密集型。。。而且最容易管理。但这是一个阻塞操作


中间的某个地方,但不太友好的是让每个发布容器运行,但是在不同的主机端口上侦听(应用程序总是看到同一个端口)。用户将连接到为所需版本的应用程序提供服务的端口。您必须提供某种索引才能使其有用。

不要更新容器。创建新图像,启动新容器。容器应该是一次性的,如果其中有任何状态,则将该状态外部化(到数据库或卷装载)。