Docker Registry简介
Docker Registry是一个开源的镜像仓库工具,用于存储和分发Docker镜像。它是Docker生态系统中的核心组件之一,提供了镜像的推送(push)、拉取(pull)和管理功能。
主要特性:
1、开源免费:Apache 2.0许可证
2、轻量级:专注于核心镜像存储和分发功能
3、可扩展:支持多种存储后端(S3、Azure、Swift等)
4、安全:支持TLS和基本认证
5、API兼容:符合Docker Registry API规范
部署方式:
bash
# 快速启动一个本地Registry
docker run -d -p 5000:5000 --name registry registry:2
# 带认证的Registry
docker run -d -p 5000:5000 --name registry \
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2
环境版本信息
Docker:18.09.9,操作系统为银河麒麟V10sp1
创建仓库
bash
mkdir -p /data/docker/registry
docker run -d --name registry -p 5555:5000 -v /data/docker/registry:/var/lib/registry --restart always registry:2
修改配置,支持通过接口的方式删除仓库中的镜像,如果禁止删除镜像,这一步就忽略:
bash
[root@test /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d31d022b1795 registry:2 "/entrypoint.sh /etc..." 2 hours ago Up 13 minutes 0.0.0.0:5555->5000/tcp registry
# 进入registry镜像
[root@test /]# docker exec -it d31d022b1795 sh
/ # vi /etc/docker/registry/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
# 以上delete和其下一行共两行为新增的内容
创建仓库管理界面
bash
docker run -d -p 8809:80 --name registry-ui-delete \
-e REGISTRY_URL=http://182.168.2.100:8810/docker/ \
-e SINGLE_REGISTRY=true \
-e DELETE_IMAGES=true \
-e SHOW_CATALOG_NB_TAGS=true \
joxit/docker-registry-ui:latest
配置Nginx代理
bash
server {
listen 8810;
server_name localhost;
server_tokens off;
location / {
proxy_pass http://182.168.2.100:8809/;
index index.html index.htm;
}
# register的对外接口,用于给UI提供接口方法获取tag等
location /docker/ {
proxy_pass http://182.168.2.100:5555/;
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-Forwarded-Proto $scheme;
}
}
放开端口访问
bash
firewall-cmd --zone=public --add-port=5555/tcp --permanent && firewall-cmd --reload
firewall-cmd --zone=public --add-port=8810/tcp --permanent && firewall-cmd --reload
测试访问
访问网址http://182.168.2.100:8810即可