镜像仓库
镜像仓库(Registry)是存储和分发容器镜像的服务器应用。容器镜像是容器的可移植打包格式,包含了应用程序及其依赖的所有内容。镜像仓库主要用于存储这些镜像,并允许用户通过网络将镜像拉取到本地进行部署。本文将指导您如何在英博云上部署和使用私有Docker Registry。
前提条件
通过kubectl命令行部署创建
前提:
- 已安装kubectl工具到本地。详情请参考:安装和设置 kubectl。
- 已通过 kubectl 连接目标集群。具体操作详情请参考:连接集群。
- PersistentVolumeClaim:镜像仓库registry挂载的共享存储卷大小,需要根据实际使用情况设置容量。
- Ingress Host:请输入自定义名称+集群的外网ingress,可通过对应集群详情页查看,如下图所示。

- 部署Docker Registry,示例文件 docker-registry.yaml代码如下:
### Part1: 持久化的存储卷
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: t512g # 存储卷的名称
namespace: default # 存储卷的命名空间
spec:
accessModes:
- ReadWriteMany # 存储卷的读写模式
resources:
requests:
storage: 512Gi
storageClassName: shared-nvme-cn-beijing2 # 创建存储卷使用的StorageClass的名字
---
### Part2: 部署镜像仓库的 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-registry # Deployment 的名称
spec:
replicas: 1 # 副本数,表示运行的 Pod 实例数量
selector:
matchLabels:
app: docker-registry # 匹配标签,用于将 Pod 与 Deployment 关联
template:
metadata:
labels:
app: docker-registry # Pod 的标签
spec:
containers:
- name: registry # 容器的名称
resources:
limits:
cpu: "2" 容器的最大 CPU 配额
memory: "4Gi" # 容器的最大内存配额
image: registry-cn-beijing2-internal.ebtech.com/docker-hub-mirror/registry:2 # 镜像仓库的地址和镜像版本
ports:
- containerPort: 5000 # 容器暴露的端口
volumeMounts:
- name: cm-volume # 挂载 ConfigMap 的存储卷名称
mountPath: /etc/docker/registry/ # 挂载到容器的路径
- name: registry-storage # 挂载持久化存储卷的名称
mountPath: /var/lib/registry # 镜像存储数据的路径
volumes:
- name: cm-volume # ConfigMap 类型的存储卷
configMap:
name: docker-registry-cm # ConfigMap 的名称
items:
- key: config.yml # ConfigMap 中的键
path: config.yml # 在容器内的路径
- name: registry-storage
persistentVolumeClaim:
claimName: t512g # 引用的持久化存储卷的名称
---
### Part3: 镜像仓库的配置 ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: docker-registry-cm # ConfigMap 的名称
data:
config.yml: | # 镜像仓库的配置文件
version: 0.1
log:
level: debug # 日志级别
http:
addr: :5000 # HTTP 服务监听的地址和端口
headers:
X-Content-Type-Options: [nosniff] # 安全头部配置
storage:
filesystem:
rootdirectory: /var/lib/registry # 镜像存储路径
delete:
enabled: true # 是否允许删除镜像
---
Part4:镜像仓库的 Service
apiVersion: v1
kind: Service
metadata:
name: docker-registry # Service 的名称
spec:
selector:
app: docker-registry # 与 Pod 的标签关联
ports:
- protocol: TCP # 使用的网络协议
port: 5000 # Service 的端口号
targetPort: 5000 # 映射到 Pod 的端口号
type: ClusterIP # Service 类型,表示只在集群内部访问
---
Part5:外部访问的 Ingress 配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: docker-registry-ingress # Ingress 的名称
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: registry-tenant-39663739-yqwowner-ingress-cn-regionxxx.ebtech.com # Ingress Host
http:
paths:
- path: / # 路径前缀
pathType: Prefix # 路径匹配类型
backend:
service:
name: docker-registry # Service 名称
port:
number: 5000 # 映射的服务端口号
---
Part6:内部访问的 Ingress 配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: docker-registry-ingress-internal # 内部 Ingress 的名称
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: reg-tenant-39663739-yqwowner-ingress-cn-regionxxx-internal.ebtech.com # Ingress Host
http:
paths:
- path: / # 路径前缀
pathType: Prefix # 路径匹配类型
backend:
service:
name: docker-registry # Service 名称
port:
number: 5000 # 映射的服务端口号
- 执行以下命令,部署yaml文件。
kubectl apply -f docker-registry.yaml
- 执行以下命令,查看服务是否部署成功。
kubectl get pods -n default
kubectl get svc -n default
kubectl get pvc -n default
kubectl get ingress -n default
使用Docker Registry
调用接口查看镜像仓库列表
Docker Registry没有像harbor那样的web界面可以直观的查看镜像仓库列表,需要调用接口查看,
其中,ingress_hosts在本示例中为:reg-tenant-39663739-yqwowner-ingress-cn-regionxxx-internal.ebtech.com
curl -X GET https://ingress_hosts/v2/_catalog
推送镜像
- 为镜像打标签,使其指向Registry:
docker tag <image-name> reg-tenant-39663739-yqwowner-ingress-cn-regionxxx-internal.ebtech.com/<your-image-name>:tag
- 将镜像推送到Registry:
docker push reg-tenant-39663739-yqwowner-ingress-cn-regionxxx-internal.ebtech.com/<your-image-name>:tag
拉取镜像
docker pull reg-tenant-39663739-yqwowner-ingress-cn-regionxxx-internal.ebtech.com/<your-image-name>:tag