概要
目标
因为实验需要一个内部私有仓库,并且有图形界面。但资源有限,不适宜部署harbor。所以需要部署一个轻量级的harbor替代方案,要求有基本认证,图形化界面。Docker Registry
支持的htpasswd就能满足基本认证需求, 而后,网上找了一个Docker Registry User Interface
就能基本实现图形界面的需求。
环境要求
- docker 已经部署
- 安装了docker-compose
- 网络可以访问dockerhub或者镜像
部署流程
创建目录
cd <工作目录>
mkdir -pv registry
cd <工作目录>/registry
mkdir -pv data # 存放镜像文件的目录
mkdir -pv auth # 存放认证文件的目录
设置关键变量
cd <工作目录>/registry
vim .env_file
# htpasswd认证用户名和密码
HTPSD_USERNAME: register # 用户名
HTPSD_PASSWD: mypasswd # 密码
# docker registry 的配置
REGISTRY_AUTH: htpasswd # 认证方式是htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data # 存放镜像的目录
REGISTRY_STORAGE_DELETE_ENABLED: true # 允许用户删除镜像
# Docker Registry User Interface图形化的参数
SINGLE_REGISTRY: true
REGISTRY_TITLE: 我的镜像仓库
DELETE_IMAGES: true # 允许删除镜像
SHOW_CONTENT_DIGEST: true # 在 Docker 标签列表中显示/隐藏内容摘要
NGINX_PROXY_PASS_URL: http://registry:5000 # 仓库地址
SHOW_CATALOG_NB_TAGS: true # 在目录页面显示每个镜像的标签数量,并隐藏 0 标签的镜像。
CATALOG_MIN_BRANCHES: 1 # 设置默认展开的最低仓库/命名空间数量
CATALOG_MAX_BRANCHES: 1 # 设置默认展开的最大仓库/命名空间数量
TAGLIST_PAGE_SIZE: 100 # 设置单页显示的标签数量。
REGISTRY_SECURED: false # 默认情况下,UI 会在每个请求中检查仓库是否安全(控制台中会看到 401 响应)。如果仓库使用基本认证,请设置为 true,可减少仓库请求的数量。(默认值:false)。
CATALOG_ELEMENTS_LIMIT: 1000 # 限制目录页面中的元素数量
创建docker-compose的配置文件
cd <工作目录>/registry
vim docker-compose.yaml
version: '3.8'
services:
## 容器启动阶段使用 htpasswd 创建认证文件。
htpasswd_init:
image: httpd:latest # Use httpd, which includes htpasswd utility
command:
- bash
- -c
- if [ ! -f /auth/registry.passwd ];then htpasswd -bBc /auth/registry.passwd "$$HTPSD_USERNAME" "$$HTPSD_PASSWD" ;fi
volumes:
- ./auth:/auth # Mounts a shared directory to store the htpasswd file
restart: "no" # Ensures it only runs once at startup
env_file:
- ./.env_file
# docker-registry, docker官方仓库
registry:
image: registry:2
restart: always
env_file:
- ./.env_file
volumes:
- ./data:/data
- ./auth:/auth
networks:
- registrynet
depends_on:
- htpasswd_init # 等待htpasswd_init创建完成密码文件再运行。
# 图形化界面的容器
registry-ui:
image: joxit/docker-registry-ui:main
restart: always
ports:
- "9180:80" # 对外的端口,可以修改为你实际需要的端口。
env_file:
- ./.env_file
container_name: registry-ui
networks:
- registrynet
networks:
registrynet:
driver: bridge
部署
cd <工作目录>/registry
docker-compose up -d
docker-compose ps
docker客户端使用
登录
docker login <ip>:9180 -u register -p mypasswd
推送测试
docker pull alpine
docker tag alpine:3.20.2 <ip>:9180/baseimg/alpine:3.20.2 # 修改成 “仓库的地址:/组名/镜像名:版本号"
docker push <ip>:9180/baseimg/alpine:3.20.2
拉取测试
# 删除测试镜像
docker rmi <ip>:9180/baseimg/alpine:3.20.2
docker images |grep alpine:3.20.2
# 重新拉取镜像
docker pull <ip>:9180/baseimg/alpine:3.20.2
docker images |grep alpine:3.20.2
图形界面
访问:
http://127.0.0.1:9180/
1730607262302.png
查看镜像详情
1730607146356.png
1730607160338.png
删除镜像测试
1730607361143.png