5 配置映像储存 #
在创建自定义映像之前,需要确定映像的储存位置。最简单的解决方案是将映像推送到 Docker Hub。默认情况下,推送到 Docker Hub 的所有映像都是公用映像。切勿发布敏感数据或未授权的软件供公众使用。
您可以通过以下方式限制对自定义容器映像的访问:
付费订阅者可以通过 Docker Hub 创建私用储存库。
使用现场 Docker 注册表可以储存您的组织所用的全部容器映像。可将此方法与 Portus 结合使用来保护注册表。
本章介绍第二种做法:设置一个现场 Docker 注册表并将其与 Portus 结合使用。
5.1 什么是 Docker 注册表? #
Docker 注册表是用于储存和检索容器映像的开源平台。运行本地 Docker 注册表实例可以彻底避免使用 Docker Hub。
Docker Hub 也会使用 Docker 注册表。但从用户的角度而言,Docker Hub 由以下组件构成:
- 用户界面 (UI)
用户使用浏览器访问的部分。在 UI 中可以手动或使用搜索功能方便地浏览 Docker Hub 的内容。UI 可用来按不同的用户创建组织。
此组件是闭源的。
- 身份验证组件
此组件用于保护 Docker Hub 中储存的映像。它会验证所有推送、提取和搜索请求。
此组件是闭源的。
- 储存后端
将映像上传到以及从中下载映像的位置。它由 Docker 注册表提供。
此组件是开源的。
5.2 运行 Docker 注册表 #
SUSE 注册表提供了一个容器映像,可用于将本地 Docker 注册表作为容器运行。在启动容器之前,请创建包含以下示例配置的 config.yml
文件:
version: 0.1 log: level: info storage: filesystem: rootdirectory: /var/lib/docker-registry http: addr: 0.0.0.0:5000
另外,创建一个空目录以映射容器外部的 /var/lib/docker-registry
目录。此目录用于储存容器映像。
运行以下命令以从 SUSE 注册表提取注册表容器映像,并启动一个可以通过端口 5000 访问的容器:
podman run -d --restart=always --name registry -p 5000:5000 \ -v /PATH/config.yml:/etc/docker/registry/config.yml \ -v /PATH/DIR:/var/lib/ \ docker-registry registry.suse.com/sles12/registry:2.6.2
为了更方便地管理注册表,请创建相应的系统单元:
root #
podman generate systemd registry > \
/etc/systemd/system/suse_registry.service
启用并启动注册表服务,然后校验其状态:
root #
systemctl enable suse_registry.serviceroot #
systemctl start suse_registry.serviceroot #
systemctl status suse_registry.service
有关 Docker 注册表及其配置的更多细节,请参见 https://docs.docker.com/registry/ 上的官方文档。
5.3 限制 #
Docker 注册表存在两项主要限制:
它缺少任何形式的身份验证。这意味着,有权访问 Docker 注册表的任何人都可以向它推送映像以及从中提取映像,包括重写现有映像。
无法查看哪些映像已推送到 Docker 注册表。您需要手动记下其中储存的映像。此外,它没有搜索功能。安装 Portus 可以解决这些限制。
5.4 Portus #
Portus 是 Docker 注册表的身份验证服务和用户界面。它是 SUSE 创建的一个开源项目,旨在解决 Docker 注册表本地实例的限制。将 Portus 与 Docker 注册表结合使用可以获得一个安全且随时可在企业中使用的本地版 Docker Hub。
Portus 作为 SUSE 容器注册表中的一个容器映像提供给 SUSE Linux Enterprise Server 客户使用。例如,要提取 SUSE Linux Enterprise Server 12 映像的 2.4.3
标记,请运行以下命令:
tux >
podman pull registry.suse.com/sles12/portus:2.4.3
除了 SUSE 容器注册表中提供的官方 Portus 映像版本以外,Docker Hub 上也提供了一个社区版本。不过,我们强烈建议 SUSE Linux Enterprise Server 客户使用官方的 Portus 映像。面向 SUSE Linux Enterprise Server 客户的 Portus 映像的代码与社区版本中的代码相同。因此,http://port.us.org/docs/deploy.html 中的设置说明适用于这两个映像。