2017-01-11 31 views
10

我对于不应该使用数据容器的常见共识感到困惑。我有特定的用例,我想完成。在Docker数据容器中部署Web应用程序vs卷

我想有docker nginx容器,并在它后面有一些其他容器与应用程序。要运行我的应用程序的最新版本,我想从我的私人码头注册表下载现成的容器。该应用程序现在是纯静态html,JavaScript的东西。

所以我的计划是创建docker镜像,它将容纳这些文件,并在某些/ webapp文件夹中指定一个命名卷。 nginx容器将为此卷提供服务。我没有看到任何其他方式如何将一堆文件移动到远程系统的“码头集装箱”方式。 我是不是真的在创建被诅咒的数据容器?

无论如何,应用程序容器交换期间会发生什么?当我停止应用程序容器时,卷将保持可访问状态,因为它放置在主机上。当我拉和开始新版本的应用程序容器。该卷将再次创建并预先存储在同一位置的图像文件,替换主机上的内容,以便nginx容器将从现在的新版本的应用程序服务器。当我将引用nginx容器中尚不存在的卷时会发生什么。

似乎命名值不会自动与图像的内容一起提交。还有我不知道如何创建搬运工文件名为体积这句法从here采取不起作用

FROM training/webapp 

VOLUME webapp:/webapp 
+0

而不是用一个命名的容器,你应该简单地创建一个基于NGINX图像的新图像。在这种情况下,这是一个容量较小的容器。 – KarateKid

+0

但在我的情况下,我需要一个nginx作为网关,后面会有多个应用程序,可能还有一些其他技术不是静态页面。我认为运行多个nginx实例将会是不必要的性能开销。 – Zveratko

回答

4

我想你可能想我在这里https://stackoverflow.com/a/41576040/3625317

问题描述容量是,当容器被重新创建时,不是docker-compose down而是docker-compose pull + up,新容器不会将“新代码存储在卷中”,而是由于回收量,仍旧是旧的anon卷。问题是,无论如何你都需要一个匿名卷,因为你希望它可以重新部署,而不是一个命名的卷,因为你希望代码是可交换的。

重新创建anon-volume不会被删除,也就是说,让我们说你有图像:v1现在,你拉图像:v2然后做一个docker-compose up。它会根据image:v2重新创建您的容器 - 完成后,您将拥有一个新的容器,但代码仍然来自基于image:v1的旧容器,因为anon-volume没有被替换,它是重新分配。 docker-compose down && docker-compose up会为您解决 - 但您在处理您的想法时必须牢记这一点。 (向下删除anon-volumes)

一般来说,有一个pro/con,请参阅我的其他帖子。

数据容器通常具有其他含义,并被所谓的命名卷所取代。数据容器已被用于建立“命名”而不是基于匿名卷的卷装。

过去,您必须创建一个带有卷的容器,然后使用基于容器名称的此卷容器(容器将是静态/名称部分),今天,您只需创建一个命名卷name并按此卷名安装,不需要基于容器名称的busybox killed after start卷装入。

+0

这个概念是使用命名卷来克服每个“部署”上新的匿名卷的问题。你知道在docker文件中命名卷的创建有什么问题吗?如果它能工作,我可以有一些代码,以自动填充应用程序的文件开始。也许可能的方法是创建命名卷manualy将其仅用作nginx容器的只读,并将其内容替换为每个webapp容器启动。 – Zveratko

+0

命名卷不会以任何方式将存储您的应用代码的套件包含在内,因为这将成为“不可部署”,并且对于所有应用都应该是错误的。所谓的卷是应用程序容器应用程序代码文件夹的nogo。也就是说,你在后者中所说的会起作用,但实际上仍然是泊坞窗的各个方面,并且永远不会完成(但可以完成)。 –

+0

那么有什么其他方式可以共享我的应用程序容器的内容吗?当人们不想使用应用程序二进制文件捆绑应用程序服务器时,通常会如何处理?二进制文件是否在Docker容器之外手动管理?(即将它们复制到某个卷或直接复制到某个容器等) – Zveratko