Docker Registry 部署镜像私有仓库及鉴权认证

简介: 了解什么是 Docker Registry,常用的 Docker Registry 的鉴权和认证机制有哪些,不同的认证机制在配置文件中的参数有所不同。可以根据实际需求选择相应的认证机制并进行配置。

一、Docker Registry 是什么?

Docker Registry 是一个无状态、高度可扩展的服务器端应用程序,用于存储和分发 Docker 镜像。Docker Registry 是基于 Apache 许可证开源的,它是目前应用最广泛的镜像仓库管理程序,所有的源码在 github 上开源,如果感兴趣的话可以 clone 相关的代码进行深层次的学习。

为什么需要使用 Docker Registry?

  1. 需要对镜像进行严格统一管理;
  2. 需要拥有镜像的分发渠道;
  3. 并且将镜像管理和分发集成到内部统一开发流程中。

例如搭建内部 CI 平台,自动构建镜像、存储镜像和分发镜像,实现一键构建,打通从开发、测试环境到生产环境。

e3ea8f25ec34df10572cd4dceea176e3.png

二、Docker Registry 部署私有仓库

部署 Docker Registry 之前先安装 Docker,我的环境是 CentOS,直接使用以下命令:

[root@node1 docker]# yum update
[root@node1 docker]# yum install docker
[root@node1 docker]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

你可以创建专门的 docker 用户进行操作,更加安全,刚创建的用户不在 sudo user 里面,可以通过以下方式设置,这里为了方便,我使用了 root 用户。

chmod u+w /etc/sudoers
vim /etc/sudoers
//填入以下内容
docker ALL=(ALL) ALL

安装完毕以后使用以下命令查看 docker 运行状态:

[root@node1 docker]# sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-03-10 18:03:18 CST; 11s ago
     Docs: http://docs.docker.com
 Main PID: 47284 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─47284 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/li...
           └─47290 /usr/bin/docker-containerd-current -l unix:///var/run/dock...

Mar 10 18:03:17 node1 dockerd-current[47284]: time="2023-03-10T18:03:17.8383..."
Mar 10 18:03:17 node1 dockerd-current[47284]: time="2023-03-10T18:03:17.8422..."
Mar 10 18:03:17 node1 dockerd-current[47284]: time="2023-03-10T18:03:17.8484..."
Mar 10 18:03:17 node1 dockerd-current[47284]: time="2023-03-10T18:03:17.8776..."
Mar 10 18:03:18 node1 dockerd-current[47284]: time="2023-03-10T18:03:18.0211..."
Mar 10 18:03:18 node1 dockerd-current[47284]: time="2023-03-10T18:03:18.0656..."
Mar 10 18:03:18 node1 dockerd-current[47284]: time="2023-03-10T18:03:18.0906..."
Mar 10 18:03:18 node1 dockerd-current[47284]: time="2023-03-10T18:03:18.0917...1
Mar 10 18:03:18 node1 dockerd-current[47284]: time="2023-03-10T18:03:18.1144..."
Mar 10 18:03:18 node1 systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

以上可以看到状态是 active

要部署一个 Docker Registry,如果使用容器部署,且使用默认配置,则最简单的使用以下命令就可以将 Docker Registry 运行起来:

docker run -d -p 5000:5000 --name registry registry:2

要使用 Docker Registry 部署一个镜像私有仓库,需要遵循以下步骤:

2.1、Docker Registry 安装

可以使用以下命令从 Docker Hub 上下载 Docker Registry 的官方镜像:

docker pull registry:2

2.2、Docker Registry 配置

Docker Registry 的配置文件使用 YAML 格式编写,可以通过修改配置文件来启用鉴权和认证机制,以及配置存储方式等。

以下是一个示例配置文件:

version: 0.1
log:
  accesslog: /var/log/registry/access.log
  errorlog: /var/log/registry/error.log
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: 5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  htpasswd:
    realm: registry
    path: /auth/htpasswd

在上面的配置文件中,storage.filesystem.rootdirectory 参数指定了存储镜像的目录,http.addr 参数指定了 Docker Registry 监听的端口号,auth.htpasswd.realm 参数指定了认证域的名称,auth.htpasswd.path 参数指定了存储用户名和密码的文件路径。

2.3、启动 Docker Registry

可以使用以下命令启动 Docker Registry

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /path/to/registry:/var/lib/registry \
  -v /path/to/config.yml:/etc/docker/registry/config.yml \
  registry:2

其中,-p 参数指定了 Docker Registry 监听的端口号,-v 参数指定了存储镜像和配置文件的目录,registry:2 参数指定了使用的 Docker Registry 镜像版本。

2.4、Docker 客户端配置

为了使用刚刚部署的镜像私有仓库,需要在 Docker 客户端中配置 Docker Registry 的地址和认证信息。可以使用以下命令配置 Docker 客户端:

docker login registry.example.com:5000

其中,registry.example.com:5000 参数指定了 Docker Registry 的地址和端口号。

2.5、向 Docker Registry 上传和下载镜像

可以使用以下命令上传和下载镜像:

docker tag image-name registry.example.com:5000/image-name
docker push registry.example.com:5000/image-name
docker pull registry.example.com:5000/image-name

其中,image-name 参数指定了要上传和下载的镜像名称。注意,在上传和下载镜像时,需要使用 Docker Registry 的完整地址和端口号。

以上就是使用 Docker Registry 部署镜像私有仓库的步骤,可以根据实际需求进行配置和使用。

三、Docker Registry 鉴权和认证

Docker Registry 是一个中央存储和分发 Docker 镜像的服务器,其支持多种鉴权和认证机制,包括基本认证、Bearer Token 认证、AWS 认证和 LDAP 认证等。下面我们详细介绍其中的几种常用认证和鉴权机制,并给出相应的代码配置示例。

3.1、基本认证

基本认证是一种简单的 HTTP 认证机制,它通过在 HTTP 头中发送 Base64 编码的用户名和密码来验证用户的身份。Docker Registry 支持基本认证,可以通过配置文件来启用。以下是一个示例配置文件:

version: 0.1
log:
  accesslog: /var/log/registry/access.log
  errorlog: /var/log/registry/error.log
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: 5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  htpasswd:
    realm: registry
    path: /auth/htpasswd

在上面的配置文件中,auth.htpasswd.realm 参数表示基本认证领域的名称,auth.htpasswd.path 参数表示包含用户名和密码的文件路径。我们可以使用 htpasswd 命令来创建用户名和密码文件,例如:

$ htpasswd -Bbn user1 password1 > /path/to/htpasswd

3.2、Bearer Token 认证

Bearer Token 认证是一种基于 OAuth2 协议的认证机制,它使用访问令牌来验证用户的身份。Docker Registry 支持 Bearer Token 认证,可以通过配置文件来启用。以下是一个示例配置文件:

version: 0.1
log:
  accesslog: /var/log/registry/access.log
  errorlog: /var/log/registry/error.log
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: 5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  token:
    realm: registry
    service: registry
    issuer: registry
    rootcertbundle: /path/to/root.crt

在上面的配置文件中,auth.token.realm 参数表示 Bearer Token 认证领域的名称,auth.token.serviceauth.token.issuer 参数表示服务名称和颁发者名称。auth.token.rootcertbundle 参数表示根证书的路径,这里可以使用自签名的证书或 CA 签名的证书。

3.3、AWS 认证

AWS 认证是一种基于 AWS Identity and Access Management(IAM) 的认证机制,它使用AWS凭证来验证用户的身份。Docker Registry 支持 AWS 认证,可以通过配置文件来启用。以下是一个示例配置文件:

version: 0.1
log:
  accesslog: /var/log/registry/access.log
  errorlog: /var/log/registry/error.log
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: 5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  s3:
    access

在上面的配置文件中,auth.s3.accesskeyauth.s3.secretkey 参数表示 AWS 凭证的访问密钥和私有密钥,auth.s3.region 参数表示 AWS S3 存储桶的区域,auth.s3.bucket 参数表示存储镜像的 S3 存储桶的名称。

3.4、LDAP 认证

LDAP 认证是一种基于 Lightweight Directory Access Protocol(LDAP) 的认证机制,它使用 LDAP 服务器中的用户信息来验证用户的身份。Docker Registry 支持 LDAP 认证,可以通过配置文件来启用。以下是一个示例配置文件:

version: 0.1
log:
  accesslog: /var/log/registry/access.log
  errorlog: /var/log/registry/error.log
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: 5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  ldap:
    endpoint: ldap://ldap.example.com:389
    binddn: cn=admin,dc=example,dc=com
    bindpassword: password
    searchbase: ou=people,dc=example,dc=com
    searchfilter: (uid=%s)

在上面的配置文件中,auth.ldap.endpoint 参数表示 LDAP 服务器的地址和端口号,auth.ldap.binddnauth.ldap.bindpassword 参数表示 LDAP 管理员的身份信息,auth.ldap.searchbase 参数表示用户信息存储在 LDAP 服务器上的基础目录,auth.ldap.searchfilter 参数表示查询用户信息的过滤器。

以上是常用的几种 Docker Registry 的鉴权和认证机制,不同的认证机制在配置文件中的参数有所不同。可以根据实际需求选择相应的认证机制并进行配置。

转载声明

目录
相关文章
kde
|
2月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
kde
772 4
|
3月前
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
357 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
3月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
280 99
|
2月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
116 5
|
3月前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
229 13
docker 部署 sftp
|
3月前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
1066 6
kde
|
2月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
649 7
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
351 5
kde
|
2月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
kde
1689 8