前言
之前在家里搭建k8s集群的時(shí)候雷激,每次拉鏡像都會花費(fèi)很長時(shí)間璧疗,于是想到是否能夠搭建一個registry的緩存服務(wù)器皆的,加快鏡像的拉取呢悲敷?搜索一番之后究恤,發(fā)現(xiàn)官方的registry已經(jīng)支持,可以很方便的進(jìn)行部署后德。
準(zhǔn)備
- 一臺服務(wù)器
部署
- 部署docker部宿。我的部署方式是基于docker進(jìn)行部署,所以首先需要在服務(wù)器上部署docker,部署方式參考官方
- 拉取官方registry鏡像:
docker pull registry
- 創(chuàng)建配置文件:
vim config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
- 啟動服務(wù):
docker run -d --name registry-proxy -v data_path:/var/lib/registry -v config_path:/etc/docker/registry/config.yml -p 5000:5000 registry
使用nginx反向代理你的緩存服務(wù)器
配置域名解析
由于我只是在家里使用理张,所以我在我的網(wǎng)關(guān)上配置一個dns解析赫蛇,這樣家里所有設(shè)備都能夠正常解析了,如果需要外網(wǎng)訪問的話雾叭,可以使用ddns配置解析悟耘,然后端口映射到nginx所在服務(wù)器
生成ssl證書(可選)
這里根據(jù)官方的教程,我們手動生成一個證書织狐,然后客戶端配置允許不安全即可暂幼。
$ mkdir -p certs
$ openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-addext "subjectAltName = DNS:myregistry.domain.com" \
-x509 -days 365 -out certs/domain.crt
添加nginx配置(使用https)
如果需要使用https的話,需要按照上面的步驟先生成證書移迫,然后添加以下nginx配置
upstream registry-proxy {
server 192.168.3.5:5000;
}
server {
listen 443 ssl;
server_name your_domain; # 注意修改這里的域名旺嬉,和下面的證書為上面生成的路徑
ssl_certificate /etc/nginx/conf.d/certs/domain.crt;
ssl_certificate_key /etc/nginx/conf.d/certs/domain.key;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
chunked_transfer_encoding on;
add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
location / {
auth_basic off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
proxy_pass http://registry-proxy;
}
location /_ping {
auth_basic off;
proxy_pass http://registry-proxy;
}
location /v2/_ping {
auth_basic off;
proxy_pass http://registry-proxy;
}
location /v2/_catalog {
auth_basic off;
proxy_pass http://registry-proxy;
}
}
添加nginx配置(使用http)
如果僅在局域網(wǎng)環(huán)境下使用,可以選擇使用http厨埋,添加如下nginx配置
upstream registry-proxy {
server 192.168.3.5:5000;
}
server {
listen 80;
server_name your_domain; # 注意修改這里的域名
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
chunked_transfer_encoding on;
add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
location / {
auth_basic off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
proxy_pass http://registry-proxy;
}
location /_ping {
auth_basic off;
proxy_pass http://registry-proxy;
}
location /v2/_ping {
auth_basic off;
proxy_pass http://registry-proxy;
}
location /v2/_catalog {
auth_basic off;
proxy_pass http://registry-proxy;
}
}
配置客戶端
由于我們使用的是自簽的證書(或者是http)邪媳,需要在客戶端配置信任,如果使用受信任的證書荡陷,比如使用lets encrypt的證書雨效,那么可以跳過配置中的insecure-registries項(xiàng)。
$ mkdir -p /etc/docker
$ vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://myregistrydomain.com"],
"insecure-registries" : ["https://myregistrydomain.com"]
}
保存之后亲善,重啟下客戶端的docker服務(wù):systemctl restart docker
使用
pull任意一個鏡像
檢查你的緩存服務(wù)器目錄下是否有對應(yīng)的鏡像设易。說明下逗柴,如果是類似mysql蛹头、nginx之類的鏡像,是存放在library目錄下戏溺,如果是其他如gitea/gitea渣蜗、mysql/mysql-server,則是單獨(dú)的文件夾