两种常用的镜像仓库:

  • Docker 官方的仓库 registry
  • VMware 的开源仓库 harbor(内置了 registry

Docker 官方的镜像仓库是部署在容器中的基于 http 协议的应用。
部署和使用方式如下:

Docker 官方的镜像仓库部署在 registry 容器中,查找并下载容器镜像:

[root@k8s-master /data]# docker search registry
NAME                                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
registry                             The Docker Registry 2.0 implementation for s…   2725                [OK]                
distribution/registry                WARNING: NOT the registry official image!!! …   58                                      [OK]
stefanscherer/registry-windows       Containerized docker registry for Windows Se…   27                                      
budry/registry-arm                   Docker registry build for Raspberry PI 2 and…   18                                      

第一个标记 OFFICIAL 的镜像即是,下载下来:

[root@k8s-master /data]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[root@k8s-master /data]# 
[root@k8s-master /data]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              f32a97de94e1        7 months ago        25.8MB

使用这个镜像启动一个容器:

[root@k8s-master /data]# docker run -d --name docker-registry -p 5000:5000 registry
c9ab1fae9c2a3dc8da48cbce5ec3cd0e9e8f227af6aa1395448db88a17cbc7bb
[root@k8s-master /data]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                          NAMES
c9ab1fae9c2a        registry            "/entrypoint.sh /etc…"   8 seconds ago       Up 5 seconds        0.0.0.0:5000->5000/tcp                         docker-registry

创建配置文件 daemon.json(该文件默认不存在),添加私有仓库地址:

vim /etc/docker/daemon.json

配置如下:

{
"registry-mirrors":["https://tdimi5ql.mirror.aliyuncs.com"],
"insecure-registries":["http://192.168.100.151:5000"]
}

重启 docker 服务:

systemctl daemon-reload
systemctl restart docker

查看发现重启服务后仓库(容器 registry)并没有自动启动,需要手动启动:

docker start docker-registry

给想要提交到仓库的镜像打个标签:

[root@k8s-master /data]# docker tag app/jenkins 192.168.100.151:5000/app/jenkins
[root@k8s-master /data]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
192.168.100.151:5000/app/jenkins   latest              83644f08fe7a        6 hours ago         660MB
app/jenkins                        latest              83644f08fe7a        6 hours ago         660MB

实操发现,打标签的效果就是在镜像列表中多了一个存储库 REPOSITORY 或者说镜像名称不相同的的镜像,两个镜像的 id 完全一样,说明是同一个镜像

接下来提交镜像到远程镜像仓库:

[root@k8s-master /data]# docker push 192.168.100.151:5000/app/jenkins
The push refers to repository [192.168.100.151:5000/app/jenkins]
559f4ae0e0c6: Pushed 
fd685e9a5043: Pushed 
cfdb476660b4: Pushed 
318ee23a3d4a: Pushed 
8cb2f467d731: Pushed 
2cfb7a3b4cb2: Pushed 
8fd6d61d388e: Pushed 
aeb2f97d8c7a: Pushed 
fcbb61c1c668: Pushed 
b55cd0cf7e45: Pushed 
917d7f6fc72d: Pushed 
b4a4159a6c4a: Pushed 
8bf46d2e80f6: Pushed 
877b494a9f30: Pushed 
latest: digest: sha256:fc58c06b0ff6ab1cbe895aa48ab8921e7fac1629aabba442fc9e3f4a7d818561 size: 3247

接下来验证是否能够从远程仓库下载镜像。

先将已经提交到仓库的本地镜像删除。注意此时删除应该使用镜像名。如果使用 id 进行删除会报错,因为同一个 id 对应了两个镜像名(或者存在两个不同标签的镜像指向了同一个 id):

[root@k8s-master /data]# docker rmi 83644f08fe7a
Error response from daemon: conflict: unable to delete 83644f08fe7a (must be forced) - image is referenced in multiple repositories

正确操作:
第一次删除应该使用镜像名(REPOSITORY),此时可以看到该返回的提示是取消了标签,并未真正的删除该镜像。原因上面刚刚说过,是因为还有另一个标签指向了该镜像 id:

[root@k8s-master /etc/docker]# docker rmi app/jenkins
Untagged: app/jenkins:latest

第二次删除就可以使用 id 了,当然使用镜像名也是可以的,此时就真正的删除了镜像:

[root@k8s-master /data]# docker rmi 192.168.100.151:5000/app/jenkins
Untagged: 192.168.100.151:5000/app/jenkins:latest
Untagged: 192.168.100.151:5000/app/jenkins@sha256:fc58c06b0ff6ab1cbe895aa48ab8921e7fac1629aabba442fc9e3f4a7d818561
Deleted: sha256:83644f08fe7a5b137269dcde4132bd1ddd3cebb785cdc63ca018d8b88c33847d
Deleted: sha256:50f47b580b31fb1ec8b2e36ed19230d7cc5518ea26559e2364630b3e3b202864
Deleted: sha256:50eea350fc0f273c8f900deb83141d965ce8289eba7c3840795261e47d3d4323
Deleted: sha256:89602543224d192f0d224755a8b5c63ff9c3928ab3495d680c218cd76cddf48a
Deleted: sha256:cbdbf0f481551f918ad0a235f0ecf6897022493b759fc9ff564c2b33db7dfede

尝试从仓库拉取刚刚删除掉的镜像并查看:

[root@k8s-master /data]# docker pull 192.168.100.151:5000/app/jenkins
Using default tag: latest
latest: Pulling from app/jenkins
d8d02d457314: Already exists 
5ae2c4acbc0f: Already exists 
9d30c820b1f2: Already exists 
5c50e57b98c7: Already exists 
eebefd700a88: Already exists 
c0a6323f718e: Already exists 
07fd7191c06d: Already exists 
146c19a74bc8: Already exists 
c015e8b53603: Already exists 
cf7384c89894: Already exists 
da96a327dec8: Already exists 
b79fb209b1a1: Already exists 
9dac0f3f7b2b: Already exists 
8478f3dea98b: Pull complete 
Digest: sha256:fc58c06b0ff6ab1cbe895aa48ab8921e7fac1629aabba442fc9e3f4a7d818561
Status: Downloaded newer image for 192.168.100.151:5000/app/jenkins:latest
[root@k8s-master /data]# 
[root@k8s-master /data]# 
[root@k8s-master /data]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
192.168.100.151:5000/app/jenkins   latest              83644f08fe7a        7 hours ago         660MB

逆熵流
10 声望5 粉丝

终身学习,向上生长~