如何搭建及使用docker registry
发布网友
发布时间:2022-04-22 06:47
我来回答
共1个回答
热心网友
时间:2022-06-16 19:31
registry是什么?
registry是Docker的镜像存储服务,docker hub上的registry镜像见Registry官方镜像,更多详细信息请参见源码。
搭建registry
在服务器上执行如下命令安装docker,这里选择腾讯云(Ubuntu Server 14.04.1 LTS 64位)镜像来创建服务器
curl -fsSL https://get.docker.com/ | sh
安装docker-compose Docker Compose是一个定义及运行多个Docker容器的工具。使用Docker Compose只需要在一个配置文件中定义多个Docker容器,然后使用一条命令将多个容器启动,Docker Compose会通过解析容器间的依赖关系,按先后顺序启动所定义的容器。详见Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose
启动registry服务,此例中包含nginx和registry两个容器,涉及的包及配置文件请参见附件,解压后,直接执行如下命令即可创建服务。
docker-compose up -d
停止服务
docker-compose stop
重启服务
docker-compose restart
下线服务
docker-compose down
上传镜像
因为上面搭建的registry服务是http的,所以docker启动参数需要配置--insecure-registry localhost选项,修改/etc/default/docker文件
DOCKER_OPTS="--insecure-registry localhost"
重启docker
service docker restart
拉取上传镜像 docker pull;docker tag;docker push(tag默认为latest)
docker pull hello-world
docker tag hello-world localhost/library/hello-world
docker push localhost/library/hello-world
下载镜像
docker pull localhost/library/hello-world
删除镜像
docker rmi localhost/library/hello-world
获取镜像仓库列表
# curl http://localhost/v2/_catalog
{"repositories":["library/hello-world"]}
未上传镜像前的输出如下:
# curl http://localhost/v2/_catalog
{"repositories":[]}
获取镜像tag列表
# curl -X GET http://localhost/v2/library/hello-world/tags/list
{"name":"library/hello-world","tags":["latest"]}
获取镜像manifests信息
# curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost/v2/library/hello-world/manifests/latest
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1473,
"digest": "sha256:c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 974,
"digest": "sha256:c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c"
}
]
}
其中c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc即为执行docker images时看到的IMAGE ID。 layers表示了镜像的层次关系,可以通过layers中的digest来拉取blob,见下面获取镜像blob
获取镜像blob
在上面获取hello-world:latest镜像的manifests信息中可以看到其只有一个layer,以此为例来看如何获取镜像blob。从拉取的结果可以看到获取的blob与文件sha256是一致的。执行docker pull实际上就是首先获取到镜像的manifests信息后,再拉取blob的。
# curl -s -X GET http://localhost/v2/library/hello-world/blobs/sha256:c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c -o hello-world.blob
# ls -l hello-world.blob
-rw-r--r-- 1 root root 974 Nov 23 09:56 hello-world.blob
# sha256sum hello-world.blob
c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c hello-world.blob
##删除镜像(soft delete)
首先通过curl -i 参数获取到镜像的Docker-Content-Digest,registry 2.3及以后的版本必须在header中指定Accept: application/vnd.docker.distribution.manifest.v2+json,否则默认返回的是schema1的digest,其与schema2的digest不同,使用不指定上述头信息返回的digest删除时会返回404。
# curl -i -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost/v2/library/hello-world/manifests/latest
HTTP/1.1 200 OK
Server: nginx/1.11.5
Date: Wed, 23 Nov 2016 02:17:51 GMT
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Content-Length: 524
Connection: keep-alive
Docker-Content-Digest: sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4"
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1473,
"digest": "sha256:c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 974,
"digest": "sha256:c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c"
}
]
}
根据上一步返回的Docker-Content-Digest删除,返回202表示删除成功
# curl -k -v -s -X DELETE http://localhost/v2/library/hello-world/manifests/sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> DELETE /v2/library/hello-world/manifests/sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4 HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost
> Accept: */*
>
< **HTTP/1.1 202 Accepted**
* Server nginx/1.11.5 is not blacklisted
< Server: nginx/1.11.5
< Date: Wed, 23 Nov 2016 02:29:59 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< Docker-Distribution-Api-Version: registry/2.0
<
* Connection #0 to host localhost left intact
确认结果
# curl -X GET http://localhost/v2/library/hello-world/tags/list
{"name":"library/hello-world","tags":null}
删除镜像(hard delete)
在上一步中,只是删除了镜像的manifests信息,解引用的blob还在占用磁盘空间,执行如下命令可以查看可以删除的blob
docker exec -it myregistry_registry_1 /bin/registry garbage-collect --dry-run /etc/registry/config.yml
要删除blob,释放磁盘空间,需要执行下面的命令。需要特别注意的是在执行下面的命令时registry必须是只读模式(只读模式可在registry配置文件中设置),否则可能会导致数据不一致。
docker exec -it myregistry_registry_1 /bin/registry garbage-collect /etc/registry/
docker怎么搭建私有仓库registry?
搭建过程分为几个步骤:创建Registry目录、定义Docker-Compose脚本和服务、设置Nginx端口转发、增加Nginx文件上传大小、配置SSL证书和身份验证。在Nginx配置中设置虚拟主机,根据域名修改server_name参数,并调整上传文件大小限制。为SSL证书生成有效或自签名证书,并在Nginx配置文件中引用。创建用于基本身份验证的ht...
socks5 代理软件 - StormProxies
StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...
Docker Registry镜像仓库搭建及镜像常用操作汇总
首先,选择一台虚拟机作为仓库宿主机和实验平台,以Ubuntu 20.04为例。其次,通过拉取官方提供的Registry镜像,创建并启动容器,完成Registry服务的部署。服务部署完成后,即可开始进行镜像的上传和下载操作,实现资源的共享与分发。此外,学习镜像的导出和导入功能,实现镜像的备份和迁移,确保业务连续性和资源...
【Docker】Docker Registry(镜像仓库)
Docker Registry:官方提供的私有仓库服务,与 Docker Hub 类似。五、常用命令 包括镜像仓库命令(如 login、pull、push、search)和镜像命令(如 images、inspect、tag、run)。这些命令用于管理镜像的拉取、推送、搜索以及容器的创建。六、镜像仓库实战:搭建一个 Nginx 服务 1. 搜索并选择一个稳定、无...
搭建docker私有镜像仓库
1. 基础环境准备首先,确保你的系统运行的是兼容的Docker版本,并安装相应的Docker软件。检查Docker服务是否正常运行,以确保后续操作顺利进行。2. 安装和配置Docker从官方网站获取Docker安装包,按照指示安装。安装完成后,通过命令行查看Docker服务状态,确认其正在运行。3. 搭建私有镜像仓库首先,下载registry...
如何在本地搭建Docker-Registry
比如repos.rd,但是这个域名又不存在,所以我们需要这个私有DNS服务器做解析,当然如果我们的域名是公有的,或直接使用IP,则不需要设置,否则会出现repos.rd/v1/_ping: i/o timeout获取这个Container的IPdocker inspect -format '{{ .NetworkSettings.IPAddress }}' $REGISTRY配置NGINXsudo vim /etc/...
如何在Docker下部署 Registry 服务
1、安装 Docker。2、从 Docker 公共 Registry 中运行 hello-world 镜像。docker run hello-world run 命令自动从 Docker 的官方镜像库中将 hello-world 镜像 pull 下来。3、在 localhost 上启动 Registry 服务。docker run -p 5000:5000 registry:2.0 这将在 DOCKER_HOST 上启动一个 Registry 服务...
容器镜像私有仓库搭建(registry)-- 简单易上手
在搭建私有仓库时,首先通过HTTP或HTTPS协议连接,确保使用SSL证书并将其与密钥文件一起准备。具体步骤包括:使用`docker pull`下载镜像,例如`docker pull ubuntu:latest`,然后使用`docker tag`将镜像标记为`registry.example.com:5000/ubuntu:latest`,最后通过`docker push`将镜像上传到仓库。完成镜像上传...
搭建Docker镜像仓库
搭建Docker镜像仓库的步骤如下:首先,如果你之前已经配置过阿里云Docker镜像,可以跳过这一步;如果没有,需要进行配置。配置的重点是使Docker信任你的私服,通常私服使用http协议,因此需要将你的IP地址添加到信任列表中。为了实现这个,你需要创建一个新的配置文件,将相关命令写入其中。接着,利用Docker...
docker registry使用指南
docker registry 的作用就是存储我们的镜像。通常情况下我们可以使用 docker hub 来存储,不过如果是在公司内部使用,不想将镜像公开,可以手动搭建一个本地registry,如 docker registry 或 harbor 。本文简单介绍一下 docker registry 的搭建使用及常用配置。搭建registry最基础的命令为: docker run -d...
...实战进阶篇:搭建Registry&Harbor私有仓库、Dockerfile(八)
搭建Harbor私有仓库时,环境与Registry类似。首先,安装Harbor,可通过GitHub官网下载离线安装包并上传至服务器。接着,设置host,以通过域名访问Harbor。修改Harbor配置文件,创建伪证书以开启HTTPS。执行安装步骤并配置docker/daemon.json,以指定连接Harbor的每台机器的私有仓库地址。访问Harbor服务器地址,确认...