当前位置:首页 > 群晖专栏 > 技术教程 > 正文内容

Docker Compose 部署配置和使用 Registry 私有镜像仓库

admin3年前 (2021-06-25)技术教程390

前言

早前本站介绍过使用docker官方registry来部署加速镜像仓库私有镜像仓库的教程.近期由于需要使用gcr.io谷歌的镜像仓库,发现国内无法访问,于是就着手在公网搭建自己的私有镜像仓库方便使用,同时配置HTTPS账号密码确保安全.

本文将安装部署,Push,Pull,查询,管理和删除镜像等基础功能分享给大家.

部署

安装服务端


本文以部署至公网,开启账号密码,并配置域名反向代理为例.
命令参数过多,为方便配置参数,建议使用docker compose部署.


创建 htpasswd 账号密码

启动一个一次性容器用于创建账号密码.密码文件路径以/root/registry/htpasswd为例,账号密码以admin12345678为例.

docker run --rm --entrypoint \
    htpasswd httpd:2 -Bbn \
    admin 12345678 > /root/registry/htpasswd

docker-compose.yml


version: "3"services:
  registry:
    image: registry:2
    container_name: registry
    volumes:
      # - ./config.yml:/etc/docker/registry/config.yml
      - ./htpasswd:/auth/htpasswd
      - ./registry:/var/lib/registry
      - /etc/localtime:/etc/localtime
    ports:
      - 5000:5000
    environment:
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
      - REGISTRY_STORAGE_DELETE_ENABLED=true
    networks:
      - registry
    restart: alwaysnetworks:
  registry:

启动

docker-compose up -d

成功启动后私有镜像仓库内网地址为: 192.168.1.5:5000

配置域名

由于registry在公网访问默认需使用HTTPS协议,博主使用nginx配置反向代理和证书.具体配置文件参考如下:

upstream registry { 
    server 172.17.0.1:5000;
}

server {    
listen 80;    
server_name  registry.yourdomain.com;    
return 301 https://registry.yourdomain.com$request_uri;
}

server {    
listen 443 ssl;    
server_name  registry.yourdomain.com;    
gzip on;    

    ssl_certificate /your_ssl_path/registry.yourdomain.com.crt;    
    ssl_certificate_key /your_ssl_path/registry.yourdomain.com.key;    
    
    location / {        
    proxy_redirect off;        
    proxy_pass http://registry;        
    
    proxy_set_header  Host                $http_host;        
    proxy_set_header  X-Real-IP           $remote_addr;        
    proxy_set_header  X-Forwarded-Ssl     on;        
    proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;        
    proxy_set_header  X-Forwarded-Proto   $scheme;        
    proxy_set_header  X-Frame-Options     SAMEORIGIN;     
       
    client_max_body_size        100m;        
    client_body_buffer_size     128k;   
         
    proxy_buffer_size           4k;        
    proxy_buffers               4 32k;        
    proxy_busy_buffers_size     64k;        
    proxy_temp_file_write_size  64k;
    }
}

使用

登录

docker login registry.yourdomain.com
# 使用上文创建的账号密码 admin 12345678 登录

登出

docker logout registry.yourdomain.com

Push

将现有镜像tag为私有仓库镜像名

docker images
# 获取现有镜像的 IMAGE ID
docker tag 102816b1ee7d registry.yourdomain.com/mysql:8.0.13

Push 至私有镜像仓库

docker push registry.yourdomain.com/mysql:8.0.13

Pull

docker pull registry.yourdomain.com/mysql:8.0.13

管理

查看镜像仓库清单

curl -u admin:12345678 -X GET https://registry.yourdomain.com/v2/_catalog

查看镜像 tag 清单

curl -u admin:12345678 -X GET https://registry.yourdomain.com/v2/mysql/tags/list

删除镜像

确保docker-compose.yml环境变量中开启REGISTRY_STORAGE_DELETE_ENABLED=true

获取镜像 digest hash

curl -u admin:12345678 --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET https://registry.yourdomain.com/v2/mysql/manifests/8.0.13
# 获取 digest hash 如下
sha256:45a2a291xxx223123fc03d9be551e362b460exxs56787736919baa

删除镜像清单

curl -u admin:12345678 -I -X DELETE https://registry.yourdomain.com/v2/mysql/manifests/sha256:45a2a291xxx223123fc03d9be551e362b460exxs56787736919baa

清理磁盘空间

docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

手动删除目录

完成上述操作后还可以删除存储目录中的空目录文件,如不删除依旧可以被上述查看镜像仓库的命令查询到结果.
依照上文示例,挂载存储目录路径如下:

./registry/docker/registry/v2/repositories

结语

更多信息请参考官方文档

群晖专栏 

 

本站提供免费和付费的技术支持.你可以通过留言,邮件,QQ的方式来进行技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面


扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=125

标签: 技术教程
分享给朋友:

相关文章

梅林固件路由器配置国际域名DDNS动态域名解析教程

梅林固件路由器配置国际域名DDNS动态域名解析教程

前言本文将详解如何使用梅林固件路由器来实现DDNS动态域名解析.梅林固件路由器软件中心里有aliddns和DDnspod两款DDNS软件,分别是阿里云和腾讯云的DDNS服务.两款软件的功能基本相同,可以根据域名所在的服务商来选择用哪一款.如...

macOS使用Github上传项目时忽略及删除.DS_Store文件教程

macOS使用Github上传项目时忽略及删除.DS_Store文件教程

前言最近又在折腾和研究Docker和GitHub,虽然不懂写代码,但靠着搜索引擎慢慢摸索,觉得很有意思,于是在Mac上安装了官方GitHub Desktop.使用过程中发现上传代码或者项目时,会把manOS的系统文件.DS_Store文件上...

TinyPNG批量压缩图片Python脚本使用教程

TinyPNG批量压缩图片Python脚本使用教程

前言TinyPNG是一个免费的在线批量压缩图片服务,但Web端有单次20张和单个文件5M的限制.同时TinyPNG官方提供了API,API限制每月500张,完全满足个人使用.本文将介绍使用Python脚本来批量压缩图片.推荐使用场景大部分博...

Microsoft 365 开发者计划 E5 订阅全自动调用 API 续订

Microsoft 365 开发者计划 E5 订阅全自动调用 API 续订

前言本文将介绍通过生成 Microsoft API 的 ID 和 Key 使用 Rclone 获取 Refresh Token , 在利用 Github Action 来无服务器定时调用 API 使得 E5 订阅续订.获取 ID 和 密码应...

Github Action 部署 acme.sh 全自动批量签发多域名证书教程

Github Action 部署 acme.sh 全自动批量签发多域名证书教程

前言在折腾运维技术的这条路上,必不可少的就是管理多服务器和多域名,而同时维护这么多有效期仅三个月的免费泛域名证书无疑是一项繁琐的工作.经过一段时间的学习和研究,最终决定使用 GitHub Action 来全自动签发多域名证书,并设置定时触发...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。