2017-02-21 56 views
0

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

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

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

回答

1

泊坞窗图像可以包含预先填充数据的卷。要达到此目的,请在Dockerfile中首先填充目录(例如,使用COPYRUN),然后将其声明为卷。这使您可以构建一个包含体积内的应用程序代码的图像:

FROM php:7-fpm 

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

创建从该图像的新容器将创建一个新卷,从图像的/var/www/html目录中的数据初始化和内部挂载你的新容器在同一个位置。

比较the documentation的详细资料:

的搬运工运行命令初始化与存在于基本图像内的指定位置的任何数据新创建的卷。例如,请考虑以下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

+0

但是,这是否涵盖了我的问题的“短暂”部分?根据我的理解,这种方法会在我的容器终止后留下孤立的卷,这是我希望避免的。 – phu

+0

容器的容量应该和容器一起删除,至少在使用['--volumes'或'-v'标志]时(https://docs.docker.com/engine/reference/commandline/rm/# /选项)。 – helmbert