我正在为一个在Nginx + php-fpm中运行的简单网络应用程序开发基于Docker的设置。我见过的用于存储实际PHP代码的常见建议是将其存储在主机上,然后将其以只读方式挂载到Nginx和PHP容器中。
但是,我希望我的设置是自包含的,因此我可以使用Auto Scaling在Amazon ECS上轻松使用它。换句话说,我想以某种方式捆绑代码,而不是从主机中提取代码。
所以我想要的是一个可以在两个Docker容器之间共享的只读卷,并且在这些容器被销毁后不会持久存在。这可能吗?或者有更好的方法吗?
答案 0 :(得分:1)
Docker镜像可以包含预先填充数据的卷。要实现此目的,请在Dockerfile
中首先填充目录(例如使用COPY
或RUN
),然后将其声明为卷。这允许您构建包含卷内应用程序代码的图像:
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
的两个容器中的应用程序代码。