Docker 仓库(hub、registry和harbor)
1. 介绍
Docker 已成为开发者和运维人员广泛使用的容器化平台,为了方便管理和共享容器镜像,Docker 仓库应运而生。本文将详细介绍 Docker 仓库的核心概念、使用方法和几个常见的仓库工具:Docker Hub、Docker Registry 和 Harbor。
2. Docker 仓库概述
Docker 仓库是用于存储和共享 Docker 镜像的中心仓库。它允许开发者将自己创建的 Docker 镜像上传到仓库中,供他人下载和使用。类比于代码的版本控制系统,Docker 仓库可以理解为容器镜像的版本控制库。
Docker 仓库可以分为两大类:公共仓库和私有仓库。公共仓库是由 Docker 公司官方提供的全球性镜像存储服务,最有名的就是 Docker Hub。私有仓库则是由组织或个人自己搭建和管理的,旨在满足一些安全性和隐私性需求。
3. Docker Hub
3.1 定义
Docker Hub 是 Docker 公司官方提供的公共仓库服务。它是全球最大的 Docker 镜像在线库,也是最常用的 Docker 仓库之一。在 Docker Hub 上,开发者可以找到成千上万的高质量镜像,无论是用于开发、测试还是生产环境。
3.2 注册和登录
要使用 Docker Hub,首先需要注册一个账号,然后使用账号登录。在注册和登录之后,就可以使用 Docker CLI 命令行工具与 Docker Hub 进行交互了。
示例代码:
# 注册账号
docker login
# 登录账号 docker login -u <username> -p <password>
3.3 搜索和拉取镜像
在登录 Docker Hub 后,可以通过搜索功能在公共仓库中查找需要的镜像。可以根据关键字进行搜索,并可以通过排序和过滤功能进行细化结果。
示例代码:
# 搜索镜像
docker search <keyword>
# 拉取镜像 docker pull <image_name>
3.4 上传和共享镜像
开发者可以将自己创建的 Docker 镜像上传到 Docker Hub,供其他人下载和使用。将镜像上传到仓库需要先给镜像打上标签,然后使用 docker push
命令进行上传。
示例代码:
# 打标签
docker tag <image_id> <hub_username>/<repository_name>:<tag>
# 上传镜像 docker push <hub_username>/<repository_name>:<tag>
3.5 限制和收费
Docker Hub 对于免费用户有一些限制,例如每天的拉取和推送次数,以及每个用户最多可以创建的仓库数量等。对于需要更多功能和更大规模使用的用户,Docker 还提供了付费的订阅服务,提供了更多的额度和支持。
4. Docker Registry
4.1 定义
Docker Registry 是 Docker 官方提供的一个开源项目,用于搭建私有的 Docker 仓库服务。它可以在自己的服务器上搭建和管理,适用于对安全性和隐私性有更高要求的组织或个人。
4.2 搭建和配置
搭建 Docker Registry 需要一台运行 Docker 的服务器,通过 Docker CLI 命令行工具即可完成搭建。在搭建完成后,可以通过配置文件对 Registry 进行更详细的配置。
示例代码(搭建 Registry):
# 拉取 Registry 镜像
docker pull registry
# 运行 Registry 容器 docker run -d -p 5000:5000 --restart=always --name registry registry
示例代码(Registry 配置文件):
# config.yml
version: 0.1
log:
level: debug
formatter: json
fields:
service: registry
environment: development
storage:
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
4.3 上传和下载镜像
将镜像上传到私有仓库和从私有仓库下载镜像与 Docker Hub 类似,都是使用 docker push
和 docker pull
命令。唯一的区别是在镜像名字之前需要加上私有仓库的地址。
示例代码:
# 打标签
docker tag <image_id> <registry_address>/<repository_name>:<tag>
# 上传镜像 docker push <registry_address>/<repository_name>:<tag>
# 下载镜像
$ docker pull <registry_address>/<repository_name>:<tag>
4.4 管理和安全性
Docker Registry 提供了一系列 API 接口,可以用于仓库的管理,例如用户管理、镜像管理等。此外,它也提供了一些安全性的功能,例如限制访问权限、开启 HTTPS 加密等。
5. Harbor
5.1 定义
Harbor 是一个企业级的 Docker 镜像仓库,由 VMware 公司开发和维护。相比于 Docker Hub 和 Docker Registry,Harbor 提供了更多的企业级特性和功能,例如用户管理、安全性控制和镜像复制等。
5.2 特性和功能
Harbor 提供了以下一些主要的特性和功能:
- 角色基础的权限管理
- 多个项目和命名空间的支持
- 丰富的镜像复制和同步功能
- 可定制的镜像扫描和检查
- LDAP、AD 和 OIDC 等多种认证方式支持
- 镜像的哈希值和签名校验
5.3 搭建和配置
搭建 Harbor 需要一台运行 Docker 的服务器,可以通过 Docker Compose 文件来定义和管理服务。在搭建完成后,可以通过 Web 界面对 Harbor 进行更详细的配置。