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
gcloud重建完整的容器,但Dockerfile相同,只是脚本已更改_Docker_Google Cloud Platform_Gcloud - Fatal编程技术网

gcloud重建完整的容器,但Dockerfile相同,只是脚本已更改

gcloud重建完整的容器,但Dockerfile相同,只是脚本已更改,docker,google-cloud-platform,gcloud,Docker,Google Cloud Platform,Gcloud,我正在使用gcloud构建Docker容器: gcloud builds submit --timeout 1000 --tag eu.gcr.io/$PROJECT_ID/dockername Dockerfiles/folder_with_dockerfile Dockerfile的最后两个步骤包含以下内容: COPY script.sh . CMD bash script.sh 我想测试的许多更改都在脚本中。因此Dockerfile保持完整。使用Docker compose在Linux

我正在使用gcloud构建Docker容器:

gcloud builds submit --timeout 1000 --tag eu.gcr.io/$PROJECT_ID/dockername Dockerfiles/folder_with_dockerfile
Dockerfile的最后两个步骤包含以下内容:

COPY script.sh .
CMD bash script.sh
我想测试的许多更改都在脚本中。因此Dockerfile保持完整。使用Docker compose在Linux上构建这些Docker文件会导致非常快速的构建,因为它检测不到任何更改。但是,在gcloud上执行此操作时,我注意到正在重新生成完整的Docker,而在script.sh中只创建了一个小的更改


有什么方法可以防止这种行为吗?

实际上,
gcloud
有一个:

gcloud生成提交
命令:

  • 压缩当前目录中的应用程序代码、Dockerfile和任何其他资产,如
    所示
  • 将文件上传到存储桶中
  • 使用上传的文件作为输入启动构建
  • 使用提供的名称标记图像
  • 将生成的映像推送到容器注册表
因此,构建过程可能非常耗时

建议采取以下措施:

  • 建造更精简的容器
  • 使用缓存特性
  • 使用定制的高CPU虚拟机
  • 从上传中排除不必要的文件

这些可以优化整个构建过程

实际上,
gcloud
有一个:

gcloud生成提交
命令:

  • 压缩当前目录中的应用程序代码、Dockerfile和任何其他资产,如
    所示
  • 将文件上传到存储桶中
  • 使用上传的文件作为输入启动构建
  • 使用提供的名称标记图像
  • 将生成的映像推送到容器注册表
因此,构建过程可能非常耗时

建议采取以下措施:

  • 建造更精简的容器
  • 使用缓存特性
  • 使用定制的高CPU虚拟机
  • 从上传中排除不必要的文件
这些可以优化整个构建过程

您的本地构建速度很快,因为您已经在本地缓存了所有远程资源

看起来使用kaniko缓存可以大大加快构建速度。(见附件)

要在项目运行时启用缓存,请执行以下操作

gcloud config set builds/use_kaniko True
第一次构建容器时,它将为缓存提供数据(默认情况下为6小时),其余时间将更快,因为依赖项将被缓存

如果您需要进一步加快构建速度,我将使用两个容器,并在本地GCP容器注册表中同时使用这两个容器:

  • 第一个作为缓存,具有所有远程依赖项(OS/language/framework/etc)
  • 第二个是使用缓存容器作为基础的COPY和CMD
您的本地构建速度很快,因为您已经在本地缓存了所有远程资源

看起来使用kaniko缓存可以大大加快构建速度。(见附件)

要在项目运行时启用缓存,请执行以下操作

gcloud config set builds/use_kaniko True
第一次构建容器时,它将为缓存提供数据(默认情况下为6小时),其余时间将更快,因为依赖项将被缓存

如果您需要进一步加快构建速度,我将使用两个容器,并在本地GCP容器注册表中同时使用这两个容器:

  • 第一个作为缓存,具有所有远程依赖项(OS/language/framework/etc)
  • 第二个是使用缓存容器作为基础的COPY和CMD

是否更明智的做法是在本地构建Docker文件,从而使用Docker compose,这样做会更快?然后上传本地生成的容器?这是一种权衡:1)通用的、有文档记录的、受支持的、提供计算能力的,可能不适合特定需求,因此不是最快的解决方案;以及2)由本地团队提供支持的定制、无文档记录,使用本地本地本地资源,但最适合特定需求。这取决于您的选择。是否更明智的做法是在本地构建Docker文件,从而使用Docker compose,这样做会更快?然后上传本地生成的容器?这是一种权衡:1)通用的、有文档记录的、受支持的、提供计算能力的,可能不适合特定需求,因此不是最快的解决方案;以及2)由本地团队提供支持的定制、无文档记录,使用本地本地本地资源,但最适合特定需求。这取决于你的选择。