Dev*_*dka 20 docker dockerfile
我使用docker进行开发和laravel项目的生产.我有一些稍微不同的dockerfile用于开发和生产.例如,我将本地目录挂载到开发环境中的docker容器,这样我就不需要为代码中的每个更改执行docker构建.
由于挂载的目录仅在运行docker容器时可用,所以我无法在dockerfile中输入"composer install"或"npm install"等命令进行开发.
目前我正在管理两个docker文件,有什么办法可以用单个docker文件做这个,并决定在通过发送参数进行docker build时运行哪些命令.
我想要实现的是
在docker文件中
...
IF PROD THEN RUN composer install
...
Run Code Online (Sandbox Code Playgroud)
在docker build期间
docker build [PROD] -t mytag .
Run Code Online (Sandbox Code Playgroud)
Mic*_*ler 18
您可以使用两个不同的Dockerfiles.
# ./Dockerfile (non production)
FROM foo/bar
MAINTAINER ...
# ....
Run Code Online (Sandbox Code Playgroud)
第二个:
# ./Dockerfile.production
FROM foo/bar
MAINTAINER ...
RUN composer install
Run Code Online (Sandbox Code Playgroud)
在调用build命令时,您可以告诉它应该使用哪个文件:
$> docker build -t mytag .
$> docker build -t mytag-production -f Dockerfile.production .
Run Code Online (Sandbox Code Playgroud)
yam*_*enk 17
作为最佳实践,您应该尝试使用一个Dockerfile来避免不同环境之间的意外错误.但是,您可能有一个不能这样做的用例.
Dockerfile语法不够丰富,无法支持这种情况,但是您可以使用shell脚本来实现这一点.
创建一个shell脚本,调用install.sh
类似于:
if [ ${ENV} = "DEV" ]; then
composer install
else
npm install
fi
Run Code Online (Sandbox Code Playgroud)
在Dockerfile中添加此脚本,然后在构建时执行它
...
COPY install.sh install.sh
RUN chmod u+x install.sh && ./install.sh
...
Run Code Online (Sandbox Code Playgroud)
构建时传递构建arg以指定环境,例如:
docker build --build-arg "ENV=PROD" ...
Run Code Online (Sandbox Code Playgroud)
您可以直接使用 build args 而无需提供额外的 sh 脚本。不过可能看起来有点乱。但它有效。
Dockerfile 必须是这样的:
FROM alpine
ARG mode
RUN if [ "x$mode" = "xdev" ] ; then echo "Development" ; else echo "Production" ; fi
Run Code Online (Sandbox Code Playgroud)
要检查的命令是:
docker build -t app --build-arg mode=dev .
docker build -t app --build-arg mode=prod .
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种方法,包括使用 docker-compose、多阶段构建、通过文件传递参数以及其他答案中使用的方法。我的公司需要一个很好的方法来做到这一点,在尝试了这些之后,这是我的意见。
最好的方法是通过 cmd 传递 arg。您可以在右键单击并选择构建图像的同时通过 vscode 传递它,同时 使用以下代码单击图像构建的visual studio代码图像:
ARG BuildMode
RUN echo $BuildMode
RUN if [ "$BuildMode" = "debug" ] ; then apt-get update \
&& apt-get install -y --no-install-recommends \
unzip \
&& rm -rf /var/lib/apt/lists/* \
&& curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg ; fi
Run Code Online (Sandbox Code Playgroud)
并在 dockerfile 的构建部分:
ARG BuildMode
ENV Environment=${BuildMode:-debug}
RUN dotnet build "debugging.csproj" -c $Environment -o /app
FROM build AS publish
RUN dotnet publish "debugging.csproj" -c $Environment -o /app
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12881 次 |
最近记录: |