Node.js 如何使用docker+;谷歌云构建
我正在尝试在Google Cloud上构建一个next.js应用程序,使用Thread工作区在monorepo中构建。我发现在构建过程中最慢的一点是安装节点模块,因为我们必须在几个不同的文件夹中进行安装。理想情况下,如果没有任何更改,我希望利用Docker处理Node.js 如何使用docker+;谷歌云构建,node.js,docker,next.js,google-cloud-build,Node.js,Docker,Next.js,Google Cloud Build,我正在尝试在Google Cloud上构建一个next.js应用程序,使用Thread工作区在monorepo中构建。我发现在构建过程中最慢的一点是安装节点模块,因为我们必须在几个不同的文件夹中进行安装。理想情况下,如果没有任何更改,我希望利用Docker处理节点\u模块的缓存。我的Dockerfile如下所示: FROM node:10.13 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install -g yarn RUN yarn
节点\u模块的缓存。我的Dockerfile如下所示:
FROM node:10.13
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install -g yarn
RUN yarn
COPY . .
我的cloudbuild.yaml如下:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/dashboard-modules', './packages/dashboard' ]
- name: node:10.15.1
entrypoint: yarn
# `yarn build-dev` relies on the installation of `next` that happens in the previous step
args: ['--cwd', 'packages/dashboard', 'build-dev']
...
我的预期结果是,在第一次构建时,COPY package*.json
将查看package.json的内容,如果没有任何更改,它将为node\u模块保持相同的输出。这里一个非常关键的步骤是我们安装next
,这将在以后的构建过程中用于从package.json
构建应用程序本身:
"scripts": {
"build": "next build",
...
}
但是,当我进入cloudbuild.yaml
中的第二步时,我的构建错误与env:'next':没有这样的文件或目录
似乎我需要以某种方式“浮出水面”(因为没有更好的术语)在cloudbuild.yaml
的第一步中发生的任何事情,并使next
命令可用于第二步。但我的问题是,我如何才能做到这一点
我应该注意到,我对Docker还很陌生,我一直在想它是如何工作的。云构建的理念是,我们将各个步骤串联在一起,以构建一个结果(通常是一个新的Docker映像或要写入GCS的工件)。云构建配方中的每个步骤本身都在自己的docker容器实例中运行。每个步骤之间的共享是/workspace
中包含的数据,它是一个共享卷。我们的想法是,通过在/workspace处操作数据,每个步骤都会为构建增加一些价值
云构建配方中的第一个命令将生成一个新的Docker映像,并将该映像存储在Docker映像的本地缓存中。但是,Docker文件中描述的命令将在该Docker映像中执行,以构建映像。他们不会对您的/工作区环境进行任何更改,因此在您的第二个云构建步骤中不会有任何“新”内容。云构建的理念是,我们将各个步骤串联在一起以构建结果(通常是一个新的docker映像或要写入GCS的工件)。云构建配方中的每个步骤本身都在自己的docker容器实例中运行。每个步骤之间的共享是/workspace
中包含的数据,它是一个共享卷。我们的想法是,通过在/workspace处操作数据,每个步骤都会为构建增加一些价值
云构建配方中的第一个命令将生成一个新的Docker映像,并将该映像存储在Docker映像的本地缓存中。但是,Docker文件中描述的命令将在该Docker映像中执行,以构建映像。他们不会对您的/工作区环境进行任何更改,因此在您的第二个云构建步骤中不会有任何“新”内容。感谢您抽出时间回复。这一切对我来说都是正确的。我想我仍然有一个问题是“如何”。似乎其他步骤允许“浮出”第一个Docker图像的结果。是否有可能或者我完全混淆了如何在这种情况下使用Docker?您可以创建一个Docker映像(例如,在云构建故事之外)。。。并使用从docker映像实例化的容器作为云构建中的一个步骤。感谢您抽出时间回复。这一切对我来说都是正确的。我想我仍然有一个问题是“如何”。似乎其他步骤允许“浮出”第一个Docker图像的结果。是否有可能或者我完全混淆了如何在这种情况下使用Docker?您可以创建一个Docker映像(例如,在云构建故事之外)。。。并使用从docker映像实例化的容器作为云构建中的一个步骤。看见