共享,临时只读Docker卷

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

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

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

Docker映像可以包含预先填充数据的卷。 为此,在Dockerfile ,首先填充目录(例如使用COPYRUN ),然后将其声明为卷。 这使您可以在卷内构build包含应用程序代码的映像:

 FROM php:7-fpm COPY ./app /var/www/html VOLUME /var/www/html 

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

比较文档以获取更多信息:

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

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

这个Dockerfile会生成一个导致docker docker run的图像,在/myvol上创build一个新的挂载点,并将greeting文件复制到新创build的卷中。

这使您可以使用docker run来简单地启动应用程序映像:

 docker run -d --name app my_application_image 

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

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

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