Docker镜像仓库registry

Docker镜像仓库registry

介绍

在安装好docker后,我们执行docker pull去下载镜像的时候,其实是默认从dockerhub上拉取的,这个是docker的公共仓库,如果在公司中使用docker,我们不可能把自己的镜像上传到公共仓库,这个时候就需要有一个企业自己是仓库,在局域网之内搭建,既可以提升下载镜像的速度,也可以避免内部的镜像暴露出去。

目前常用 registry 版本为 v2,registry v2 拥有断点续传、并发拉取镜像多层等特点。能并发拉取多层是因为镜像的元信息与镜像层数据分开存储,当 pull 一个镜像时,先进行认证获取到 token 并授权通过,然后获取镜像的 manifest 文件,进行 signature 校验。校验完成后,依据 manifest 里的层信息并发拉取各层。其中 manifest 包含的信息有:仓库名称、tag、镜像层 digest 等

镜像的完整内容分为两部分,一部分是manifest,一部分是image blob,第一部分是镜像的元数据,或者叫元信息,第二部分叫做镜像的二进制文件,也就是镜像的真实文件,可以认为某一个blob就是镜像的某一层的真实二进制文件。

还涉及两个概念,一个是sha256,另外一个是digest
sha256是一种校验方法,docker用这种方法来计算镜像层或者元信息的sha256的sum值,用于校验信息,而digest就是manifest的校验信息值

环境

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)

安装Docker

yum -y install yum-utils
yum-config-manager     --add-repo     https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo     
yum -y install docker-ce
[root@master ~]# systemctl start docker
[root@master ~]# docker --version
Docker version 20.10.1, build 831ebea
[root@localhost ~]# systemctl start docker

下载registry镜像

[root@localhost ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
0a6724ff3fcd: Pull complete 
d550a247d74f: Pull complete 
1a938458ca36: Pull complete 
acd758c36fc9: Pull complete 
9af6d68b484a: Pull complete 
Digest: sha256:d5459fcb27aecc752520df4b492b08358a1912fcdfa454f7d2101d4b09991daa
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
registry     latest    678dfa38fcfa   2 weeks ago   26.2MB

运行registry容器

[root@localhost ~]# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest 
10a89089c799a0ad8e2258f600c665f52293022c048078b42fb2c1f99e6b0e29
参数说明:
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个
      目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
--name registry:创建容器命名为registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;

查看镜像仓库中的所有镜像

[root@localhost ~]# curl http://127.0.0.1:5000/v2/_catalog
{
   "repositories":[]}

docker client下载镜像并打标签

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@localhost ~]# docker tag centos:latest 192.168.1.10:5000/centos:latest

docker client 修改配置文件,设置私有仓库

方式有两种
[root@node ~]# vim /etc/docker/daemon.json 
{
   
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
  "insecure-registries": [ "192.168.1.10:5000"]
}

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
 14 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.10:5000
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

docker client 上传镜像

[root@localhost ~]# docker push 192.168.1.10:5000/centos
Using default tag: latest
The push refers to repository [192.168.1.10:5000/centos]
2653d992f4ef: Pushed 
latest: digest: sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875 size: 529

测试是否可以下载镜像

[root@localhost ~]# docker rmi 192.168.1.10:5000/centos
Untagged: 192.168.1.10:5000/centos:latest
Untagged: 192.168.1.10:5000/centos@sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
registry     latest    678dfa38fcfa   2 weeks ago   26.2MB
centos       latest    300e315adb2f   3 weeks ago   209MB
[root@localhost ~]# docker pull 192.168.1.10:5000/centos
Using default tag: latest
latest: Pulling from centos
Digest: sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
Status: Downloaded newer image for 192.168.1.10:5000/centos:latest
192.168.1.10:5000/centos:latest
[root@localhost ~]# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED       SIZE
registry                   latest    678dfa38fcfa   2 weeks ago   26.2MB
centos                     latest    300e315adb2f   3 weeks ago   209MB
192.168.1.10:5000/centos   latest    300e315adb2f   3 weeks ago   209MB

列出仓库中的所有镜像(在client上操作的,哪台都可以)

[root@localhost ~]# curl http://192.168.1.10:5000/v2/_catalog
{
   "repositories":["centos"]}

删除镜像

docker registry默认情况下没有开启删除镜像的功能,需要修改配置文件,进行打开,下边的操作是在docker registry上操作的

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                    NAMES
10a89089c799   registry:latest   "/entrypoint.sh /etc…"   9 minutes ago   Up 3 minutes   0.0.0.0:5000->5000/tcp   registry
[root@localhost ~]# docker exec -it registry /bin/sh
/ # vi /etc/docker/registry/config.yml 
末行添加
delete:         
    enabled: true
[root@localhost ~]# docker restart registry
registry

自己添加的内容:
在这里插入图片描述
docker client 执行删除操作,如下,还是失败,那就算了吧,这个只是为了让你理解并且会用registry,企业用用到仓库的时候使用的是harbor,一个图形化界面的docker镜像仓库,而且还有账号和密码,安全级别也更高

[root@localhost ~]# curl -I -X DELETE http://192.168.1.10:5000/v2/centos/manifests/sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
HTTP/1.1 405 Method Not Allowed
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Mon, 04 Jan 2021 06:07:42 GMT
Content-Length: 78

对于企业公司用镜像仓库的话有条件还是推荐使用harbor,harbor是一款有图形化界面的仓库,便于管理,安装,删除镜像等等,registry当你大量上传镜像而不清理的时候还会出现这个容器大量占用服务器磁盘空间,当你删除镜像的时候也不会像harbor可以有选择性的删除,registry镜像删除方法亲自实验过,当占用过大的时候直接全部删除

#这个是去到registry容器所映射的主机目录,所有的镜像文件都存放到/data/registry目录下
[root@localhost ~]# cd /data/registry
[root@localhost registry]# ls
docker
先来看一下目录构成情况
[root@localhost registry]# tree docker/
docker/
└── registry
    └── v2
        ├── blobs
        │   └── sha256
        │       ├── 30
        │       │   └── 300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
        │       │       └── data
        │       ├── 7a
        │       │   └── 7a0437f04f83f084b7ed68ad9c4a4947e12fc4e1b006b38129bac89114ec3621
        │       │       └── data
        │       └── db
        │           └── dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
        │               └── data
        └── repositories
            └── centos
                ├── _layers
                │   └── sha256
                │       ├── 300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
                │       │   └── link
                │       └── 7a0437f04f83f084b7ed68ad9c4a4947e12fc4e1b006b38129bac89114ec3621
                │           └── link
                ├── _manifests
                │   ├── revisions
                │   │   └── sha256
                │   │       └── dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
                │   │           └── link
                │   └── tags
                │       └── latest
                │           ├── current
                │           │   └── link
                │           └── index
                │               └── sha256
                │                   └── dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875
                │                       └── link
                └── _uploads

27 directories, 8 files
主要就是进入/data/registry/docker/registry/v2/blobs以及/data/registry/docker/registry/v2/repositories删除下面的所有
操作如下:
[root@localhost repositories]# cd /data/registry/docker/registry/v2/blobs
[root@localhost blobs]# ls
sha256
[root@localhost blobs]# rm -rf *
[root@localhost blobs]# cd /data/registry/docker/registry/v2/repositories
[root@localhost repositories]# ls
centos
[root@localhost repositories]# rm -rf *
查看镜像仓库是否还有镜像:
[root@localhost repositories]# curl http://192.168.1.10:5000/v2/_catalog
{
   "repositories":[]}
完毕!成功!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101882.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker打开2375「建议收藏」

    docker打开2375「建议收藏」在进行dockerswarm进行管理集群节点时,需要打开端口。1、$pwd/etc/docker创建daemon.json$catdaemon.json{“hosts”:[“tcp://0.0.0.0:2375″,”unix:///var/run/docker.sock”]}2、cat/usr/lib/systemd/system/docker.servic…

    2022年4月29日
    165
  • docker 导入导出镜像_docker拉取镜像到本地

    docker 导入导出镜像_docker拉取镜像到本地docker导入导出镜像文件:把某个docker镜像保存到本地文件,命令如下dockersave-o镜像名.tar原始镜像名(REPOSITORY项)导出$dockersave-o/root/images/jenkins_image.tarjenkins/jenkins:latest导入$dockerload</root/images/jenkins_image.tar导出镜像如果要存出镜像到本地文件,可以使用dockersave命令。例如,存出本地的ubu

    2022年9月5日
    2
  • 【云原生】第十二篇–docker容器镜像仓库Harbor部署[通俗易懂]

    【云原生】第十二篇–docker容器镜像仓库Harbor部署[通俗易懂]由于国内访问国外的容器镜像仓库速度比较慢,因此国内企业创建了容器镜像加速器,以方便国内用户使用容器镜像。Harbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(RoleBasedAccessControl),AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。…

    2025年7月29日
    2
  • Docker Compose详解

    Docker Compose详解使用 DockerCompos 预计阅读时间 11 分钟 DockerCompos 是一种用于帮助定义和共享多容器应用程序的工具 使用 Compose 我们可以创建一个 YAML 文件来定义服务 并且使用一个命令 可以启动所有内容或将其全部关闭 使用 Compose 的最大优势是您可以在一个文件中定义您的应用程序堆栈 将其保存在项目 repo 的根目录中 它现在是版本控制的 并且可以轻松地让其他人为您的项目做出贡献 有人只需要克隆您的存储库并启动撰写应用程序 事实上 你现在可能会在 GitHub Gi

    2025年6月17日
    0
  • 使用 Vagrant+Docker 构建 PHP 最优开发环境[通俗易懂]

    使用 Vagrant+Docker 构建 PHP 最优开发环境

    2022年2月12日
    41
  • 使用docker运行zabbix-server「建议收藏」

    使用docker运行zabbix-server

    2022年2月17日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号