本文涉及一种在服务器部使用 registry 署私有镜像仓库的方法。经验证,可达到预期目标,并能应用在实际工作中。

一、引言

由于测试服务器无法使用外部网络,而又需要容器化部署应用程序。经考虑,使用 registry 搭建 docker 镜像仓库服务。当然,能提供类似的软件很多,功能也比较强大,但时间紧任务重,使用最简单的方式即可。

二、技术小结

  • 拉取 registry 镜像。
  • 运行 registry 容器,注意挂载目录。
  • 编辑daemon.json文件,添加仓库地址。

三、实践

3.1 下载、运行

拉取registry镜像:

docker pull registry:2

注:

实际操作中,因为服务器无法连接外部网络,因为是先在虚拟机下载好镜像,再通过docker save导出镜像,再用scp上传到服务器,再用docker load导入到服务器,完成“下载”动作。

新建工程目录,用于存储配置文件及数据文件。

新建config.yml配置文件:

version: 0.1
log:fields:service: registry
storage:delete:enabled: truecache:blobdescriptor: inmemoryfilesystem:rootdirectory: /var/lib/registry
http:addr: :5000headers:X-Content-Type-Options: [nosniff]
health:storagedriver:enabled: trueinterval: 10sthreshold: 3

注:上述config.yml文件实际是笔者启动容器后,直接取 /etc/docker/registry/config.yml 文件内容的,因为要加配置,所以单独拿出挂载。

上述文件加了删除使能配置。

docker-compose.yaml配置文件:

version: '2'services:ttregistry:image: registry:2container_name: ttregistryrestart: alwaysvolumes:- ./registry_data:/var/lib/registry- ./config.yml:/etc/docker/registry/config.yml environment:- TZ=Asia/Shanghaiports:- "5000:5000"networks:- registry-netnetworks:registry-net:driver: bridge

启动:

docker-compose up -d

3.2 配置仓库地址

因为本文registry没有配置https模式,而docker命令默认是该模式,因此需要设置非安全仓库地址。在daemon.json 中添加,示例:

$ cat /etc/docker/daemon.json
{"registry-mirrors": ["https://a8qh6yqv.mirror.aliyuncs.com","http://hub-mirror.c.163.com"],"insecure-registries": ["http://172.18.18.168:5000"]
}

不管推送镜像还是拉取镜像,都可能遇到此问题。因此,都要在相应的机器上进行设置。

设置好后,需要重启docker服务:

sudo systemctl restart docker

如不配置,则在推送或拉取镜像出错,示例:

Using default tag: latest
Error response from daemon: Get https://172.18.18.168:5000/v2/: http: server gave HTTP response to HTTPS client

3.3 测试

拉取官方镜像

docker pull busybox

需要将镜像打上标签,否则默认上传到 docker 官方仓库。

#标记镜像
$ docker tag busybox 172.18.18.168:5000/busybox

推送镜像到私有仓库

$ docker push 172.18.18.168:5000/busybox
Using default tag: latest
The push refers to repository [172.18.18.168:5000/busybox]
01fd6df81c8e: Pushed
latest: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527

在另一机器上尝试拉取:

docker pull 172.18.18.168:5000/busybox

四、操作

4.1 接口

访问:http://172.18.18.168:5000/v2/,显示{},说明服务运行正常。

查询有哪些镜像:http://172.18.18.168:5000/v2/_catalog

查询某个镜像的版本:http://172.18.18.168:5000/v2/busybox/tags/list

4.2 命令

4.2.1 获取镜像信息

curl -H "Accept:application/vnd.docker.distribution.manifest.v2+json" http://172.18.18.168:5000/v2/<镜像名称>/manifests/<镜像版本>

示例:

$curl  -H "Accept:application/vnd.docker.distribution.manifest.v2+json" http://172.18.18.168:5000/v2/busybox/manifests/latest{"schemaVersion": 2,"mediaType": "application/vnd.docker.distribution.manifest.v2+json","config": {"mediaType": "application/vnd.docker.container.image.v1+json","size": 1456,"digest": "sha256:beae173ccac6ad749f76713cf4440fe3d21d1043fe616dfbe30775815d1d0f6a"},"layers": [{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip","size": 772788,"digest": "sha256:5cc84ad355aaa64f46ea9c7bbcc319a9d808ab15088a27209c9e70ef86e5a2aa"}]
}

注:

如果curl没有加-H字段,得到的结果较乱,不太方便分析,因此加上。

在浏览器直接访问亦可,但笔者测试发现,要下载文件再分析,故不采用。

4.2.2 删除镜像(测试不成功)

删除镜像需指定digest值,从获取镜像信息的config字段中找到即可。命令:

curl -X DELETE http://172.18.18.168:5000/v2/<镜像>/manifests/sha256:<config字段的digest值>

示例:

curl -X DELETE http://172.18.18.168:5000/v2/busybox/manifests/sha256:beae173ccac6ad749f76713cf4440fe3d21d1043fe616dfbe30775815d1d0f6a

垃圾回收:

docker exec -it ttregistry bin/registry garbage-collect /etc/docker/registry/config.yml

4.2.3 删除镜像另一法(有效)

些法是直接在物理层面删除,通过重启服务方式彻底删除。可不用上面配置delete功能。

删除存储卷上的镜像:

rm -rf registry_data/docker/registry/v2/repositories/busybox/

执行垃圾回收。

重启registry容器。

五、小结

本着适目的(其实是时间不足),本文仅使用 registry 即能达到目标,因此不再继续研究 Harbor 等高端的服务,日后如有必要,再进行亦未晚。实际上,笔者对 Harbor 也有接触,那时有雄心有干劲(挣钱),但那是很多年前的事了。

李迟 2022.10.20 周四 夜

我的docker随笔38:用 registry 搭建私有仓库相关推荐

  1. 【Docker】Registry搭建私有仓库、证书认证、用户登录认证

    一.Docker Registry工作原理 02_Docker Registry角色 Docker Registry有三个角色,分别是index.registry和registry client. i ...

  2. Docker 容器仓库之搭建私有仓库、hub仓库

    一.什么是仓库 Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像. Docker运行中使用的默认仓库 ...

  3. docker搭建私有仓库

    紧接上一篇镜像发布到官方之后,我们来搭建我们自己的私有仓库,比较,如果真的要在生产环境使用的话,这是必须的. 首先,我们来准备一下搭建私有仓库所需要的信息. #先吧私有仓库down下来,这需要一点时间 ...

  4. Docker入门之四搭建私有仓库

    前面学习了下镜像和容器,今天来学习下仓库,来搭建本地私有仓库.当然可以使用远程的共有的仓库,但在企业中有的还是放在本地,所以需要搭建私有仓库. 一.搭建仓库 可以在容器中run一个仓库镜像. dock ...

  5. Windows系统用Docker搭建私有仓库

    Windows系统用Docker搭建私有仓库 一.安装Docker Desktop 二.创建私有仓库 三.验证私有仓库是否创建成功 一.安装Docker Desktop 1.1.可以在软件管家安装这个 ...

  6. Harbor搭建私有仓库

    Harbor搭建私有仓库 Harbor简介     Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,可以用来构建企业内部的Docker镜像仓库.详细介绍可参考 [干货] ...

  7. Docker容器管理平台Humpback进阶-私有仓库

    Docker私有仓库 在 Docker 中,当我们执行 docker pull xxx 的时候,可能会比较好奇,docker 会去哪儿查找并下载镜像呢? 它实际上是从 registry.hub.doc ...

  8. docker安装各类软件以及创建私有仓库总结

    十一看了十次方的视频,特地对docker的操作进行了总结 前提docker安装完毕,docker安装https://www.cnblogs.com/yufeng218/p/8370670.html 里 ...

  9. 玩转NPM,搭建私有仓库-姜威-专题视频课程

    玩转NPM,搭建私有仓库-152人已学习 课程介绍         NPM是前端工程师必用的工具之一,本课程从 install 项目管理开始,逐步介绍NPM的相关命令,如何上传第一个自己的npm包,如 ...

最新文章

  1. QT计算器功能的实现
  2. gcc和g++的区别
  3. 使用JavaParser从源文件中提取JavaDoc文档
  4. python orm框架sqlalchemy_python ORM框架:SqlAlchemy
  5. 异步非阻塞_细说同步异步、阻塞非阻塞
  6. Sublime Text 2搭建Java开发环境
  7. 数据结构-栈的实现之括号匹配检测
  8. 应该怎么评价大数据杀熟?
  9. thinkpad Fn键设置
  10. 克孜勒苏柯尔克孜自治州谷歌高清卫星地图下载
  11. 坑爹的苹果机不执行ajax请求,苹果机加载外部Jquery失败
  12. !impotent的标准支持
  13. 巧萌易携之ROS2Go的不完全教研攻略
  14. 水墨特效怎么做?两种方法快速搞定!大神都在用的超美视频画面效果
  15. java bigram_Android (Java) 编码惯例及最佳实践
  16. 单细胞论文记录(part19)--A comprehensive comparison on cell-type composition inference for ST data
  17. 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1514378309187...
  18. 实战 .Net 数据访问层 - 19
  19. matlab构造差商表,牛顿法 代数插值 – 差商表的求法
  20. 高考招生计划数据采集系统设计

热门文章

  1. 关于py2neo中的merge,create,当反复执行时,会出现什么。。。
  2. 史上最强Tomcat8性能优化
  3. 【最新重磅整理】82篇AAAI2021强化学习领域论文接收列表
  4. C#设计模式——组合模式(Composite Pattern)
  5. ssh免密码登录配置方法,(图示加命令)
  6. 计算机电子琴谱小星星,小星星电子琴谱
  7. QT运行时报错Gtk-Message: 20:31:49.219: Failed to load module “canberra-gtk-module
  8. springboot毕业设计 基于springboot多用户商城(淘宝京东)系统毕业设计设计与实现参考
  9. Silverlight视频语音聊天项目
  10. Android Alpha 更改图片透明度