11

我对不应该使用数据容器的普遍共识感到困惑。我有我想要完成的特定用例。

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

所以我的计划是创建将保存文件的 docker 映像,并将在某些 /webapp 文件夹中指定一个命名卷。nginx 容器将为这个卷提供服务。我看不到任何其他方式如何以“docker containerized”方式将一堆文件移动到远程系统。我实际上不是在创建受诅咒的数据容器吗?

无论如何,在应用容器交换期间会发生什么?当我停止应用程序容器时,卷仍然可以访问,因为它被放置在主机上。当我拉动并启动新版本的应用程序容器时。该卷将再次创建并使用存储在同一位置的图像文件进行预归档,替换主机上的内容,因此 nginx 容器将从现在开始提供应用程序的新版本。对吗?当我从 nginx 容器中引用尚不存在的卷时会发生什么。

似乎命名值不会自动与图像的内容一起归档。我也不确定如何在 docker 文件中创建命名卷,因为从这里获取的语法不起作用

FROM training/webapp

VOLUME webapp:/webapp
4

1 回答 1

4

我想你可能想要我在这里描述的内容https://stackoverflow.com/a/41576040/3625317

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

在重新创建时,不会删除匿名卷,也就是说,假设您现在拥有 image:v1 并且拉取 image:v2 然后执行docker-compose up. 它将基于重新创建您的容器image:v2- 完成后,您将拥有一个新容器,但代码仍来自旧容器,该容器基于 image:v1,因为尚未替换 anon-volume,它是重新-分配。docker-compose down && docker-compose up将为您解决这个问题 - 但在处理您的想法时,您必须牢记这一点。(向下删除非卷)

一般来说,有一个赞成/反对,请参阅我的其他帖子。

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

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

于 2017-01-11T08:03:51.297 回答