减少 Container Registry 数据传输
根据从 Container Registry 下载镜像或标签的频率,数据传输可能会超过 JihuLab.com 的限制。此页面提供了一些建议和技巧,可帮助您减少使用 Container Registry 传输的数据量。
检查数据传输使用情况
目前无法在 UI 中查看传输使用量。
确定镜像大小
使用以下工具和技术来确定图像的大小:
-
Skopeo:使用 Skopeo
inspect
命令,通过 API 调用检查镜像层和大小。因此,您可以在运行docker pull IMAGE
之前检查此数据。 -
CI 中的 Docker:在使用 Docker 推送镜像之前,使用极狐GitLab CI 检查并记录镜像大小。例如:
docker inspect "$CI_REGISTRY_IMAGE:$IMAGE_TAG" \ | awk '/"Size": ([0-9]+)[,]?/{ printf "Final Image Size: %d\n", $2 }'
-
Dive 是一个用于探索 Docker 镜像、分层内容并发现减少其大小的方法的工具。
减少镜像大小
使用更小的基础镜像
考虑使用较小的基础镜像,例如 Alpine Linux。 一个 Alpine 镜像大约 5 MB,比 Debian 等流行的基础镜像小几倍。 如果您的应用程序作为独立的静态二进制文件分发,例如 Go 应用程序,您还可以考虑使用 Docker scratch 基础镜像。
如果您需要使用特定的基础镜像操作系统,请寻找 -slim
或 -minimal
版本,有助于减少镜像大小。
还要注意安装在基本镜像之上的操作系统包。这些文件加起来可达数百兆字节。尝试将已安装软件包的数量保持在最低限度。
多阶段构建可以成为清理瞬态构建依赖项的强大助力。
您还可以考虑使用以下工具:
- DockerSlim 提供了一组命令来减少容器镜像的大小。
- Distroless 镜像仅包含您的应用程序及其运行时依赖项。
它们不包含程序包管理器、shell 或您希望在标准 Linux 发行版中找到的任何其他程序。
最小化镜像层
Dockerfile 中的每条指令都指向一个新镜像层,镜像层记录在此类指令期间应用的文件系统更改。通常,更多或更大的镜像层会导致更大的镜像。尽量减少在 Dockerfile 中安装包的层数,否则可能会导致构建过程中的每个步骤都增加镜像大小。
有多种策略可以减少镜像层的数量和大小。例如,您可以在单个 RUN
命令上安装所有包,而不是对要安装的每个操作系统包使用一个 RUN
命令(这将导致每个包一个镜像层),这样可以以在构建过程中减少步骤数,从而减少镜像的大小。
另一个有用的策略是确保在安装包之前和之后,删除所有临时构建依赖项,并禁用或清空操作系统包管理器缓存。
构建镜像时,请确保只复制相关文件。对于 Docker,使用 .dockerignore
有助于确保构建过程忽略不相关的文件。
您可以使用其他第三方工具来减少您的镜像大小,例如 DockerSlim。 请注意,如果使用不当,此类工具可能会删除您的应用程序在某些条件下运行所需的依赖项。因此,最好在构建过程中争取减少镜像大小,而不是在之后尝试减少大小。
使用多阶段构建
对于多阶段构建,您可以在 Dockerfile 中使用多个 FROM
语句。每个 FROM
指令都可以使用不同的基础镜像,并且每个指令都开始一个新的构建阶段。您可以有选择地将产物从一个阶段复制到另一个阶段,在最终镜像中,您不想要的所有内容都不会留下。当您需要安装构建依赖项,但不需要它们出现在最终镜像中时,这种方法很有用。
实用镜像拉取策略
使用 docker
或 docker+machine
执行器时,您可以在 runner config.toml
中,设置一个 pull_policy
参数,它定义了 runner 在拉取 Docker 镜像时是如何工作的。
为避免在使用大型且很少更新的镜像时传输数据,请考虑在从远端镜像库中拉取镜像时,使用 if-not-present
拉取策略。
使用 Docker 镜像层缓存
运行 docker build
时,Dockerfile
中的每个命令都会生成一个镜像层。这些镜像层作为缓存保存,如果没有任何更改,可以重复使用。您可以使用 --cache-from
参数指定要用作 docker build
命令的缓存源的标签镜像。您可以使用多个 --cache-from
参数将多个镜像指定为缓存源,可以加快构建速度并减少传输的数据量。有关详细信息,请参阅有关 Docker 镜像层缓存的文档。
检查自动化频率
我们经常创建捆绑到容器镜像中的自动化脚本,按特定时间间隔执行常规任务。 在自动化将容器镜像从极狐GitLab 镜像库拉到 JihuLab.com 之外的服务的情况下,您可以减少间隔频率。
升级到极狐GitLab 专业版或旗舰版
JihuLab.com 数据传输限制是根据订阅级别设置的。如果您需要更高的限制,请考虑升级到专业版或旗舰版。
购买额外的数据传输配额
详细了解如何管理您的数据传输限制。