我正在尝试创建一个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服务中将相同的环境变量定义为“ dev”。我以为在云运行服务上定义的变量将在运行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"
},
/// ...
}
答案 0 :(得分:0)
第一种方式:
传递docker参数
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
RUN /bin/bash -c '[[ "${NODE_ENV}" == "production" ]] && npm run build:prod || npm run build:dev'
第二种方式:
将参数传递给npm脚本
在脚本中
"build": "vue-cli-service build --mode production $npm_config_environment"
在docker文件中
ARG NODE_ENV
RUN npm run build --environment "$NODE_ENV"
在构建docker时
docker build --build-arg NODE_ENV=production
答案 1 :(得分:0)
基于Muni Kumar的回答,我找到了一种方法,因为在GCP中部署容器的工具有些棘手。通过云构建来创建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"