Podman 部署私有镜像仓库
tags: registry
文章目录
- Podman 部署私有镜像仓库
- 1. 安装 Podman 和 httpd-tools
- 2. 配置仓库存储位置
- 3. 生成访问仓库的凭据
- 3.1 htpasswd 用户名和密码
- 3.2 TLS 密钥对
- 4. 启动容器
- 5. 测试
- 5.1 登陆
- 5.2 API访问
- 5.3 镜像入库
- 5.4 查询镜像信息
Podman是一个无守护进程的开源 Linux 原生工具,旨在使用开放容器倡议 ( OCI )容器和容器映像轻松查找、运行、构建、共享和部署应用程序。主要是由RedHat
推动改进。
关于了解 Podman 更多内容:
- Podman 下一代 Linux 容器工具
- Podman 入门指南
1. 安装 Podman 和 httpd-tools
2. 配置仓库存储位置
存储目录为 /opt/registry/
-
Auth
子目录存储htpasswd用于身份验证的文件。 -
Certs
子目录存储仓库使用的证书验证。 -
Data
目录存储存储在仓库中的实际镜像。
如果你想单独挂载一块盘来存储数据可以利用parted
命令
挂载验证
3. 生成访问仓库的凭据
3.1 htpasswd 用户名和密码
身份验证由一个简单的htpasswd文件和一个 SSL 密钥对提供
htpasswd
将在该/opt/registry/auth/
目录中创建一个名为 Bcrypt Htpasswd
的文件
- b通过命令提供密码。
- B使用 Bcrypt 加密存储密码。
- c创建文件。
- 用户名为 registryuser。
- 密码是 registryuserpassword。
查看文件
3.2 TLS 密钥对
通过使用由可信机构(内部或外部)签名的密钥和证书或简单的自签名证书,仓库通过 TLS 得到保护。要使用自签名证书:
-
req
OpenSSL 生成和处理证书请求。 -
-newkey
OpenSSL 创建一个新的私钥和匹配的证书请求。 -
rsa:4096
OpenSSL 生成一个 4096 位的 RSA 密钥。 -
-nodes
OpenSSL 私钥没有密码要求。私钥不会被加密。 -
-sha256
OpenSSL 使用 sha256 来签署请求。 -
-keyout
OpenSSL 存储新密钥的名称和位置。 -
-x509
OpenSSL 生成一个自签名证书。 -
-days
OpenSSL 密钥对有效的天数。 -
-out
OpenSSL 在哪里存储证书。
输入证书的相应选项。CN=
值是您的主机的主机名。主机的主机名应该可由 DNS 或/etc/hosts
文件解析。
将服务器证书、密钥和 CA 文件复制到 podman
证书文件夹中。您必须首先创建适当的文件夹
注意:如果仓库未使用 TLS 保护,则
/etc/containers/registries.conf
可能必须为仓库配置文件中的不安全设置。
该证书还必须得到您的主机和客户端的信任:
4. 启动容器
选项的详细信息是:
-
--name myregistry
将容器命名为myregistry
。 -
-p 5000:5000
将容器中的端口 5000 公开为主机上的端口 5000。 -
-v /opt/registry/data:/var/lib/registry:z
像 在具有正确 SELinux 上下文的容器中一样安装/opt/registry/data
在主机/var/lib/registry
-
-v /opt/registry/auth:/auth:z/opt/registry/auth
在主机上安装,就像/auth
在具有正确 SELinux 上下文的容器中一样。 -
-v opt/registry/certs:/certs:z
像 在具有正确 SELinux 上下文的容器中一样安装/opt/registry/certs
在主机上 。/certs -
-e "REGISTRY_AUTH=htpasswd"
使用bcrypt加密htpasswd文件进行身份验证。由容器的 REGISTRY_AUTH_HTPASSWD_PATH
环境变量设置的文件位置。 -
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
指定用于htpasswd
. -
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
使用容器中的 bcrypt 加密/auth/htpasswd 文件。 -
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt"
设置证书文件的路径。 -
-e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key"
设置私钥路径。 -
-e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true
为 schema1 清单提供向后兼容性。 -
-e REGISTRY_STORAGE_DELETE_ENABLED=true
可以通过API 删除镜像 -
-d docker.io/library/registry:latest
是一个允许存储和分发镜像的仓库应用程序。
注意:如果防火墙在主机上运行,则需要允许暴露的端口 (5000)。
或者直接关闭
5. 测试
5.1 登陆
5.2 API访问
- 更多API 访问策略请参考这里
5.3 镜像入库
从公共拉取alpine:latest
镜像
打标签
推送入库
5.4 查询镜像信息
查询是否入库
查看镜像标签
查看镜像 manifests
参考:
- How to implement a simple personal/private Linux container image registry for internal use
- docker registry仓库私搭并配置证书