共享的,短暂的只读Docker卷

时间:2017-02-21 22:02:32

标签: docker

我正在为一个在Nginx + php-fpm中运行的简单网络应用程序开发基于Docker的设置。我见过的用于存储实际PHP代码的常见建议是将其存储在主机上,然后将其以只读方式挂载到Nginx和PHP容器中。

但是,我希望我的设置是自包含的,因此我可以使用Auto Scaling在Amazon ECS上轻松使用它。换句话说,我想以某种方式捆绑代码,而不是从主机中提取代码。

所以我想要的是一个可以在两个Docker容器之间共享的只读卷,并且在这些容器被销毁后不会持久存在。这可能吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

Docker镜像可以包含预先填充数据的卷。要实现此目的,请在Dockerfile中首先填充目录(例如使用COPYRUN),然后将其声明为卷。这允许您构建包含卷内应用程序代码的图像:

FROM php:7-fpm

COPY ./app /var/www/html
VOLUME /var/www/html

从此图像创建新容器将创建一个新卷,使用图像/var/www/html目录中的数据对其进行初始化,并将其安装在同一位置的新容器中。

比较the documentation以获取更多信息:

  

docker run命令使用基本映像中指定位置存在的任何数据初始化新创建的卷。例如,请考虑以下Dockerfile片段:

FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol
     

此Dockerfile导致导致docker run的图像在/myvol处创建新的挂载点,并将greeting文件复制到新创建的卷中。

这使您可以使用docker run

简单地启动应用程序图像
docker run -d --name app my_application_image

然后,您可以运行Nginx容器并将其配置为使用与--volumes-from标志相同的卷作为应用程序容器:

docker run -d --name web --link app:app --volumes-from app my_nginx_image

在此之后,您将拥有一个Docker卷,其中包含安装在/var/www/html的两个容器中的应用程序代码。