轻量级开源 docker私服管理工具部署实践

不知道使用docker的大家是否遇到与我一样的问题,想自己做个docker镜像私服但是:

1.官方的registry只支持命令行与api交互,做镜像管理、权限管理使用成本比较高
2.比较成熟的Harbor,个人感觉设计的太重了,得起一大堆组件,看了一眼就劝退了**
在这里插入图片描述

我就想要个像maven私服 nexus这种简单的玩意!!!
然后像往常一样 打开github 搜索,我相信不止我一个有这种想法,果然找到一个看着挺靠谱的开源项目
zebox/registry-admin : https://github.com/zebox/registry-admin/tree/master/app/server
github地址
首先要感谢这位作者的分享,第一眼看到ReadMe的截图,我就觉得这是我要找的东西。、

在这里插入图片描述
看了一下介绍,只要通过简单的配置,然后通过docker-compose启动就行了,一共就2个镜像
1.官方registry:2
2.registry-admin:master
很简单是不是,功能支持:用户管理、权限管理、镜像检索、查看、管理 足够满足我们日常使用了。

接下来就是看着官方文档一路部署,我这里再详细介绍一下我的实践过程,官方文档有些细节有遗漏,需要靠自己解决。

我所使用的模式就是基于http basic-auth的方式,做简单权限控制,这种模式下,可以支持管理到哪些账号允许访问私服,但不能细致到对于具体镜像的权限控制,因此参考:https://github.com/zebox/registry-admin/tree/master/_examples/basic_auth

ps:作者有提醒要注意把运行registry-admin需要的相关文件授权给你运行docker容器的账号

https://github.com/zebox/registry-admin/tree/master/app/server 

在这里插入图片描述
这里,首先看到的是docker-compose.yml 这就是用于启动docker服务的docker-compose配置文件,docker-compose具体就不展开了
registry-admin一共有4个关键配置文件
1.docker-compose.yml #docker容器启动配置文件
2.basic-ra-config.yml #registry-admin运行配置文件
3.registry-config.yml #registry运行配置文件
4…htpasswd #basic-auth 加密账户文件

其中 basic-ra-config.yml 、registry-config.yml 在/config目录中,htpasswd 需要自己创建,我一个一个说

1.docker-compose.yml 容器启动配置文件

打开文件可以看到内容,这里有些地方需要调整,我进行了标注

version: '3'   #这里要由2.1 改成 3
services:
  registry-admin:
    container_name: registry-admin #我补充的固定容器名
    restart: unless-stopped
    image: zebox/registry-admin:master
    ports:
      - 8080:80 #这里的宿主机端口8080可以根据需要修改
    environment:
      - RA_CONFIG_FILE=/app/config/basic-ra-config.yml  #这是registry-admin 运行关键配置文件
    #容器目录与素宿主机目录的映射
    volumes:
      - ./certs:/certs
      - ./config:/app/config
      - ./access:/app/access
      - ./data:/app/data
      - ./log:/app/log #我添加了一个日志文件存储目录
    #原著没有,我补充的指定容器加入mynetwork自定网络,并且固定ip,ip可以调整,单必须跟自定义网络配置的网段适配
    networks:
      mynetwork:
        ipv4_address: 172.20.0.3

  registry:
    container_name: registry  #我补充的固定容器名
    restart: unless-stopped
    image: registry:2
    ports:
      - 50554:5000
    volumes:
      - ./data:/var/lib/registry
      - ./certs:/certs
      - ./config/registry-config.yml:/etc/docker/registry/config.yml    #这是registry运行关键配置文件
      - ./access:/etc/docker/registry/access
    depends_on:
      - registry-admin
     #原著没有,我补充的指定容器加入mynetwork自定网络,并且固定ip,ip可以调整,单必须跟自定义网络配置的网段适配
    networks:
      mynetwork:
        ipv4_address: 172.20.0.3
        
#原著没有,我补充的自定义网络配置
networks:
  mynetwork: #通过 docker network create --subnet=172.20.0.0/24 mynetwork 
    external: true

这里我补充了创建自定义网络与设置2个容器加入网络,并固定ip(这步非常关键)
主要目的是,加入同一个自定义网络的容器,网络是相互联通的,并且更关键的是可以通过http://container_name/直接访问目标容器提供的http url,简单点说类似于配置hosts,这样就不需要在basic-ra-config.yml、registry-config.yml 的服务配置中硬编码ip地址,固定ip是因为我不想让容器ip来回跳,方便以后管理。

2.basic-ra-config.yml

hostname: 127.0.0.1

registry:
  host: http://registry #按照我刚才做的自定义网络配置,在容器正好启动后,这个url才可以访问
  port: 5000
  auth_type: basic
  htpasswd: /app/access/.htpasswd #这个文件需要用apache2-utils 生成
  login: admin
  password: super-secret # 这个是管理员默认密码,可以修改,但同步要修改registry-config.yml中对应的配置

#我添加的关于日志配置,还有其他配置,可以自行查看项目官网
logger:
  enabled: true
  filename: /app/log/access.log
  max_size: 20M
  max-backups: 3
  
store:
  type: embed
  admin_password: super-secret # 这个是registry-admin内嵌数据库的密码,可以修改,不一定非要跟上面保持一致
  embed:
    path: /app/data/store.db

3.registry-config.yml

version: 0.1

log:
  accesslog:
    disabled: false
  level: info #我将debug 改成 info
  formatter: text
  fields:
    service: registry

storage:
  filesystem:
    rootdirectory: /var/lib/registry
    maxthreads: 100
  delete:
    enabled: true

http:
  addr: ":5000"
  net: tcp

auth:
  htpasswd:
    realm: basic-realm
    path: /etc/docker/registry/access/.htpasswd #这个文件跟basic-ra-config.yml 使用同一个文件即可

notifications:
  events:
    includereferences: true
  endpoints:
    - name: ra-listener
      disabled: false
      url: http://registry-admin/api/v1/registry/events  #按照我刚才做的自定义网络配置,在容器正好启动后,这个url才可以访问
      headers:
        # 'admin:super-secret' base64 encode string 如果改了basic-ra-config.yml中admin的默认密码,这里需要将"admin:${新密码}"重新生成并进行修改配置,
        Authorization: [ Basic YWRtaW46c3VwZXItc2VjcmV0] 
      timeout: 1s
      threshold: 5
      backoff: 3s
      ignoredmediatypes:
        - application/octet-stream
      ignore:
        mediatypes:
          - application/octet-stream

4.htpasswd

#安装Apache的htpasswd工具 生成账号配置文件
sudo apt-get install apache2-utils

#生成文件
htpasswd -Bc /path/to/htpasswd $username $password #可以随便先初始化一个账号

部署过程,创建目录结构如下
/registry-admin 该目录下存放 docker-compose.yml
/certs
/config 该目录下存放 basic-ra-config.yml 、registry-config.yml
/access 在该目录下生成 .htpasswd文件
/data
/log

按照我文中堆配置文件的修改,对配置文件进行调整
通过chown -R 将registry-admin以及子目录与文件,都授权给运行docker的用户

启动服务

**
进入到/registry-admin中,运行 docker-compose -p registry-admin -f ./docker-compose.yml. up -d
-p 是为了指定一个项目名称,个人习惯

配置里已经指定了自启动,以后只要docker主进程启动,这2服务就会启动

停止服务并卸载容器

docker-compose -p registry-admin -f ./docker-compose.yml. down

一切正常的话,通过宿主机的ip:8080(根据自己配置的端口来) 访问,可以打开私服登录页面
在这里插入图片描述
输入之前配置的admin 密码可以登录
在这里插入图片描述
登录成功后,点击“Repositories” 可以查看,管理镜像
如果显示

可以点击SYNC手动同步

一般来说 Registry是通过事件触发(push之类的)上报数据给registry-admin,同时也支持registry-admin主动同步
在这里插入图片描述
如果遇到什么问题,可查看日志
registry-admin的日志就在之前创建的log目录下面
registry的日志在 /var/lib/docker/${registry的 container_id}/下

更细致的使用功能,大家可以自行探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windywolf301

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值