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

转载声明

目录
相关文章
|
5天前
|
Ubuntu 安全 网络安全
Docker镜像:Ubuntu支持systemctl、SSH和VNC
总的来说,Docker提供了一个灵活且强大的方式来创建和运行自定义的Ubuntu镜像。通过理解和使用Dockerfile,你可以轻松地创建一个支持systemctl、SSH和VNC的Ubuntu镜像。
81 21
|
13天前
|
Ubuntu 安全 Docker
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
73 23
|
17天前
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
66 10
|
23天前
|
安全 API 算法框架/工具
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
172 2
|
1月前
|
JSON 运维 Ubuntu
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
593 8
|
20天前
|
存储 SQL 关系型数据库
docker部署n9e开源版本7.4.0
n9e开源版本7.4.0
37 0
|
1天前
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
47 27
|
25天前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
84 16
|
1月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
130 30
|
3月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
397 93