Kubernetes(K8s) 安装 Docker 私有镜像仓库 Docker Registry

2025-05-08 17:37

企业内部通常会搭建私有镜像仓库。可以安装 Docker 的官方镜像 Registry。镜像名为 registry:3registry:3.0.0

官方文档:https://distribution.github.io/distribution/about/deploying/

安装 Registry

docker run -d -p 5000:5000 --restart=always --name registry registry:3

使用 Registry

docker 默认只支持 HTTPS 协议的仓库,如使用 HTTP 协议,需配置 "insecure-registries":["http://localhost:5000"]

# 从 docker hub 官方拉取镜像
docker pull ubuntu:24.04
# Tag Image 标记镜像
docker tag ubuntu:24.04 localhost:5000/ubuntu:24.04
# Push Image 推送镜像
docker push localhost:5000/ubuntu:24.04

Registry 挂载存储卷

推送到 Registry 的镜像如果保存在容器内部,容器重启后,镜像数据将全部丢失。需要将存储路径挂载到容器外面,挂载路径是 /var/lib/registry

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /mnt/registry:/var/lib/registry \
  registry:3

Registry 权限认证

如果要将 Registry 放到公网上,需要加上权限认证,否则所有的人都可以向仓库推送镜像。加上权限认证后,需要登录才可以拉取和推送镜像。

Registry 的提供的认证非常基础,如需更高级的权限认证,可以使用 Harbor,拥有更高级的功能。

完成权限认证后,需要登录才可以推送和下载:

docker login myregistrydomain.com:5000

在 K8s 中使用镜像的容器,则需配置 Docker Secret。

生成密码文件

获取 htpasswd 密码文件。其中 testuser 是用户名,testpassword 是密码,可自行更改。

Linux 系统运行以下命令:

$ mkdir auth
$ docker run \
  --entrypoint htpasswd \
  httpd:2 -Bbn testuser testpassword > auth/htpasswd

Windows 系统运行以下命令(在 PowerShell 中运行,不能在 cmd 中运行,否则会提示 Set-Content 无法找到):

docker run --rm --entrypoint htpasswd httpd:2 -Bbn testuser testpassword | Set-Content -Encoding ASCII auth/htpasswd

挂载密码文件

将密码文件挂载到容器中:

  -v ./auth:/auth

如果在 K8s 环境中,可将 htpasswd 内容配置到 ConfigMap 中,然后将文件挂载到容器 /auth/htpasswd 文件中。

配置环境变量

  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \

访问 Registry

如果需要查看 Registry 中有哪些镜像已经镜像有哪些版本,可以使用以下 API:

# 查看所有镜像
http://myregistrydomain.com:5000/v2/_catalog
# 查看 nginx 镜像的版本
http://myregistrydomain.com:5000/v2/nginx/tags/list
0791-85271700
QQ咨询:1779755751
QQ交流群:626599871
微信咨询
微信扫码咨询
微信交流群
微信交流群
Powered by UJCMS © 2010-2025 All Rights Reserved
QQ咨询
电话
微信
微信扫码咨询