在Docker数据容器vs卷中部署Web应用程序

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

我想有docker的nginx容器,并在它后面有一些其他容器与应用程序。 要运行我的应用程序的最新版本,我想从我的私人dockerregistry下载准备好的容器。 应用程序现在是纯静态的HTML,JavaScript的东西。

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

无论如何,在应用容器交换过程中会发生什么 当停止应用程序容器时,卷将保持可访问状态,因为它放置在主机上。 当我拉和启动新版本的应用程序容器。 卷将被重新创build并预先存储在相同位置的图像文件,replace主机上的内容,以便nginx容器将从现在的新版本的应用程序服务器。 当我将引用nginx容器中尚不存在的卷时会发生什么。

似乎命名值不会自动与图像的内容一起提交。 以及我不知道如何在Docker文件中创build命名卷,因为从这里采取的语法不起作用

FROM training/webapp VOLUME webapp:/webapp 

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

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

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

一般来说,有一个亲/看,我的另一个post。

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

在过去,你必须创build一个容器的卷,然后使用基于容器名的这个卷的安装(该容器将是静态/名称部分),今天,你只需创build一个命名的卷name和挂载这个卷名称,不需要繁忙的箱子基于容器名killed after start基于卷装载killed after start