之前用hyper/docker-registry-web可视化管理Docker本地镜像仓库,但突然一次更新后发现启动不了了, 发现是兼容性问题。hyper/docker-registry-web 已多年未维护(GitHub 最后 commit 是 2017 年),在现代系统上越来越容易出兼容性问题。改用了新的joxit/docker-registry-ui,这个是用GO编写的WebUI,这个镜像小于20MB,启动快,内存存在约在10MB左右。废话不多说,开整。
一、创建目录
我们将所有数据都放到/home/registry目录下
mkdir /home/registry
cd /home/registry
mkdir auth conf data
- auth:验证目录,存放账号密码文件
- conf:配置文件目录
- data:仓库数据存放目录
二、生成 htpasswd 密码文件
# 安装 httpd-tools(CentOS/RHEL)
sudo yum install -y httpd-tools
# 或 Ubuntu/Debian
sudo apt-get install -y apache2-utils
# 创建密码
sudo htpasswd -Bbn username password >/home/registry/auth/htpasswd
# 添加其他账号
sudo htpasswd -Bb /home/registry/auth/htpasswd another_user another_password
# 设置权限
chmod 600 /home/registry/auth/htpasswd
三、编辑registry配置文件
为了方便添加修改账号,我们将部分registry配置直接放到配置文件中/home/registry/conf/registry.yml中
version: 0.1
log:
fields:
service: registry
storage:
delete: # 默认是不能删除的,添加删除支持
enabled: true
cache:
blobdescriptor: inmemory
filesystem: # 仓库文件存放目录
rootdirectory: /var/lib/registry
http:
addr: :5000
auth:
htpasswd: # 验证方式
realm: basic-realm
path: /etc/docker/registry/auth/htpasswd
四、配置docker-compose
创建 /home/registry/docker-compose.yml文件
version: '3'
services:
registry:
image: registry:latest
container_name: registry
restart: always
volumes:
- /home/registry/data:/var/lib/registry/docker/registry # 映射仓库目录
- /home/registry/auth:/etc/docker/registry/auth # 映射认证文件
- /home/registry/conf/registry.yml:/etc/docker/registry/config.yml:ro # 映射配置文件
networks:
- registry-net
registry-ui:
image: joxit/docker-registry-ui:latest
container_name: registry-ui
restart: always
ports:
- "8080:80"
environment:
NGINX_PROXY_PASS_URL: http://registry:5000 # 通过容器内Nginx转发
DELETE_IMAGES: "true" # 显示删除按钮
SINGLE_REGISTRY: "true"
depends_on:
- registry
networks:
- registry-net
networks:
registry-net:
driver: bridge
五、安装
# 进入docker-compose目录
cd /home/registry/
# 安装
docker-compose up -d
# 卸载
docker-compose down
六、配置Https反向代理
joxit/docker-registry-ui 本身不提供用户登录功能,它只是一个无状态的前端 + 内置 Nginx,所以我们在做反向代理的时候添加Basic Auth密码验证,这个密码文件和registry的可以共用同一个文件。
server {
listen 443 ssl ;
listen [::]:443 ssl ;
server_name yourdomain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# 添加这两行密码验证
auth_basic "Registry UI Login";
auth_basic_user_file /home/registry/auth/htpasswd;
location / {
proxy_pass http://localhost:8080;
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;
}
}
七、登录测试
输入域名,账号密码登录

评论区