核心内容
- Docker公共仓库与私有仓库的概述。
- 公共仓库(Docker hub)登入与登出命令使用详解。
- 如何搭建一个简单的私有仓库。
- 如何在搭建的私有仓库内,实现私有镜像的查询、上传、下载。
公共仓库与私有仓库
Docker 镜像仓库是存储和管理 Docker 镜像的地方。它可以是公共或私有的,并且提供了一个集中式的地方来分享、存储和管理 Docker 镜像。这有点像github和gitlab,只不过github和gitlab是一个代码托管平台,在平台上托管的是代码,这里托管是各种的镜像。
下面是公共镜像仓库和私有镜像仓库两种仓库类型的典型代表:
- Docker Hub:Docker Hub 是 Docker 公司提供的官方镜像仓库,包含了数量庞大的公共镜像,用户可以通过 Docker Hub 在云端存储和分享自己的镜像。你可以在 Docker Hub 上找到各种开源软件的官方和社区维护的镜像,也可以自己创建账号并上传自己的镜像。
- Harbor:Harbor 是一个开源的企业级 Docker 镜像仓库服务,提供了安全、可信赖的镜像存储和管理功能。它支持多种存储后端,并提供了灵活的访问控制和权限管理功能,适用于企业内部使用。
这些镜像仓库都提供了丰富的功能和服务,可以满足不同场景下的需求。如果用户想要根据自己的需求选择合适的镜像仓库服务来存储和管理 Docker 镜像,那么公共镜像仓库与私有镜像仓库的区别是需要提前了解清楚的:
访问权限
- 公共镜像仓库:公共镜像仓库是开放的,任何人都可以访问其中的镜像,无需进行身份验证或付费。用户可以通过搜索功能找到并下载公共仓库中的镜像。
- 私有镜像仓库:私有镜像仓库是受限的,只有授权的用户才能访问其中的镜像。通常需要进行身份验证,并且可能需要付费订阅才能访问。私有仓库适用于存储和分享组织内部使用的敏感或专有的镜像。
安全性
- 公共镜像仓库:公共镜像仓库中的镜像可能来自各种来源,包括社区贡献者和官方维护者。尽管大多数镜像都是安全的,但用户应该注意安全漏洞和恶意代码的可能性。
- 私有镜像仓库:私有镜像仓库受到组织内部的管控和监管,可以更好地控制镜像的来源和内容,提高了安全性。
定制化和扩展性
- 公共镜像仓库:公共镜像仓库通常包含了大量常用的镜像,用户可以快速获取和使用。然而,由于是公开的,用户可能无法定制和扩展其中的镜像。
- 私有镜像仓库:私有镜像仓库可以根据组织的需求定制和扩展镜像,满足特定的业务需求。用户可以根据自己的需求创建和管理自己的镜像,并对其进行定制和扩展。
成本
- 公共镜像仓库:公共镜像仓库通常是免费的,用户可以免费访问其中的镜像并使用。
- 私有镜像仓库:私有镜像仓库可能需要付费订阅才能访问和使用。成本取决于提供商和订阅计划的具体定价。
登入镜像仓库
docker login 命令用于登录到 Docker Hub 或其他 Docker镜像仓库服务。登录成功后,可以通过 Docker客户端来推送(push)或拉取(pull)镜像到该镜像仓库。
基本语法
docker login [OPTIONS] [SERVER]
各部分的含义如下:
- OPTIONS:可选参数,用于指定一些额外的选项和配置。
- SERVER:要登录的 Docker镜像仓库服务的地址。如果不提供该参数,默认将登录到 Docker Hub。
其中OPTIONS部分常见的选项主要是两个:
- -u, --username:用户名
- -p, --password:密码
使用示例
登录到 Docker Hub:
docker login
图片
这会进入一个交互式对话中,提示你输入用户名和密码。输入正确的用户名和密码即可成功登入;
如果你想通过命令行提供用户名和密码,可以使用 -u 和 -p 选项:
docker login -u USERNAME -p PASSWORD
如果要登录到私有的镜像仓库服务,需要提供相应的私有镜像仓库服务地址,REGISTRY_URL为私有仓库服务的地址:
docker login REGISTRY_URL
登录成功后,将会在终端中看到登录成功的提示信息,并且 Docker 客户端将会在后续的操作中使用你提供的凭据来与镜像仓库服务端进行通信。
请注意,登录到 Docker Registry 时,密码会以明文形式传输,因此请确保在安全的环境中使用 docker login 命令,并避免在公共场所或非安全的网络中使用该命令。
登出镜像仓库
docker logout 命令用于注销当前登录的 Docker 用户,从 Docker Hub 或其他 Docker镜像仓库服务中退出登录状态。
基本语法
docker logout [SERVER]
其中,SERVER 参数是可选的,用于指定要注销登录的 Docker Registry 的地址。如果不提供该参数,默认将注销当前登录的 Docker Hub 账号。
使用示例
注销当前登录的 Docker Hub 账号:
docker logout
如果你当前已经登录到私有的 Docker Registry,可以提供相应的 Registry 地址来注销登录状态:
docker logout REGISTRY_URL
执行命令后,你将会看到注销成功的提示信息,并且 Docker客户端将不再使用之前提供的凭据来与 Registry 进行通信。
私有仓库管理
在开源的企业级Docker私有仓库工具中,Harbo是一个典型代表,相对比较流行,而Docker 官方也提供了一种开源镜像仓库工具 Docker Registry,相较于Harbor,Docker Registry在功能的丰富性上要差一些。下面是两者在功能性上的一些区别:
功能扩展
- Docker Registry:Docker Registry 是 Docker 公司提供的开源镜像仓库服务,提供了基本的镜像存储和传输功能。它可以作为 Docker Engine 的一部分运行,并提供了基于 HTTP API 的标准接口。
- Harbor:Harbor 是一个由 VMware 发起的开源企业级 Docker Registry 服务,构建在 Docker Registry 2.0 之上,提供了更丰富的功能和更高级的特性。除了基本的镜像存储和传输功能外,Harbor 还提供了许多高级功能,如安全扫描、RBAC 权限控制、镜像复制和同步、镜像签名等。
安全性和权限控制
- Docker Registry:Docker Registry 提供了基本的身份验证功能,但在权限控制方面相对较弱。它缺乏对镜像内容的安全扫描和审计功能。
- Harbor:Harbor 提供了更强大的安全性和权限控制功能。它支持基于角色的访问控制(RBAC)、LDAP/AD 集成、镜像内容的漏洞扫描和安全审计,以及镜像签名和验证等功能,能够帮助用户更好地管理和保护镜像内容的安全性。
镜像复制和同步
- Docker Registry:Docker Registry 本身不提供镜像复制和同步功能,需要用户自行实现。
- Harbor:Harbor 支持镜像复制和同步功能,可以在多个 Harbor 实例之间同步镜像,以实现高可用性和灾备备份。
多租户支持:
- Docker Registry:Docker Registry 不提供原生的多租户支持,所有用户和仓库都在同一个命名空间下。
- Harbor:Harbor 提供了多租户支持,可以在不同的项目或组织之间划分不同的权限和访问控制策略,确保各个租户之间的隔离和安全性。
总的来说,Harbor 在 Docker Registry 的基础上提供了更多的高级功能和安全性控制,适用于更复杂的企业级应用场景。
如果在实际工作应用中,绝对更推荐Harbor。而这篇这里主要是想和大家分享一下私有镜像仓库管理中一些基础功能、通用操作。因此,这里我采用了Docker官方的开源镜像仓库服务Docker Registry。在后面会单独来介绍把Harbor安装、使用的详细方法。
安装 Docker Registry:
直接使用docker run命令,从Docker Hub中拉取Docker Registry镜像并运行容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:latest
这将在服务器上启动一个 Docker Registry 容器,监听在默认端口 5000 上,并且在容器退出时自动重启,确保 Docker Registry 服务始终可用。
给本地镜像打上远程仓库的标签:
docker tag myimage your-registry/myimage:latest
将镜像推送到远程仓库:
docker push your-registry/myimage:latest
这样,myimage 镜像的 latest 版本就会被推送到了名为 your-registry 的私有仓库中。
如果想使用私有仓库中的镜像:
docker pull your-registry/myimage:latest