我对一个不应该使用数据容器的共识达成了困惑。我有特定的用例,我想完成。
我想拥有docker nginx容器,并在其后面有一些带有应用程序的容器。要运行我的应用程序的最新版本,我想从我的私人docker注册表下载ready容器。该应用程序现在纯粹是静态的HTML,javascript的东西。
所以我的计划是创建将保存文件的docker镜像,并在some / webapp文件夹中指定一个命名卷。 nginx容器将为此卷提供服务。我没有看到任何其他方式如何将一堆文件移动到远程系统" docker containerinerized"办法。 我实际上没有创建被诅咒的数据容器吗?
无论如何在app容器交换期间会发生什么?当我停止app容器时,该卷仍然可以访问,因为它放在主机上。当我拉动并启动新版本的app容器时。该卷将再次创建并预先存储在同一位置的图像文件,替换主机上的内容,以便nginx容器将从现在的新版本的应用程序服务器。权利?当我从nginx容器引用尚不存在的卷时会发生什么。
似乎命名值不会自动与图像内容一起存档。我也不确定如何在docker文件中创建命名卷,因为从here获取的语法不起作用
FROM training/webapp
VOLUME webapp:/webapp
答案 0 :(得分:4)
我想你可能想要我在这里所描述的https://stackoverflow.com/a/41576040/3625317
卷的问题是,当重新创建容器时,不是docker-compose down
而是docker-compose pull + up
,新容器将不会将“新代码存储在卷中”,而是由于再循环量,仍旧旧的量。关键是,无论如何,您将需要一个匿名的代码卷,因为您希望它可以重新部署,而不是命名卷,因为您希望代码可以交换。
在重新创建时,不会删除anon-volume,也就是说,让我们说你现在有了图像:v1并且你拉了图像:v2然后做一个docker-compose up
。它将基于image:v2
重新创建容器 - 完成后,您将拥有一个新容器,但代码仍然来自旧容器,该容器基于image:v1,因为anon-volume尚未更换后,它被重新分配。 docker-compose down && docker-compose up
会为您解决这个问题 - 但在处理您的想法时,您必须牢记这一点。 (向下删除匿名卷)
一般情况下,有一个pro / con,请参阅我的其他帖子。
数据容器通常具有其他含义,并且已被所谓的命名卷替换。数据容器已被用于建立一个“命名”的卷装载,而不是基于一个非卷。
过去,您必须使用卷创建容器,然后使用此卷的基于容器名称的挂载(容器将是静态/名称部分),今天,您只需创建一个命名卷{ {1}}并通过此卷名挂载,无需基于busybox name
的基于容器名称的卷装入。