我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

如何解决Docker镜像拉取问题并搭建私有镜像仓库

来源:网络 更新时间:2024-06-21 15:31:20

最近一段时间,Docker镜像在国内一直不能够被正常拉取,甚至连Docker Hub都很难直接访问了。而且,许多国内的镜像站点,包括一些大型企业和高校运营的,也纷纷关闭了,对于个人开发者和中小企业来说带来了不小的困扰。换句话说,通过这些镜像站点我们往往可以快速、方便地获取所需的Docker镜像,现在这一途径也不再通畅。因此,我们迫切需要寻找解决方案来搭建自己的私有镜像仓库。

最近网上出现了许多关于如何解决Docker Hub镜像拉取问题的方法,大致总结如下几种:

Github Action

通过利用Github Action Job来对Docker Hub镜像重新打标签,然后推送到阿里云等其他公有云镜像仓库。对于需要单个镜像的使用者来说,这个方法相当方便,然而对于批量操作来说稍微复杂一些。同时,在无法访问Github的情况下也会受到影响。

CloudFlare Worker

通过使用CloudFlare Worker对Docker Hub的访问请求做中转的方案,是目前使用较为频繁的方法。因为个人用户的免费计划每天有10万次免费请求,对于个人用户和中小企业来说足够使用了。CloudFlare Worker的脚本在网上具备很多示例供参考。需要注意的是,由于CloudFlare Worker默认分配的域名后缀在国内无法解析,所以需要将域名托管在CloudFlare上才能正常使用,可以购买其他价格适中的域名如".xyz"专门用来做代理访问。

然而,CloudFlare Worker CDN的稳定性较差,有时快有时慢,可以利用自选优选IP工具来帮助获取访问CloudFlare延迟最低的IP,并将其写入到本地Hosts文件中。

自建镜像仓库

在提及自建方案时,首先想到的是购买低成本的国外服务器,然后搭建Nginx服务器作为代理。下面是一个成功配置的Nginx配置文件示例:


server {
  listen 443 ssl;
  server_name 域名;
  ssl_certificate 证书地址;
  ssl_certificate_key 密钥地址; 
  #...其他配置...
}

然后可以直接使用docker pull域名/library/nginx:latest命令获取镜像,或者配置到Docker的daemon.json中。不过需要注意Nginx代理的方案需要有能力购买到合适的国外服务器,否则网络速度会很慢。另外,在国外服务器上搭建Registry、Nexus、Harbor等镜像仓库同样是一种可行的解决方案,它们都具备镜像缓存功能。如果私有镜像仓库中不存在则会去代理服务中获取最新镜像。

建议方案

因此,对于个人用户和中小企业来说,可以尝试将CloudFlare Worker与自建镜像仓库相结合:在本地搭建Registry、Nexus或Harbor等镜像仓库,然后在镜像仓库中配置CloudFlare Worker或Nginx反向代理地址,甚至可以配置当前其他可用的代理。当本地不存在镜像时,将会通过这些代理获取镜像,即使代理不可用,本地仍然可使用。

搭建Docker Registry

如果想要搭建Docker Registry,可以参考下面的命令:


docker run -d --restart=always --name registry \
-p 443:443
#...其他参数...
registry:2

搭建Nexus

也可以选择使用Docker命令搭建Nexus:


docker run -d -p 8081:8081 --name nexus sonatype/nexus3

亦或者在Rainbond应用商店中选择一键安装。

搭建Harbor

Harbor文档中也提供了搭建方法,或者可以使用Rainbond应用商店的一键安装功能。

可用的镜像代理

最近我尝试了许多镜像加速站点,整理出以下几个目前可用的站点。值得注意的是,这些镜像站存在随时不可用、关停或访问缓慢的可能性,因此建议同时配置多个镜像源。

提供商 地址
DaoCloud https://docker.m.daocloud.io
阿里云 https://.mirror.aliyuncs.com
Docker镜像代理 https://dockerproxy.com
百度云 https://mirror.baidubce.com
南京大学 https://docker.nju.edu.cn
中科院 https://mirror.iscas.ac.cn

福利

最近Rainbond社区接到了不少用户的反馈,表示Docker镜像无法拉取,也无法构建和打包。因此,Rainbond也搭建了一个镜像加速服务,采用CloudFlare加上国外服务器Nginx反向代理的方案,为Rainbond社区的用户们提供镜像加速服务。

使用方法

1. 直接获取Docker Hub镜像:


docker pull docker.rainbond.cc/library/node:20
docker pull docker.rainbond.cc/rainbond/rainbond:v5.17.2-release-allinone

2. 配置镜像加速器:


tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.rainbond.cc"]
}
EOF
systemctl daemon-reload
systemctl restart docker