docker - Dockerfile 在几个环境中部署 Vue.js 应用程序?
问题描述
我正在尝试创建一个 Dockerfile 以将 Vue.js 应用程序部署为 Cloud Run (GCP) 中的 docker。从 Vue 官方文档中获取 Dockerfile 以在“生产模式”下部署应用程序:
FROM node:lts-alpine
RUN npm install -g http-server
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 8080
CMD [ "http-server", "dist" ]
它工作正常,但我想修改 Dockerfile 以使其动态化。我的意思是,我希望这个文件能够使用一种输入参数部署到生产或 DEV
我尝试了几次尝试,其中之一是添加这些新行
ENV ENT=production
RUN NODE_ENV=${ENT} npm run build
意图将环境变量的默认值定义为“生产”,并在 Cloud Run 服务中将相同的环境变量定义为“开发”。我以为在云运行服务上定义的变量会在运行docker的那一刻覆盖本地变量(Dockerfile)。它没有被覆盖,并且该应用程序再次在生产中运行
你知道是否有办法覆盖 Dockerfile 环境变量,或者是否可以创建一些东西
npm run build:dev
npm run build:prod
动态取决于我要部署的环境?
这是我的package.json
{
/// ...
"scripts": {
"dev": "vue-cli-service serve --mode development",
"test": "cross-env NODE_ENV=testing vue-cli-service serve --mode testing",
"prod": "vue-cli-service serve --mode production",
"build:dev": "vue-cli-service build --mode development",
"build": "vue-cli-service build --mode production",
"lint": "vue-cli-service lint"
},
/// ...
}
解决方案
根据 Muni Kumar 的回答,我找到了一种方法,因为在 GCP 中部署容器的工具有点棘手。Cloud build 以创建 docker 映像和 Cloud Run 以部署它
在脚本中:
"build:dev": "vue-cli-service build --mode development",
"build:prod": "vue-cli-service build --mode production",
在 Dockerfile 中:
ARG ENV
RUN npm run build:${ENV}
名为:cloudbuild.yaml的新文件,用于向 Cloud Build 添加一些自定义配置
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build',
'--build-arg',
'ENV=${_ENV}',
'-t',
'gcr.io/$PROJECT_ID/landing',
'.']
substitutions:
_ENV: test # default value
images: [
'gcr.io/$PROJECT_ID/landing',
]
并且,创建运行下一个命令
gcloud builds submit --config=cloudbuild.yaml --substitutions=_ENV="prod"
推荐阅读
- twitter - Twitter 广告 API:twitter_ads.error.RateLimit
- javascript - 单击另一个无线电输入后更改变量的值
- java - 如何在特定事件期间更改 KeyListener 执行的操作
- mysql - 如何重构超过 30 列的旧表
- c - 在C中对指针数组进行排序
- c# - Xamarin Post Json 数据错误(不允许使用 405 方法)
- reactjs - 不允许在 draft-js-mention-plugin 中多次提及
- angular - @teamhive/ngx-tooltip 不确定如何以编程方式显示()工具提示
- react-native - 如何使用缩放 SDK 减小 react-native 中的 APK 大小?
- javascript - 修复我的函数以使用附加的 Million, Billion, Thousandth 字符串转换大整数更具可读性