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":[]}
完毕!成功!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • docker中Jenkins安装allure和使用,bash: allure: command not found

    docker中Jenkins安装allure和使用,bash: allure: command not found我的docker中的Jenkins是已经安装allure了的,但是jenkins提示:bash:allure:commandnotfound。原来是我是通过管理员进入jenkins容器安装了allure的,而jenkins是以普通用户去运行的,所以我又以普通用户登录安装allure还是提示:bash:allure:commandnotfound。因为每次jenkins启动都是不同的用户备注:docker中jenkins安装allure可以参考这个链接:https://mp.c

  • docker的端口映射_外网远程桌面端口映射

    docker的端口映射_外网远程桌面端口映射Docker端口映射实现网络访问首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!我会在当天或者第二天及时回复,并且改进~~Docker运行容器之后却发现没IP,没端口,那要如何访问容器呢?下面我来介绍下Docker通过端口映射来实现网络访问一、从外部访问容器应用在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数指定端口映射。先来说说p和P吧-p可以指定要映射的端口,并

  • docker 镜像构建_docker 镜像制作

    docker 镜像构建_docker 镜像制作前言如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本Dockerfile编写

  • docker安装rabbitmq镜像

    docker安装rabbitmq镜像1.dockerps查看正在运行的镜像/服务2.在docker容器中安装rabbitmqdockerrun-d–rm–namerabbitmq-p5672:5672-p15672:15672rabbitmq:3-management第1次执行,因为本地没有rabbitmq的镜像,会从仓库下载镜像并安装2.1参数说明rabbitmq:3:表示镜像的名字,其中3表示版本3…

  • docker 修改容器时间_docker开放容器端口

    docker 修改容器时间_docker开放容器端口前言用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间查看时间查看系统时间date-R进入docker容器内部,查看容器时间dockere

发表回复

您的电子邮箱地址不会被公开。

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