Files
Docker-Proxy/README.md
T
2024-07-04 17:17:44 +08:00

283 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<p align="right">
<strong>中文</strong> | <a href="./README.en.md">English</a>
</p>
<div style="text-align: center">
<p align="center">
<img src="https://github.com/dqzboy/Docker-Proxy/assets/42825450/c187d66f-152e-4172-8268-e54bd77d48bb" width="230px" height="200px">
<br>
<i>自建Docker镜像加速服务,基于官方 registry 一键部署Docker、K8s、Quay、Ghcr、Mcr、elastic等镜像加速\管理服务.</i>
</p>
</div>
<div align="center">
[![Auth](https://img.shields.io/badge/Auth-dqzboy-ff69b4)](https://github.com/dqzboy)
[![GitHub contributors](https://img.shields.io/github/contributors/dqzboy/Docker-Proxy)](https://github.com/dqzboy/Docker-Proxy/graphs/contributors)
[![GitHub Issues](https://img.shields.io/github/issues/dqzboy/Docker-Proxy.svg)](https://github.com/dqzboy/Docker-Proxy/issues)
[![GitHub Pull Requests](https://img.shields.io/github/stars/dqzboy/Docker-Proxy)](https://github.com/dqzboy/Docker-Proxy)
[![HitCount](https://views.whatilearened.today/views/github/dqzboy/Docker-Proxy.svg)](https://github.com/dqzboy/Docker-Proxy)
[![GitHub license](https://img.shields.io/github/license/dqzboy/Docker-Proxy)](https://github.com/dqzboy/Docker-Proxy/blob/main/LICENSE)
📢 <a href="https://t.me/+ghs_XDp1vwxkMGU9" style="font-size: 15px;">Docker Proxy-交流群</a>
</div>
---
## 📝 准备工作
⚠️ **重要**:选择一台国外服务器,并且未被墙。对于域名,无需进行国内备案。你也可以通过[CLouDNS](https://www.cloudns.net/)申请免费域名。在一键部署过程中,如果选择安装Caddy,它将自动配置HTTPS。若选择部署Nginx服务,则需要自行申请一个免费的SSL证书,或者通过其他方式来实现SSL加密。
<details>
<summary><strong>免费域名证书申请</strong></summary>
<div>
**方式一:** [Acme.sh自动生成和续订Lets Encrypt免费SSL证书](https://www.dqzboy.com/16437.html)
**方式二:** 域名托管到[Cloudflare 开启免费SSL证书](https://www.cloudflare.com/zh-cn/application-services/products/ssl/)
**方式三:** 可通过第三方平台,申请免费的域名证书(免费一般都为DV证书),适用于个人网站、博客和小型项目
</details>
<details>
<summary><strong>如果你没有上面提到的环境,那么你也可以尝试以下的几种方案</strong></summary>
<div>
**方案一:** 🚀 如果你身边没有上面提到的这些东西,那么你也可以部署到 **[Render](Render/README.md)**
**方案二:** 如果你只有一台服务器,不想搞域名也不想配置TLS,那么你可以修改Docker的配置文件`daemon.json`,指定`insecure-registries` 为你的镜像加速地址
**方案三:** 如果你是在国内的服务器部署,那么你可以在执行一键部署时配置代理,同时会帮你解决国内无法安装Docker的问题
</details>
> **部署过程中出现的问题或者疑问,请下拉找到问题,查看是否有你遇到的情况!尝试先自己解决。**
---
## 📦 部署
### 通过项目脚本部署
```shell
# CentOS && RHEL && Rocky
yum -y install curl
# ubuntu && debian
apt -y install curl
# 国外环境
bash -c "$(curl -fsSL https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main/install/DockerProxy_Install.sh)"
# 国内环境
bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/dqzboy/Docker-Proxy/install/DockerProxy_Install.sh)"
```
### 部署到第三方平台
<details>
<summary><strong>部署到 Render</strong></summary>
<div>
> Render 提供免费额度,绑卡后可以进一步提升额度
使用Render快速部署: [点击查看教程](Render/README.md)
</details>
<details>
<summary><strong>部署到 Koyeb</strong></summary>
<div>
> Koyeb 分配的域名在国内地区访问不是很稳定,不是很推荐!
使用Koyeb快速部署: [点击查看教程](Koyeb/README.md)
</details>
### Docker Compose 部署
<details>
<summary><strong>手动部署容器</strong></summary>
<div>
**⚠️ 注意:** 你需要对哪个镜像仓库进行加速,就下载哪个配置。`docker-compose.yaml`文件默认是部署所有的国外镜像仓库的加速服务,同样也是你部署哪个就配置哪个,其余的删除掉即可!
**1.** 下载[config](https://github.com/dqzboy/Docker-Proxy/tree/main/config)目录下对应的`yml`文件到你本地机器上
**2.** 下载[docker-compose.yaml](https://github.com/dqzboy/Docker-Proxy/blob/main/docker-compose.yaml)文件到你本地机器上,并且与配置文件同级目录下
**3.** 执行 `docker compose` 命令启动容器服务
```shell
docker compose up -d
# 查看容器日志
docker logs -f [容器ID或名称]
```
**4.** 如果你对Nginx或Caddy不熟悉,那么你可以使用你熟悉的服务进行代理。也可以直接通过IP+端口的方式访问
</details>
## 🔨 功能
- [x] 一键部署Docker镜像代理服务的功能,支持基于官方Docker Registry的镜像代理.
- [x] 支持多个镜像仓库的代理,包括Docker Hub、GitHub Container Registry(ghcr.io)、Quay Container Registry(quay.io)、Kubernetes Container Registry(k8s.gcr.io)、Microsoft Container(mcr.microsoft.com)、Elastic Stack(docker.elastic.co)
- [x] 自动检查并安装所需的依赖软件,如Docker、Nginx\Caddy等,并确保系统环境满足运行要求
- [x] 根据你所选择部署的服务,自动渲染对应的Nginx或Caddy服务配置
- [x] 自动清理注册表上传目录中的那些不再被任何镜像或清单引用的文件
- [x] 支持自定义配置代理缓存时间(PROXY_TTL)
- [x] 提供了重启服务、更新服务、更新配置和卸载服务的功能,方便用户进行日常管理和维护
- [x] 支持用户在部署时选择是否提供身份验证
- [x] 支持配置代理(HTTP_PROXY),仅支持http
- [x] 解决国内环境无法安装Docker服务的难题
- [x] 支持主流Linux发行版操作系统,例如Centos、Ubuntu、Rocky、Debian、Rhel等
- [x] 支持主流ARCH架构下部署,包括linux/amd64、linux/arm64
## ✨ 教程
#### 配置Nginx反向代理
> **注意**: 如果你选择部署的是Nginx,那么代理程序部署完成之后,需自行配置 Nginx <br>
**1.下载仓库下的nginx配置文件 [registry-proxy.conf](https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main/nginx/registry-proxy.conf) 到你的nginx服务下,并修改配置里的域名和证书部分** <br>
**2.在你的DNS服务提供商将相应的访问域名解析到部署docker proxy服务的机器IP上** <br>
**3.修改Docker的daemon.json配置,配置你自建的Registry地址。修改后重启docker**
```shell
~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://hub.your_domain_name" ],
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
```
> **说明:** 配置了daemon.json之后,现在拉取镜像无需指定你的加速地址,直接执行docker pull 拉取你需要的镜像即可。下面的步骤是你在没有配置daemon.json的时候,拉取镜像需要加上你的加速地址才可以正常拉取。
---
**1. 使用自建的 Registry 地址替换官方的 Registry 地址拉取镜像**
```shell
# docker hub Registry
## 源:nginx:latest
## 替换
docker pull hub.your_domain_name/library/nginx:latest
# Google Registry
## 源:gcr.io/google-containers/pause:3.1
## 替换:
docker pull gcr.your_domain_name/google-containers/pause:3.1
```
**2. 前缀替换的 Registry 的参考**
| 源站 | 替换为 | 平台 |
|-------|---------------|----------|
| docker.io | hub.your_domain_name | docker hub
| gcr.io | gcr.your_domain_name | Google Container Registry
| ghcr.io | ghcr.your_domain_name | GitHub Container Registry
| k8s.gcr.io | k8s-gcr.your_domain_name | Kubernetes Container Registry
| registry.k8s.io | k8s.your_domain_name | Kubernetes's container image registry
| quay.io | quay.your_domain_name | Quay Container Registry
| mcr.microsoft.com | mcr.your_domain_name | Microsoft Container Registry
| docker.elastic.co | elastic.your_domain_name | Elastic Stack
---
> **详细教程:** <br>
> [自建Docker镜像加速服务:加速与优化镜像管理](https://www.dqzboy.com/8709.html)<br>
> [自建Docker镜像加速,并把域名托管到CF加速镜像拉取](https://www.dqzboy.com/17665.html)
## 📚 展示
<br/>
<table>
<tr>
<td width="50%" align="center"><b>系统环境检查</b></td>
<td width="50%" align="center"><b>服务部署安装</b></td>
</tr>
<tr>
<td width="50%" align="center"><img src="https://github.com/dqzboy/Docker-Proxy/assets/42825450/55df7f6f-c788-4200-9bcd-631998dc53ef?raw=true"></td>
<td width="50%" align="center"><img src=https://github.com/dqzboy/Docker-Proxy/assets/42825450/c544fb1e-ecd5-447c-9661-0c5913586118?raw=true"></td>
</tr>
</table>
## 💻 UI
![docker-proxy](https://github.com/dqzboy/Docker-Proxy/assets/42825450/0ddb041b-64f6-4d93-b5bf-85ad3b53d0e0)
---
## 🫶 赞助
如果你觉得这个项目对你有帮助,请给我点个Star。并且情况允许的话,可以给我一点点支持,总之非常感谢支持😊
> 项目作者自建公益服务:[服务地址查看](https://uk.dqzboy.xyz/)
<table>
<tr>
<td width="50%" align="center"><b> Alipay </b></td>
<td width="50%" align="center"><b> WeChat Pay </b></td>
</tr>
<tr>
<td width="50%" align="center"><img src="https://github.com/dqzboy/Deploy_K8sCluster/assets/42825450/223fd099-9433-468b-b490-f9807bdd2035?raw=true"></td>
<td width="50%" align="center"><img src="https://github.com/dqzboy/Deploy_K8sCluster/assets/42825450/9404460f-ea1b-446c-a0ae-6da96eb459e3?raw=true"></td>
</tr>
</table>
---
## 👨🏻‍💻 问题
#### 1、无法通过UI界面删除某一镜像的TAG
**已知问题:** 使用`registry`作为代理缓存时不支持删除
**issues** [#3853](https://github.com/distribution/distribution/issues/3853)
#### 2、搭建好了,但是国内拉取速度不理想
**已知问题:** 你的国外服务器到国内的网络线路不理想
**解决方案:**
- (1) 开启服务器BBR,优化网络性能(效果有限)
- (2) 更换对国内网络线路优化更好的服务器
#### 3、registry 镜像缓存多少时间,如何调整
**已知问题:** 默认缓存`168h`,也就是`7天`。修改配置文件`proxy`配置部分`ttl`调整缓存时间
#### 4、使用镜像加速拉取`hub`公共空间下的镜像时如何不添加`library`
- 此方案来自交流群里大佬提供,通过nginx实现并实测
```shell
location ^~ / {
if ($request_uri ~ ^/v2/([^/]+)/(manifests|blobs)/(.*)$) {
# 重写路径并添加 library/
rewrite ^/v2/(.*)$ /v2/library/$1 break;
}
proxy_pass http://127.0.0.1:51000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
}
```
#### 5、拉取镜像报错 `tls: failed to verify certificate: x509: certificate signed by unknown authority`
**已知问题:** 证书问题。表示证书是由一个未知的或不受信任的证书颁发机构(CA)签发的。
---
## 😺 其他
开源不易,若你参考此项目或基于此项目修改可否麻烦在你的项目文档中标识此项目?谢谢你!
## ❤ 鸣谢
感谢以下项目的开源的付出:
[CNCF Distribution](https://distribution.github.io/distribution/)
[docker-registry-browser](https://github.com/klausmeyer/docker-registry-browser)