我有2个Dockerfile,1个用于dev,1个用于prod:
产品:
FROM golang AS builder
WORKDIR /go/src/gitlab.com/company/project
COPY . .
RUN go build -o ./release/api .
FROM scratch
EXPOSE 9999
COPY --from=builder /go/src/gitlab.com/company/project/release/api .
CMD ["./api"]
和DEV:
FROM golang
WORKDIR /go/src/gitlab.com/company/PROJECT
COPY . .
RUN go build -o ./release/api .
CMD ["./release/api"]
我想将这两个合并为一个,因为维护2个Dockerfile是一个坏习惯
主要区别在于,在开发人员中,我从事golang
实用的图像工作,而在产品中,我从事scratch
图像工作,这大大减少了二进制文件的大小。
看来我可以在Dockerfile中使用多个阶段,并在构建时指定阶段名称:
docker build . --target=builder
但是,如果这样做,我不知道如何在第一阶段有条件地运行我的应用程序= [如果我在开发人员中,请在第一阶段运行该应用程序,否则,请在第二阶段运行该应用程序]
我该怎么办?
那这样的东西呢?我没有对其进行测试,也没有对您的示例进行深入的思考,但是也许与您需要的东西很接近/可以帮助您找到最终的解决方案?
FROM golang:alpine AS base
WORKDIR /go/src/gitlab.com/company/project
COPY . .
RUN go build -o ./release/api .
FROM base AS dev
CMD ["./release/api"]
FROM scratch AS prod
EXPOSE 9999
COPY --from=base /go/src/gitlab.com/company/project/release/api .
CMD ["./api"]
根据target docker build --target=prod
或中指定的值docker build --target=dev
,将生成其他图像。
问题内容: 我将docker用于laravel项目的开发和生产。我用于开发和生产的dockerfile略有不同。例如,我在开发环境中将本地目录安装到docker容器中,因此我不需要为代码中的每个更改进行docker构建。 由于挂载目录仅在运行docker容器时可用,因此无法在开发文件中将诸如“ composer install”或“ npm install”之类的命令放入dockerfile中。
我使用docker为laravel项目开发和生产。我有一个稍微不同的dockerfile用于开发和生产。例如,我在开发环境中将本地目录装载到docker容器中,这样我就不需要为代码中的每个更改进行docker构建。 由于挂载目录只有在运行docker容器时才可用,因此我无法将“composer install”或“npm install”之类的命令放入dockerfile中进行开发。 目前,我正在
我们有一个包含对象集合的开发服务器。这些对象的实际积累是一个持续的过程,在这个本地开发服务器上运行标签、验证等的整个过程。一旦这些对象准备好生产,它们就会被添加到生产数据库中,从那时起,生产数据库将在其计算中使用它们。 我正在寻找一种简单地将增量(新对象)添加到生产数据库中的方法,同时将所有其他集合和旧对象保留在同一个集合中。到目前为止,我们一直使用MySql,所以这个过程只涉及运行数据库结构和数
问题内容: 我有一个GlassFish / j2ee应用程序,我在一个盒子上进行开发,而生产是一个远程盒子。我有一个制作文件的功能,根据我的开发箱或生产环境,我需要文件的位置不同。什么是自动切换方式,所以我不必根据部署源文件来编辑源文件? 问题答案: 最简单的方法是定义一个系统属性,该属性指定数据的文件系统位置。生产应用服务器将定义一个值(在启动脚本中使用),而开发应用服务器将定义另一个值。您的应
问题内容: 我一直在开发一个基本的应用程序。现在在部署阶段,很明显,我需要本地设置和生产设置。 很高兴知道以下内容: 如何最好地应对开发和生产设置。 如何仅在开发环境中保留django-debug-toolbar之类的应用程序。 开发和部署设置的其他任何技巧和最佳做法。 问题答案: 该DJANGO_SETTINGS_MODULE环境变量,其设置文件Django的控件将加载。 因此,你将为各自的环境
问题内容: 让表达方式知道我所处环境的最简单方法是什么?例如,我想根据我所在的环境执行以下操作以连接到Redis。可以从命令行完成吗? 问题答案: 您的方法是可以的,但是您可以做一些更通用的事情,例如将Redis的配置数据存储在文件中,或者像参数一样传递主机和端口: 然后在您的应用中,您可以使用process.argv来抓取它们: 更新: Express可以通过查看NODE_ENV变量(proce