在开发和运维过程中,很多时候我们需要在自己的内网环境搭建Docker镜像仓库。今天就给大家分享如何在内网环境快速部署Registry仓库,它没有复杂的安全认证,占用资源也少,特别适合用在开发环境和边缘环境,搭配上registry-ui,操作起来更加方便直观。下面就详细讲讲具体的部署步骤。

一、准备工作

在开始部署之前,先给大家介绍一下要用到的几个关键部分。

(一)registry-ui的htpasswd文件

这个文件主要用来存储用户名和密码信息,通过加密的方式保存。在我们这个案例里,对应的用户名和密码是registry:ui,加密后的密码在文件里显示为:

registry:$2y$11$1bmuJLK8HrQl5ACS/WeqRuJLUArUZfUcP2R23asmozEpfN76.pCHy 

这里的加密字符串是按照特定算法生成的,保证了密码的安全性。

(二)registry-ui的config.yml配置文件

这个配置文件对整个仓库的运行起着关键作用,下面逐行给大家解释一下:

version: 0.1 log: fields: service: registry storage: delete: enabled: true cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff] Access-Control-Allow-Origin: ['*'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Allow-Headers: ['Authorization', 'Accept'] Access-Control-Max-Age: [1728000] Access-Control-Allow-Credentials: [true] Access-Control-Expose-Headers: ['Docker-Content-Digest'] auth: htpasswd: realm: basic-realm path: /etc/docker/registry/htpasswd 
  • version:配置文件的版本号,这里是0.1。
  • log:日志相关的配置,fields下的service设置为registry,表示日志是关于registry服务的。
  • storage:存储相关配置,delete开启后表示支持删除操作;cacheblobdescriptor设置为inmemory,意思是使用内存缓存来存储镜像描述;filesystemrootdirectory指定了存储镜像的根目录为/var/lib/registry
  • http:HTTP相关配置,addr指定了服务监听的地址和端口,这里是:5000;后面一系列headers配置主要是设置HTTP响应头,涉及到跨域访问、允许的请求方法、请求头、最大缓存时间等信息,Access-Control-Allow-Origin: ['*']表示允许所有来源的跨域请求 。
  • auth:认证相关配置,htpasswd指定了使用htpasswd方式进行认证,realm是认证领域,path指定了htpasswd文件的路径。

(三)docker-compose.yml文件

docker-compose.yml是用来定义和运行多个Docker容器的配置文件,具体内容如下:

version: '3' services: registry: image: registry:2 volumes: - ./registry-data:/var/lib/registry - ./config.yml:/etc/docker/registry/config.yml - ./htpasswd:/etc/docker/registry/htpasswd networks: - default ui: image: joxit/docker-registry-ui:latest ports: - 5000:80 environment: - REGISTRY_TITLE=My Private Docker Registry - NGINX_PROXY_PASS_URL=http://registry:5000 - SINGLE_REGISTRY=true depends_on: - registry networks: - default networks: default: external: name: nisec 
  • version:指定docker-compose的版本。
  • services:定义了两个服务,registryui
    • registry服务:使用registry:2镜像,通过volumes挂载了本地的registry-data目录到容器内的/var/lib/registry(用于存储镜像数据),挂载了本地的config.ymlhtpasswd文件到容器内对应的路径,让容器可以读取配置和认证信息;networks指定了该服务使用default网络。
    • ui服务:使用joxit/docker-registry-ui:latest镜像,将容器的80端口映射到本地的5000端口;通过environment设置了几个环境变量,REGISTRY_TITLE用于设置仓库的标题,NGINX_PROXY_PASS_URL指定了代理的后端地址,SINGLE_REGISTRY表示是否只使用单个仓库;depends_on表示该服务依赖于registry服务,会在registry服务启动后再启动;同样使用default网络。
  • networks:定义了default网络,并指定了外部网络名称为nisec

二、部署步骤

一切准备就绪后,就可以开始部署了。打开命令行工具,进入存放docker-compose.yml文件的目录,然后执行下面的命令:

docker-compose up -d 

这个命令会在后台启动registryui两个服务,-d参数表示以守护进程的方式运行,也就是在后台运行,不会占用当前命令行窗口。

三、访问与使用

部署完成后,就可以访问我们的镜像仓库了。在浏览器地址栏输入:

http://localhost:5000 

然后输入用户名registry,密码ui,就能登录到仓库界面了。登录后,你会看到界面上显示Repositories of My Private Docker Registry 0 images in 0 repositories,表示当前仓库还没有镜像,之后就可以往里面推送和管理自己的镜像啦。

通过以上步骤,我们就成功在私有化环境中部署了Registry镜像仓库,并且搭配了可视化的界面方便操作。希望这篇文章能帮助到正在进行相关部署的小伙伴,如果在部署过程中有任何问题,欢迎在评论区留言交流!