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 的鉴权和认证机制,不同的认证机制在配置文件中的参数有所不同。可以根据实际需求选择相应的认证机制并进行配置。

转载声明

目录
相关文章
|
3天前
|
Cloud Native 测试技术 数据安全/隐私保护
云原生之使用Docker部署Teedy轻量级文档管理系统
【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
16 1
|
5天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
18小时前
|
Cloud Native 安全 Linux
【云原生之Docker实战】使用Docker部署mBlog微博系统
【5月更文挑战第10天】使用Docker部署mBlog微博系统
9 2
|
1天前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
13 2
如何删除 Docker 镜像、容器和卷?
|
1天前
|
JavaScript 前端开发 测试技术
Docker环境下部署Ghost开源内容管理系统
【5月更文挑战第9天】Docker环境下部署Ghost开源内容管理系统
7 0
|
3天前
|
Cloud Native 测试技术 Linux
云原生之使用Docker部署homer静态主页
【5月更文挑战第7天】云原生之使用Docker部署homer静态主页
10 0
|
4天前
|
监控 Cloud Native 测试技术
云原生之使用Docker部署ServerBee服务器监控工具
【5月更文挑战第6天】云原生之使用Docker部署ServerBee服务器监控工具
12 1
|
5天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
5天前
|
前端开发 应用服务中间件 nginx
前后端分离项目Docker部署指南(下)
前后端分离项目Docker部署指南(下)
|
5天前
|
NoSQL 关系型数据库 网络安全
前后端分离项目Docker部署指南(上)
前后端分离项目Docker部署指南(上)