我正在建立一个google-cloud-sdk基本图像,并试图使其保持精简。
ARG GCLOUD_SDK_VERSION=285.0.1-alpine
FROM google/cloud-sdk:$GCLOUD_SDK_VERSION
# Install Java 8 for Datastore emulator
RUN apk add --update --no-cache \
openjdk8-jre
RUN gcloud components install \
cloud-datastore-emulator \
pubsub-emulator \
beta \
--quiet
...
到目前为止,一切都很好。当我构建并查看
gcloud components install
命令的输出时,我感到很自信:┌──────────────────────────────────────────────────┐
│ These components will be installed. │
├──────────────────────────┬────────────┬──────────┤
│ Name │ Version │ Size │
├──────────────────────────┼────────────┼──────────┤
│ Cloud Datastore Emulator │ 2.1.0 │ 18.4 MiB │
│ Cloud Pub/Sub Emulator │ 2019.09.27 │ 34.9 MiB │
│ gcloud Beta Commands │ 2019.05.17 │ < 1 MiB │
└──────────────────────────┴────────────┴──────────┘
但是,我的最终图像大小令人震惊:1.11GB。当我查看docker历史记录时,我看到组件安装实际上为最终镜像大小贡献了654MB:
CREATED BY SIZE
/bin/sh -c gcloud components install … 654MB
/bin/sh -c apk add --update --no-cache … 78.2MB
我目前假设它与安装过程的最后一行有关。
╔════════════════════════════════════════════════════════════╗
╠═ Creating backup and activating new installation ═╣
╚════════════════════════════════════════════════════════════╝
在本地工作站上看起来很不错,但在docker镜像中却不是。我试图查看是否可以停用此备份或之后将其删除。手册页中没有有用的段落,并且在线搜索始终将我引导到您可以使用
gcloud
命令启动的一些云数据库备份过程。有人对这里发生的事情有进一步的了解吗?也许造成大多数开销的根本不是备份吗?
最佳答案
首先,我要感谢@gso_gabriel的建议。我最终在调用gcloud components install
之前和之后分析了文件系统的利用率。
.install/.backup
文件夹,该文件夹最初不存在,并且在组件安装后占用了大约270 MB。 __pycache__
文件夹,这些文件夹总计约100 MB。 为了减小整体图像大小,我将相应的docker行更新为:
RUN gcloud components install \
cloud-datastore-emulator \
pubsub-emulator \
beta \
--quiet \
&& rm -rf $(find google-cloud-sdk/ -regex ".*/__pycache__") \
&& rm -rf google-cloud-sdk/.install/.backup
可以通过
docker history
看到改进:CREATED BY SIZE
/bin/sh -c gcloud components install … 317MB
减少了300 MB以上。我通过将其用作我的一个应用程序的数据存储和发布订阅服务来对其进行测试,并运行其单元测试。一切似乎仍然运行良好。
可能还有更多可以清除的文件,但是我相信我已经掌握了很多文件。
关于docker - 如何停止 `gcloud component update`进行备份?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60827959/