Docker镜像加速配置全攻略:原理、选型与多平台实操
1. 项目概述:为什么Docker镜像加速是开发者的“必修课”?
如果你刚开始接触Docker,或者已经用了一段时间,大概率都经历过这样的场景:在终端里敲下docker pull ubuntu或者docker pull mysql,然后看着进度条像蜗牛一样缓慢爬行,甚至时不时卡住,最后弹出一个令人沮丧的network timeout错误。这感觉就像在早高峰的地铁站,明明闸机就在眼前,却被人流堵得寸步难行。这个问题的根源,就在于Docker默认的镜像仓库hub.docker.com位于海外,对于国内用户来说,网络延迟和带宽限制是绕不过去的坎。今天要聊的“Docker配置国内镜像加速器”,就是解决这个“网络早高峰”问题的核心方案。它本质上是通过修改Docker的配置,让它优先从位于国内的镜像服务器拉取镜像,从而将下载速度提升数倍甚至数十倍,让“拉镜像”这个高频操作从“痛苦等待”变成“瞬间完成”。
这不仅仅是提升效率那么简单。在持续集成/持续部署(CI/CD)流程中,镜像拉取速度直接决定了构建和部署的耗时。在团队协作中,统一的镜像源能保证所有人获取到的镜像版本和内容一致,避免因网络问题导致的构建环境差异。对于个人开发者,它意味着更流畅的学习和开发体验。因此,无论你是运维工程师、后端开发,还是正在学习容器技术的学生,配置一个稳定、高速的国内镜像加速器,都是搭建Docker环境后必须做的第一件事。这就像给新买的电脑装驱动、连上高速Wi-Fi一样,是基础且关键的一步。
2. 核心原理与国内主流镜像加速器解析
在动手配置之前,我们有必要搞清楚两件事:镜像加速器是如何工作的?以及国内有哪些可靠的选择?
2.1 镜像加速器的工作原理:不只是“代理”
很多人把镜像加速器简单理解为一个网络代理,这并不完全准确。更贴切的比喻是,它像一个分布在全球各地的“大型连锁超市中央仓库”。Docker官方仓库(Docker Hub)是总仓库,而国内的镜像加速服务(如阿里云、中科大、网易等)则是它在中国的“区域分仓”。
当你配置了镜像加速器后,Docker客户端的行为会发生改变:
- 镜像拉取(Pull):当你执行
docker pull nginx:latest时,Docker引擎不再直接请求registry-1.docker.io,而是转向你配置的加速器地址(例如https://<你的ID>.mirror.aliyuncs.com)。加速器服务会检查本地缓存(即“区域分仓”的货架)是否有这个镜像。如果有,直接返回给你,速度极快;如果没有,它会从Docker Hub总仓拉取并缓存到本地,之后再服务你和后续的其他用户。 - 镜像推送(Push):大多数公共镜像加速器仅提供拉取(Pull)加速服务,而不支持推送(Push)。当你执行
docker push时,请求仍然会直接发往Docker Hub或你指定的私有仓库。这是因为推送涉及权限和存储管理,通常由镜像的最终归属仓库处理。 - 镜像列表(Search):一些加速器也代理了镜像搜索(
docker search)的API,让你能更快地获取镜像列表信息。
这种机制带来的核心优势是缓存和就近访问。热门镜像(如ubuntu,nginx,mysql)几乎总是存在于加速器的缓存中,下载速度可以达到带宽满速。同时,由于服务器在国内,网络延迟(Ping值)从几百毫秒降低到几十毫秒,连接稳定性也大大提升。
2.2 国内主流镜像加速器对比与选型建议
国内提供Docker镜像加速的服务商不少,各有特点。选择一个稳定、快速且适合自己的服务至关重要。下面是一个详细的对比表格:
| 服务提供商 | 加速器地址示例 | 是否需要注册/登录 | 特点与优势 | 潜在注意事项 |
|---|---|---|---|---|
| 阿里云容器镜像服务 (ACR) | https://<你的ID>.mirror.aliyuncs.com | 需要。需开通容器镜像服务,获取专属加速地址。 | 1.速度极快:依托阿里云CDN,网络质量有保障。 2.专属地址:每人独享,隐私性相对更好。 3.功能丰富:与阿里云生态集成,方便后续使用私有仓库等高级功能。 | 需要登录阿里云控制台进行简单配置,步骤稍多。 |
| 中科大镜像站 (USTC) | https://docker.mirrors.ustc.edu.cn | 不需要。完全公开免费。 | 1.开箱即用:无需任何注册,地址固定。 2.历史悠久:国内老牌开源镜像站,信誉好。 3.维护稳定:由高校维护,长期可靠。 | 公开服务,高峰期可能有一定压力。不支持推送。 |
| 网易蜂巢镜像中心 | https://hub-mirror.c.163.com | 不需要。完全公开免费。 | 1.简单直接:地址固定,配置最简单。 2.速度不错:网易云的网络基础设施较好。 | 同属公开服务。功能相对基础。 |
| 腾讯云软件源 | https://mirror.ccs.tencentyun.com | 不需要。完全公开免费。 | 1.腾讯云背书:网络质量稳定。 2.地址固定,配置方便。 | 同样是公开镜像源。 |
| DaoCloud 加速器 | http://f1361db2.m.daocloud.io(旧版) | 旧版需在官网获取令牌,新版有变化。 | 早期流行的加速器之一。 | 其旧版加速器已逐渐停止维护,官方推荐使用https://docker.mirrors.ustc.edu.cn等。建议优先选择其他源。 |
| 华为云SWR镜像仓库 | https://<区域>-mirror.swr.myhuaweicloud.com | 需要。需开通SWR服务。 | 1.华为云生态集成。 2. 提供专属加速地址。 | 配置流程类似阿里云,需登录控制台。 |
注意:一些教程中可能还提到“七牛云”、“灵雀云”等加速器,部分可能已停止服务或不再维护。选择时,建议优先考虑上述列表中的主流服务。
个人选型建议:
- 追求最佳体验和未来扩展性:推荐阿里云ACR。虽然需要注册,但换来的是专属、高速、稳定的加速服务,并且为将来使用私有镜像仓库铺平了道路。
- 图省事,快速搞定:推荐中科大(USTC)或网易蜂巢。无需注册,地址固定,直接复制粘贴配置即可,适合新手和临时使用。
- 公司内部或团队使用:建议统一使用阿里云或华为云的专属加速地址,便于管理和维护一致性。如果条件允许,甚至可以自建镜像仓库(如Harbor)并配置为上游缓存,实现完全内网加速。
3. 全平台配置国内镜像加速器实操指南
配置镜像加速器,本质上是修改Docker守护进程(daemon)的配置,告诉它去哪里拉取镜像。不同操作系统的配置文件位置和修改方式略有不同。下面我将分别针对Windows/macOS (Docker Desktop)和Linux系统,提供最详细、可落地的配置步骤。
3.1 Windows 10/11 & macOS 配置指南 (Docker Desktop)
对于绝大多数个人开发者,Windows和macOS上使用的是图形化工具Docker Desktop。它的配置相对直观。
核心原理:Docker Desktop通过一个名为daemon.json的配置文件来管理Docker引擎的配置。我们需要修改这个文件,添加registry-mirrors字段。
详细步骤:
确保Docker Desktop已安装并运行:在开始菜单或应用目录中找到Docker Desktop并启动它。等待右下角或状态栏的Docker鲸鱼图标显示为“Docker Desktop is running”。
打开Docker Desktop设置:
- 右键点击系统托盘(Windows)或菜单栏(macOS)的Docker鲸鱼图标。
- 选择“Settings”(设置)或“Preferences”(偏好设置)。
进入Docker Engine配置页面:
- 在设置窗口的左侧导航栏中,找到并点击“Docker Engine”。
- 右侧会显示一个JSON格式的编辑框,其内容就是
daemon.json的配置。
修改配置:
- 在已有的JSON对象中,找到或添加
"registry-mirrors"键。其值是一个字符串数组,可以配置多个加速地址,Docker会按顺序尝试。 - 例如,配置阿里云和中科大两个镜像源(请将
<你的ID>替换为阿里云控制台获取的真实ID):{ "registry-mirrors": [ "https://<你的ID>.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn" ], // ... 其他已有配置保持不变 } - 如果只配置一个(如网易蜂巢):
{ "registry-mirrors": [ "https://hub-mirror.c.163.com" ] }
- 在已有的JSON对象中,找到或添加
应用并重启:
- 点击编辑框右上角的“Apply & Restart”按钮。
- Docker Desktop会自动保存配置并重启Docker引擎。这个过程会花费几十秒,请耐心等待。
验证配置是否生效:
- 重启完成后,打开终端(PowerShell, CMD 或 Terminal)。
- 输入命令:
docker info - 在输出信息中,仔细查找
Registry Mirrors:这一行。如果能看到你刚刚配置的镜像地址,说明配置成功。Registry Mirrors: https://<你的ID>.mirror.aliyuncs.com/ https://docker.mirrors.ustc.edu.cn/
实操心得:在Windows/macOS上,直接通过Docker Desktop的GUI修改
daemon.json是最安全、最推荐的方式。绝对不要手动去系统目录下寻找和编辑这个文件,因为Docker Desktop管理着虚拟机和文件系统的映射,手动修改很容易出错或失效。
3.2 Linux 系统配置指南 (Ubuntu/CentOS等)
在Linux服务器或开发机上,我们通常直接安装Docker Engine。配置需要通过命令行操作,修改系统服务配置文件。
核心原理:同样是编辑daemon.json文件,但该文件通常位于/etc/docker/目录下。修改后需要重载配置并重启Docker服务。
详细步骤:
创建或编辑配置文件:
- 使用
vim或nano等编辑器,打开(或创建)/etc/docker/daemon.json文件。 - 命令示例:
sudo vim /etc/docker/daemon.json
- 使用
输入配置内容:
- 如果文件是空的,直接写入以下内容。如果已有内容(例如之前配置过其他参数),请确保JSON格式正确,将
registry-mirrors添加到现有对象中。 - 配置阿里云和中科大源:
{ "registry-mirrors": [ "https://<你的ID>.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn" ] } - 注意:JSON格式非常严格,键值对需要用双引号,末尾不能有多余逗号。
- 如果文件是空的,直接写入以下内容。如果已有内容(例如之前配置过其他参数),请确保JSON格式正确,将
保存并退出编辑器(以vim为例:按
Esc键,输入:wq,回车)。重新加载系统守护进程配置并重启Docker服务:
- 让systemd重新读取所有服务的配置文件:
sudo systemctl daemon-reload - 重启Docker服务以使新配置生效:
sudo systemctl restart docker
- 让systemd重新读取所有服务的配置文件:
验证配置:
- 运行
docker info命令,查看Registry Mirrors:部分是否包含你设置的地址。 - 也可以运行一个简单的拉取命令测试速度:
docker pull hello-world。如果配置成功,你会看到镜像从你配置的镜像源地址被拉取。
- 运行
注意事项:
- 权限问题:所有操作都需要
sudo或 root 权限,因为/etc/docker/是系统目录。- JSON格式:这是最容易出错的地方。编辑完成后,可以使用
sudo cat /etc/docker/daemon.json查看内容,或者用sudo json_pp -f /etc/docker/daemon.json(如果安装了json_pp工具)来校验JSON格式是否正确。一个多余的逗号或缺少一个引号都会导致Docker服务启动失败。- 服务重启:修改配置后,必须重启Docker服务(
sudo systemctl restart docker),否则配置不会生效。
3.3 获取阿里云专属加速器地址详细流程
由于阿里云加速器需要专属地址,这里补充一下获取步骤,这也是很多新手卡住的地方:
- 登录阿里云:访问 阿里云官网 ,使用你的淘宝/支付宝账号或注册新账号登录。
- 进入容器镜像服务控制台:在阿里云首页,通过搜索“容器镜像服务”或从产品分类中找到“容器 -> 容器镜像服务 ACR”并进入。
- 开通服务:如果是第一次使用,按照提示开通“容器镜像服务”。这是免费的。
- 获取加速器地址:
- 在控制台左侧菜单,找到并点击“镜像工具” -> “镜像加速器”。
- 页面中会显示你的专属加速器地址,格式为
https://xxxx.mirror.aliyuncs.com。同时,页面上也会根据你的操作系统(Linux、Mac、Windows)给出详细的配置命令或步骤说明,非常贴心。 - 复制这个地址,替换掉上面配置示例中的
<你的ID>部分即可。
4. 高级配置、验证与疑难排查
配置完成后,事情还没完。如何验证加速确实生效?如何应对复杂网络环境?如何排查配置失败的问题?这部分是真正体现经验的干货。
4.1 验证加速效果与镜像拉取行为分析
仅仅看到docker info里有镜像地址还不够,我们需要实际验证加速效果。
方法一:使用time命令对比测试这是一个最直观的方法。可以先临时删除一个测试镜像,然后分别在不使用和使用加速器的情况下拉取,对比时间。
- 删除本地测试镜像:
docker rmi nginx:alpine(如果存在的话) - 临时禁用加速器(不推荐直接改配置,可以换个方式测试):实际上,我们可以通过直接指定仓库来绕过加速器。但更简单的方法是,先备份你的
daemon.json文件,然后删除其中的registry-mirrors配置项,重启Docker服务。接着拉取镜像并计时:
记录下输出的time docker pull nginx:alpinereal(实际耗时)时间,比如1m30.456s。 - 恢复加速器配置:将备份的
daemon.json文件还原,重启Docker服务。 - 再次拉取并计时:
观察这次的docker rmi nginx:alpine # 再次删除 time docker pull nginx:alpinereal时间。如果加速器生效,耗时通常会缩短到几秒到十几秒,提升效果非常明显。
方法二:观察拉取过程中的镜像层来源在拉取镜像时,Docker会输出每一层(Layer)的下载信息。仔细观察这些信息,可以判断镜像是否来自加速器。
docker pull mysql:8.0在输出中,你会看到类似这样的行:
8.0: Pulling from library/mysql Digest: sha256:abcdef...123456 Status: Downloaded newer image for mysql:8.0但更详细的信息需要开启调试模式。一个更直接的方法是,拉取时留意命令行中是否出现了你配置的镜像加速器域名(如.mirror.aliyuncs.com或mirrors.ustc.edu.cn),这通常会在拉取日志的开头或网络请求中体现。实际上,配置生效后,所有从library/(官方镜像)拉取的请求都会重定向到加速器。
4.2 配置多个镜像源与优先级策略
在registry-mirrors数组中,你可以配置多个地址。Docker客户端会按顺序尝试这些镜像源。
{ "registry-mirrors": [ "https://registry-1.docker.io", "https://<阿里云>.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn" ] }注意:把https://registry-1.docker.io(Docker官方仓库)放在第一个是错误做法!这会导致Docker首先尝试连接官方仓库,如果连接慢或超时,才会 fallback 到后面的国内源,完全失去了加速的意义。
正确的策略是:
- 将最快、最稳定的国内源放在第一位。例如你的阿里云专属加速器。
- 将另一个稳定的公共源作为备用。例如中科大源,放在第二位。
- 无需配置官方源地址。因为如果所有配置的镜像源都失败了,Docker默认会回退到官方源(尽管速度很慢)。你不需要显式写出它。
所以,最佳配置顺序是:[最快专属源, 备用公共源]。
4.3 常见问题排查与解决方案实录
即使按照步骤操作,你也可能会遇到一些问题。下面是我在帮助他人和自身实践中总结的常见“坑”及其解决方法。
问题1:配置后,docker info不显示Registry Mirrors。
- 可能原因A:配置文件路径或格式错误。
- 排查:检查
daemon.json文件路径是否正确(Linux:/etc/docker/, Windows/macOS通过Docker Desktop GUI配置)。用cat命令或文本编辑器确认内容无误,JSON格式正确(可用在线JSON校验工具)。 - 解决:修正JSON文件,确保
registry-mirrors是数组格式,地址带引号。
- 排查:检查
- 可能原因B:Docker服务没有成功重启。
- 排查:运行
sudo systemctl status docker(Linux) 查看服务状态,或检查Docker Desktop是否完全重启。 - 解决:Linux下执行
sudo systemctl restart docker并查看有无错误日志。Windows/macOS上关闭Docker Desktop窗口再重新打开,确保重启。
- 排查:运行
- 可能原因C:配置被覆盖。某些Linux发行版或安装方式可能有额外的配置文件(如
/etc/sysconfig/docker或通过systemd drop-in文件)。- 排查:运行
docker info | grep -A5 'Registry Mirrors'仔细查看。有时配置可能生效了但docker info显示不全,可以尝试拉取一个镜像,通过docker pull的详细输出来判断来源。
- 排查:运行
问题2:拉取镜像时仍然很慢,或者报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection。
- 可能原因A:网络连接问题。虽然配置了加速器,但你的机器无法访问该加速器地址。
- 排查:使用
ping或curl命令测试是否能连通你的镜像加速器地址。例如:curl -I https://docker.mirrors.ustc.edu.cn。如果超时或失败,说明网络不通。 - 解决:检查防火墙设置、代理设置。如果你在公司内网,可能需要联系网络管理员确认是否放行了对应域名。尝试更换为另一个镜像源(如从阿里云换成网易)。
- 排查:使用
- 可能原因B:加速器地址错误或已失效。
- 排查:核对加速器地址是否拼写正确。特别是阿里云的专属地址,确保是从控制台复制的完整地址。
- 解决:重新获取正确的地址。对于公开源,可以访问其官网查看最新地址是否变更。
- 可能原因C:Docker客户端版本过旧,对某些HTTPS镜像源支持有问题。
- 排查:运行
docker version查看Client和Server版本。 - 解决:升级Docker到最新稳定版。
- 排查:运行
问题3:拉取某些非官方镜像(非library/下的镜像)时速度没变化。
- 可能原因:镜像加速器主要缓存的是Docker Hub官方仓库(
library/)的镜像。对于用户自定义的镜像(如someuser/private-image),很多公共加速器可能不缓存或缓存策略不同。- 解释:
docker pull nginx等价于docker pull library/nginx,这是官方镜像。而docker pull bitnami/nginx则是bitnami这个组织发布的镜像,属于Docker Hub上的用户仓库。 - 解决:对于常用的第三方组织镜像(如
bitnami,jenkins/jenkins等),可以尝试直接使用该组织提供的国内镜像地址(如果他们有提供的话)。或者,考虑使用阿里云、腾讯云等提供的“镜像仓库同步”功能,将常用的第三方镜像手动或自动同步到自己的私有仓库中,再从私有仓库拉取。
- 解释:
问题4:在Windows上配置后,Docker Desktop启动失败,报错关于daemon.json。
- 可能原因:几乎100%是
daemon.json文件中的JSON语法错误。- 解决:打开Docker Desktop设置 -> Docker Engine,检查JSON内容。最常见的错误是:最后一个数组元素后面多了逗号,或者键名缺少双引号。你可以将配置内容清空,只保留最基本的
{}和大括号内的加速器配置,然后逐步添加。也可以使用在线JSON格式化校验工具来检查。
- 解决:打开Docker Desktop设置 -> Docker Engine,检查JSON内容。最常见的错误是:最后一个数组元素后面多了逗号,或者键名缺少双引号。你可以将配置内容清空,只保留最基本的
5. 超越基础:镜像加速的进阶场景与最佳实践
掌握了基础配置和排查,我们再来看看一些更深入的场景和优化建议,让你的Docker体验更上一层楼。
5.1 为特定仓库配置独立镜像源或代理
有时候,你不仅需要加速Docker Hub,还需要从其他仓库拉取镜像,比如:
- Google的
gcr.io(由于网络原因,国内访问困难)。 - 红帽的
quay.io。 - 公司的私有仓库
my-registry.example.com:5000。
Docker允许你为特定的仓库配置独立的镜像源或代理。这需要在daemon.json中使用registry-mirrors的兄弟配置项——insecure-registries(用于非HTTPS仓库)和更强大的registry-mirrors的另一种形式(通过"registry-mirrors": {"<仓库地址>": ["<镜像源地址>"]}),但更通用和推荐的方式是配置“注册表镜像”(Registry Mirror)和“非安全注册表”。
不过,对于完全替换某个仓库的拉取源(例如用国内源替代gcr.io),更常见的做法是使用docker pull时直接指定完整的镜像地址(如果该镜像已被同步到某个国内仓库),或者使用镜像拉取工具(如image-syncer)进行手动同步。对于私有仓库,则直接配置insecure-registries(如果是HTTP)或确保其证书被信任(HTTPS)。
示例:配置一个非安全的私有仓库
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "insecure-registries": ["my-registry.example.com:5000"] }这样配置后,你就可以直接docker pull my-registry.example.com:5000/my-image:tag了。
5.2 在CI/CD流水线中配置镜像加速
在Jenkins、GitLab CI、GitHub Actions等CI/CD工具中,构建镜像的第一步往往就是拉取基础镜像。如果这里卡住,整个流水线都会变慢。
配置方法:
- 在构建代理(Agent)或Runner上配置:最根本的方法,就是在执行构建任务的宿主机(物理机、虚拟机或容器)上,按照前面章节的方法,配置好全局的Docker镜像加速器。这样,所有在该机器上运行的构建任务都能受益。
- 在Docker命令中指定镜像源(不推荐):
docker pull命令本身没有直接指定镜像源的参数。但你可以通过修改构建脚本,先拉取镜像到本地加速器,再重新打标签的方式曲线救国,这非常繁琐。 - 使用支持镜像加速的CI/CD服务:例如,阿里云容器镜像服务(ACR)与阿里云效Flow、Jenkins等有深度集成,可以直接在流水线配置中使用ACR的加速地址。一些云厂商提供的托管CI/CD服务,也内置了镜像加速功能。
最佳实践:对于自建CI/CD环境,务必在构建节点上统一配置好镜像加速器,并将其作为环境准备的标准步骤之一。
5.3 镜像加速与安全性的权衡
使用公共镜像加速器,意味着你的镜像拉取请求会经过第三方服务器。这引出了一个安全问题:我拉取的镜像是否被篡改?
这是一个合理的担忧。主流、信誉良好的镜像加速服务提供商(如中科大、阿里云、网易等)通常会采取以下措施保障安全:
- HTTPS传输:所有镜像数据都通过加密的HTTPS协议传输,防止中间人窃听或篡改。
- 镜像签名验证:Docker Content Trust (DCT) 机制可以对镜像进行数字签名。即使镜像从加速器拉取,客户端也会验证其签名是否与官方一致。不过,普通用户很少开启此功能。
- 服务商信誉:像中科大这样的非营利教育机构,或阿里云这样的大型云厂商,有强烈的动机维护服务的纯洁性和安全性,恶意篡改镜像的风险极低,且代价极高。
建议:
- 对于生产环境的核心基础镜像,如果对安全性有极致要求,可以考虑:
- 使用云厂商提供的私有镜像仓库服务(如ACR、腾讯云TCR、华为云SWR),并配置从Docker Hub自动同步(Proxy Cache模式)。这样既享受了加速,又完全掌控了镜像来源和存储。
- 自建镜像仓库(Harbor),并配置为Docker Hub的代理缓存。
- 对于开发和测试环境,使用信誉良好的公共镜像加速器是完全没有问题的,其带来的效率提升远大于可接受的安全风险。
5.4 终极提速:搭建本地镜像仓库缓存 (Harbor)
对于大型团队或对拉取速度、安全性和稳定性有极高要求的场景,搭建一个企业内部的私有镜像仓库,并将其配置为Docker Hub的上游缓存,是终极解决方案。Harbor是目前最流行的开源企业级镜像仓库方案。
它的工作原理:在你的内网部署Harbor,并配置一个“代理项目”。当内网用户第一次请求docker pull ubuntu时,Harbor会从Docker Hub拉取并缓存到本地。此后,所有内网用户的请求都将由Harbor直接响应,速度达到内网极限。同时,Harbor提供了强大的权限管理、漏洞扫描、镜像复制等企业级功能。
优势:
- 极速:内网传输,速度可达GB/s级别。
- 安全可控:镜像完全存储在自己的服务器上,访问权限可精细控制。
- 离线可用:一旦镜像缓存到本地,即使外网断开,内部开发部署也不受影响。
- 节省带宽:避免大量机器重复从公网拉取同一镜像。
当然,这需要额外的服务器资源和运维成本。但对于几十人以上的研发团队,这笔投资带来的效率提升和稳定性保障是非常值得的。
配置Docker客户端使用这个本地Harbor作为镜像加速器,方法就和配置公共加速器一样,只需在daemon.json的registry-mirrors中填入你的Harbor仓库地址(例如https://harbor.mycompany.com)即可。至此,你不仅解决了速度问题,还构建了一套完整、自主的容器镜像管理体系。
