Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用docker+;谷歌云构建_Node.js_Docker_Next.js_Google Cloud Build - Fatal编程技术网

Node.js 如何使用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

我正在尝试在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
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映像实例化的容器作为云构建中的一个步骤。看见