加快作业执行速度
您可以通过缓存镜像和依赖项改进作业的性能。
为容器使用代理
您可以使用以下内容缩短下载 Docker 镜像的时间:
- DockerHub Registry 镜像
- 其他开源解决方案
极狐GitLab 依赖代理
为了更加快速地获取容器镜像,您可以为代理容器镜像 使用依赖代理。
Docker Hub 镜像库镜像
您也可以通过为 Docker Hub 做镜像,缩短作业访问容器镜像的时间。 这会导致Registry as a pull through cache。 除加快作业执行速度外,镜像还可以让您的基础架构 更适应 Docker Hub 中断和 Docker Hub 速率限制。
当 Docker daemon 被配置为使用镜像, 它会自动检查镜像的运行实例上的镜像。如果不可用, 它会从公共 Docker 镜像库拉取镜像,并在返还给您之前将其存储在本地。
同一个镜像的下一个请求从本地镜像库拉取。
详情请参见here。
使用 Docker Hub 镜像库镜像
创建 Docker Hub 镜像库镜像:
- 登录到代理容器镜像库要运行的专有机器。
- 确保 Docker Engine 已经安装到那台机器上。
-
创建新的容器镜像库:
docker run -d -p 6000:5000 \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ --restart always \ --name registry registry:2
您可以更改端口号 (
6000
),在另外一个端口上 展示镜像库。这会使用http
启动服务器。如果您想 打开 TLS (https
),请参阅官方文档。 -
检查服务器的 IP 地址。
hostname --ip-address
您应该选择私网 IP 地址。 私网通常是单个 provider 上的机器进行内部通信最快速的解决方法,比如 DigitalOcean、 AWS 或 Azure。 通常,私网上传输的数据并不适用于 您每月的带宽限制。
Docker Hub 镜像库在 MY_REGISTRY_IP:6000
下可访问。
您现在可以配置 config.toml
以使用新的镜像库服务器。
其他开源解决方案
-
rpardini/docker-registry-proxy
可以在本地代理大部分容器镜像库,包括极狐GitLab 容器镜像库。
使用分布式缓存
您可以使用分布式缓存缩短下载语言依赖项的时间。
为指定分布式缓存,您可以设置缓存服务器并 配置 Runner 使用缓存服务器。
如果您使用了弹性伸缩功能,请参见 缓存功能,了解更多分布式 Runner 的内容。
支持以下缓存服务器:
- AWS S3
- MinIO 或其他兼容 S3 的缓存服务器
- 谷歌云存储
- Azure Blob 存储
了解更多极狐GitLab CI/CD,请参见缓存依赖项和最佳实践。
使用 AWS S3
如果想将 AWS S3 作为分布式缓存进行使用,
编辑 Runner 的 config.toml
文件,指向 S3 位置并提供连接证书。
确保 Runner 具有到 S3 端点的网络路径。
如果您使用带有 NAT 网关的私有子网,为了节省数据传输成本,您可以启用 S3 VPC 端点。
使用 MinIO
不使用 AWS S3,您可以创建您自己的缓存存储。
- 登录到缓存服务器将要运行的专有机器。
- 确保 Docker Engine 已经安装到那台机器上。
-
启动 MinIO。
docker run -d --restart always -p 9005:9000 \ -v /.minio:/root/.minio -v /export:/export \ -e "MINIO_ROOT_USER=<minio_root_username>" \ -e "MINIO_ROOT_PASSWORD=<minio_root_password>" \ --name minio \ minio/minio:latest server /export
那你可以更改端口
9005
,在另外的端口上展示缓存服务器。 -
检查服务器的 IP 地址。
hostname --ip-address
- 您的缓存服务器将在
MY_CACHE_IP:9005
可用。 -
创建 Runner 要用的桶。
sudo mkdir /export/runner
runner
是那种情况下的桶的名称。如果您选择另外一个 桶,结果就会不同。所有的缓存都会存储在/export
目录中。 - 使用
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
值(上述)作为 配置 Runner 时的访问密钥和密钥。
您现在可以
配置 config.toml
以使用新的缓存服务器。
使用谷歌云存储
如果您要使用谷歌云平台作为分布式缓存,
请编辑 Runner 的 config.toml
文件,指向
GCP 位置并提供连接证书。
确保 Runner 拥有到 GCS 端点的网络路径。
使用 Azure Blob 存储
如果您要使用 Azure Blob 存储作为分布式缓存,
请编辑 Runner 的 config.toml
文件,指向
Azure 位置并提供连接证书。
确保 Runner 拥有到 Azure 端点的网络路径。