方法一:自动化部署,部署脚本:
# 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)"
方法二:Docker Compose 部署
1、创建账号密码【可选】(执行htpasswd命令时,请把username和password修改为你自己的账号和密码)
[root@proxy ~]# mkdir -p /data/registry-proxy && cd $_
[root@proxy registry-proxy]# htpasswd -Bbn username password > ./htpasswd
注意:配置账号密码:设置密码认证后,我们在进行拉取镜像时就需要先 docker login登入到我们的自建的代理镜像仓库,然后才可以拉取镜像
2、添加docker-compose.yml文件
- 如果你要开启Proxy认证的话请把
#- ./htpasswd:/auth/htpasswd
注释取消掉
[root@proxy ~]# mkdir -p /data/registry-proxy && cd $_
[root@proxy registry-proxy]# vi docker-compose.yaml
services:
## docker hub
dockerhub:
container_name: reg-docker-hub
image: dqzboy/registry:latest
restart: always
environment:
- OTEL_TRACES_EXPORTER=none
# 如果需要配置代理,请把下面的注释去掉,并配置你的代理地址
#- http_proxy=http://host:port
#- https_proxy=http://host:port
volumes:
- ./registry/data:/var/lib/registry
- ./registry-hub.yml:/etc/distribution/config.yml
#- ./htpasswd:/auth/htpasswd
ports:
- 51000:5000
networks:
- registry-net
## UI
registry-ui:
container_name: registry-ui
image: dqzboy/docker-registry-ui:latest
environment:
# UI所关联的REGISTRY容器服务地址
- DOCKER_REGISTRY_URL=http://reg-docker-hub:5000
# [必须]使用 openssl rand -hex 16 生成唯一值
- SECRET_KEY_BASE=9f18244a1e1179fa5aa4a06a335d01b2
# 启用Image TAG 的删除按钮
- ENABLE_DELETE_IMAGES=true
- NO_SSL_VERIFICATION=true
restart: always
ports:
- 50000:8080
networks:
- registry-net
networks:
registry-net:
3、添加config.yml文件
注意:每个容器挂载对原文链接:https://www.dqzboy.com应的config.yml,这里名称需要与上面compose.yml文件定义的挂载的名称保持一致(例如上面挂载的配配置文件名称为docker-hub.yml);下面只是其中一个示例配置,其他的配置也一样,只需要更改 remoteurl 代理的地址即可!
如果你上面开启了密码认证,那么下面配置中auth块的内容需要把注释取消掉!!!
[root@proxy registry-proxy]# vim docker-hub.yml
version: 0.1
log:
fields:
service: registry
storage:
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
cache:
blobdescriptor: inmemory
blobdescriptorsize: 10000
maintenance:
uploadpurging:
enabled: true
age: 168h
interval: 24h
dryrun: false
readonly:
enabled: false
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
Access-Control-Max-Age: [1728000]
Access-Control-Allow-Credentials: [true]
Access-Control-Expose-Headers: ['Docker-Content-Digest']
#auth:
# htpasswd:
# realm: basic-realm
# path: /auth/htpasswd
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
username:
password:
ttl: 168h
4、启动容器服务
[root@proxy registry-proxy]# docker compose up -d
# 检查启动容器状态
[root@proxy registry-proxy]# docker ps
5、配置Nginx反代
[root@proxy ~]# cd /etc/nginx/conf.d/
[root@proxy conf.d]# vim registry-proxy.conf
## registry-ui
server {
listen 80;
listen 443 ssl;
## 填写绑定证书的域名
server_name ui.your_domain_name;
## 证书文件名称(填写你证书存放的路径和名称)
ssl_certificate your_domain_name.crt;
## 私钥文件名称(填写你证书存放的路径和名称)
ssl_certificate_key your_domain_name.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_buffer_size 8k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
location / {
proxy_pass http://localhost:50000;
proxy_set_header Host $host;
proxy_set_header Origin $scheme://$host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on; # Optional
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
}
}
## docker hub
server {
listen 80;
listen 443 ssl;
## 填写绑定证书的域名
server_name hub.your_domain_name;
## 证书文件名称(填写你证书存放的路径和名称)
ssl_certificate your_domain_name.crt;
## 私钥文件名称(填写你证书存放的路径和名称)
ssl_certificate_key your_domain_name.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_buffer_size 8k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
location / {
proxy_pass http://localhost: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 X-Nginx-Proxy true;
proxy_buffering off;
proxy_redirect off;
}
}
# 重载Nginx配置
[root@proxy ~]# nginx -t
[root@proxy ~]# nginx -s reload
6、解析域名
- 将我们在Nginx配置的域名,在DNS服务商商进行解析,解析到部署镜像代理仓库的服务器上;
- 通过访问UI地址可以查看镜像仓库缓存的镜像;
- 通过使用对应的代理域名来下载我们之前无法下载的镜像。
7、使用镜像仓库代理
- 使用自建的 Registry 地址替换官方的 Registry 地址拉取镜像
## 源:nginx:latest
## 替换
docker pull hub.your_domain_name/library/nginx:latest
8、修改docker配置
- 在docker的
daemon.json
配置文件中添加上docker.io的代理域名,然后重启docker程序
[root@BJ-Cloud ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://hub.your_domain_name"],
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
#重启docker
systemctl restart docker
9、kubeadm配置镜像代理
如果你用 kubeadm 部署 Kubernetes 集群,可以在 kubeadm 配置文件中设置镜像地址为你的搭建的代理仓库的域名地址
~]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.25.1
......
imageRepository: gcr.your_domain_name/google-containers
registry-proxy配置文件下载:registry-proxy
转自:自建Docker镜像加速服务:加速与优化镜像管理 | 浅时光博客
- THE END -
最后修改:2024年10月23日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://lg5.top/1411.html