Docker私有化环境中如何部署Registry镜像仓库
在开发和运维过程中,很多时候我们需要在自己的内网环境搭建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
开启后表示支持删除操作;cache
的blobdescriptor
设置为inmemory
,意思是使用内存缓存来存储镜像描述;filesystem
的rootdirectory
指定了存储镜像的根目录为/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
:定义了两个服务,registry
和ui
。registry
服务:使用registry:2
镜像,通过volumes
挂载了本地的registry-data
目录到容器内的/var/lib/registry
(用于存储镜像数据),挂载了本地的config.yml
和htpasswd
文件到容器内对应的路径,让容器可以读取配置和认证信息;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
这个命令会在后台启动registry
和ui
两个服务,-d
参数表示以守护进程的方式运行,也就是在后台运行,不会占用当前命令行窗口。
三、访问与使用
部署完成后,就可以访问我们的镜像仓库了。在浏览器地址栏输入:
http://localhost:5000
然后输入用户名registry
,密码ui
,就能登录到仓库界面了。登录后,你会看到界面上显示Repositories of My Private Docker Registry 0 images in 0 repositories
,表示当前仓库还没有镜像,之后就可以往里面推送和管理自己的镜像啦。
通过以上步骤,我们就成功在私有化环境中部署了Registry镜像仓库,并且搭配了可视化的界面方便操作。希望这篇文章能帮助到正在进行相关部署的小伙伴,如果在部署过程中有任何问题,欢迎在评论区留言交流!