适当使用卷 – 将文件推入容器?

我正在阅读Project Atomic对图像的指导 ,指出使用卷的两个主要用例是:

  • 共享容器之间的数据
  • 将大文件写入磁盘时

在我的示例中,我没有使用Nginx镜像的这些用例。 我打算在容器中的Nginx文档根path的卷上安装一个主机目录。 这样,我可以将更改网站的内容推送到主机,而不是寻址容器。 我觉得使用这种方法比较容易,因为我可以 – 例如 – 只需向主机添加一次ssh密钥即可。

我的问题是,这是一个适当的使用数据量,如果没有任何人可以提出一个替代方法来更新容器内的数据?

有很多方法来实现容器中的数据更新。 主机卷是一种有效的方法,可能是实现数据可用的最简单方法。

您也可以将文件复制到主机的容器中和从容器中复制出来 。 如果您正在停止并删除正在运行的Web主机容器,则可能需要事后提交。

docker cp /src/www webserver:/www 

您可以将文件复制到您的Dockerfile镜像构build中,该镜像与上述相同(复制和提交)。 然后从新映像重新启动Web服务器容器。

 COPY /src/www /www 

但我认为主机的音量是一个不错的select。

 docker run -v /src/www:/www webserver command 

Docker数据容器也是已安装卷的选项,但是它们并不能解决将数据复制到数据容器中的直接问题。

如果你发现自己在想“我需要进入这个容器”,那么你可能做错了。

使用Docker的主要原因之一是将您的应用程序与服务器隔离。 这意味着你可以在任何地方运行你的容器,并得到相同的结果。 这是我的主要用例。

如果从这个angular度来看,如果让容器依赖主机上的文件来部署环境,则会适得其反 – 在不同的机器上运行相同的容器可能会导致不同的输出。

如果你不关心这个,只是用docker来简化nginx的安装,那么你可以使用主机系统中的一个卷。

想想这个虽然…

 #Dockerfile FROM nginx ADD . /myfiles #docker-compose.yml web: build: . 

然后,您可以使用docker-machine连接到远程服务器,并使用简单的命令部署新版本的软件

 docker-compose build docker-compose up -d 

甚至更好,你可以做

 docker build -t me/myapp . docker push me/myapp 

然后部署

 docker pull docker run 

不知道我是否完全理解你的请求。 但为什么你需要这样做的文件推送到Nginx容器。

在单独的docker集装箱中pipe理卷,这是我的build议,由Docker.io推荐

数据量

 A data volume is a specially-designated directory within one or more containers that bypasses the Union File System. Data volumes provide several useful features for persistent or shared data: Volumes are initialized when a container is created. If the container's base image contains data at the specified mount point, that existing data is copied into the new volume upon volume initialization. Data volumes can be shared and reused among containers. Changes to a data volume are made directly. Changes to a data volume will not be included when you update an image. Data volumes persist even if the container itself is deleted. 

请参阅: pipe理容器中的数据

如上所述,使用docker的主要原因之一是总是达到相同的结果。 最佳做法是使用数据专用容器 。

通过docker inspect <container_name>您可以知道主机上卷的path并手动更新数据,但不build议这样做;

或者你可以从外部来源检索数据,比如git仓库