如何为开发和生产配置不同的dockerfile
我使用docker进行开发和生产laravel项目。我有一些不同的dockerfile用于开发和生产。例如,我在开发环境中将本地目录挂载到docker容器,以便我不需要为代码中的每个更改都执行docker build。如何为开发和生产配置不同的dockerfile
由于挂载的目录将只在运行docker容器时可用我不能在dockerfile中为“开发”放置“composer install”或“npm install”等命令。
目前我正在管理两个docker文件,有没有什么办法可以通过单个docker文件来做到这一点,并决定在通过发送参数进行docker构建时运行哪些命令。
我所试图实现的是
在泊坞窗文件
...
IF PROD THEN RUN composer install
...
在码头工人建立
docker build [PROD] -t mytag .
正如你应该试着瞄准最佳实践使用一个Dockerfile来避免不同环境之间的意外错误。然而,你可能有一个用例,你不能这样做。
Dockerfile语法不够丰富,无法支持这种情况,但是您可以使用shell脚本来实现该功能。
创建一个shell脚本,称为install.sh
,做一样的东西:
if [ ${ENV} = "DEV" ]; then
composer install
else
npm install
fi
在你Dockerfile添加此脚本,然后执行它建立
...
COPY install.sh install.sh
RUN chmod u+x install.sh && ./install.sh
...
当在构建通过构建ARG指定环境,例如:
docker build --build-arg "ENV=PROD" ...
您可以使用两种不同的Dockerfiles。
# ./Dockerfile (non production)
FROM foo/bar
MAINTAINER ...
# ....
,第二个:
# ./Dockerfile.production
FROM foo/bar
MAINTAINER ...
RUN composer install
在呼吁构建命令,你可以知道哪些文件应该使用:
$> docker build -t mytag .
$> docker build -t mytag-production -f Dockerfile.production .
对不起,我读过你现在正在做的! 但您也可以使用ENV变量,如下所示:https://stackoverflow.com/a/34545644/6849366 –
最好是使用相同的,并overl您的设备对生产图像的要求。 – Matt
[当我的开发环境将我的代码库装入容器时,如何构建docker映像?](https://stackoverflow.com/questions/40914696/how-do-i-build-docker-images-when- my-development-environment-mounts-my-codebase) – Matt