FSA全栈行动 FSA全栈行动
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr

公众号:FSA全栈行动

记录学习过程中的知识
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr
  • Linux音视频

  • Docker

    • Docker - 安装、加速和基本使用
    • Docker - 操作镜像资源
    • Docker - 操作容器
    • Docker - 私有仓库Registry
      • 拉取私有仓库镜像
      • 设置私有仓库地址
      • 运行私有仓库镜像资源
      • 上传镜像
      • 拉取镜像
      • 搜索镜像
        • 列出仓库中所有的镜像
        • 列出指定镜像的所有标签
      • 删除镜像
        • 删除失败
      • 垃圾回收
    • Docker - 数据管理
    • Docker - 网络管理
    • Docker - Dockerfile的使用
    • Docker - Compose的使用
  • Python环境

  • Python爬虫

  • 后端
  • Docker
LinXunFeng
2021-01-31
目录

Docker - 私有仓库Registry

欢迎关注微信公众号:[FSA全栈行动 👋]

私有仓库: 在本地(局域网)搭建的一个类似公共仓库的东西,我们可以将镜像提交到私有仓库中,供局域网内的其它人拉取使用。 本文以 Registry 为例,并在提供私有仓库的主机上操作

# 拉取私有仓库镜像

请先确保你当前拥有的镜像有 registry 如果没有,可以先拉取下来

docker image pull registry

# 设置私有仓库地址

vim /etc/docker/daemon.json

修改 insecure-registries 的值,提供私有仓库的主机的ip地址和端口

{
  ...
  "insecure-registries":[
    "192.168.1.234:5000"
  ],
  ...
}

Mac软件版 修改后重新启动 docker 服务

# 运行私有仓库镜像资源

将 registry 镜像生成一个容器并运行起来

# -p 5000:5000 
# 第一个是容器使用的端口,第二个是本地端口,这里是本地端口映射到把容器的端口
docker run -d -p 5000:5000 registry
~/lxf ❯ docker ps
❯ docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS      NAMES
f12ad7ae43ca   registry   "/entrypoint.sh /etc…"   9 minutes ago   Up 9 minutes   5000/tcp   nostalgic_elion

此时你可以访问如下地址,如果看到 {} 就说明 Registry 运行正常

http://192.168.1.234:5000/v2/

# 上传镜像

比如此时我要将 ubuntu 这个镜像上传到私有仓库

# 给ubuntu镜像打一个tag,命名需为 私有仓库主机ip:端口/镜像名:[版本号,不加默认为latest]
docker tag ubuntu:latest 192.168.1.234:5000/ubuntu:v0.1

开始上传镜像至本地的私有仓库中

# docker push <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker push 192.168.1.234:5000/ubuntu:v0.1

# 拉取镜像

先将本地的 v0.1 删掉

docker rmi 192.168.1.234:5000/ubuntu:v0.1

拉取私有仓库中 ubuntu 的 0.1 版本镜像

# docker pull <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker pull 192.168.1.234:5000/ubuntu:v0.1

# 搜索镜像

Registry 不支持通过 docker search 这种方式去搜索镜像,会报 404 的错误 需要使用 V2 API 去查询

# 列出仓库中所有的镜像

curl 192.168.1.234:5000/v2/_catalog

# 列出指定镜像的所有标签

# curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list
curl 192.168.1.234:5000/v2/lxf/tags/list

# 删除镜像

查找指定标签的镜像的 digest ,再根据这个 digest 来删除,以删除 lxf:0.2 镜像为例

先执行命令找到该镜像的 digest

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET  http://192.168.1.234:5000/v2/lxf/manifests/0.2 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'

得到输出值

sha256:4e4bc990609ed865e07afc8427c30ffdddca5153fd4e82c20d8f0783a291e241

根据 digest 来删除镜像

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE http://192.168.1.234:5000/v2/lxf/manifests/sha256:4e4bc990609ed865e07afc8427c30ffdddca5153fd4e82c20d8f0783a291e241

这个时候只是删除镜像的元数据,并没有真正从硬盘上删除镜像,需要执行垃圾回收才行。

# 删除失败

遇到 405 UNSUPPORTED 错误

需要在运行 Registry 容器时设置REGISTRY_STORAGE_DELETE_ENABLED 为 true

举例

docker-compose.yaml:设置环境变量

environment:
    REGISTRY_STORAGE_DELETE_ENABLED: "true"

docker run:添加参数

# -e REGISTRY_STORAGE_DELETE_ENABLED="true"
docker run -d -p 5000:5000 -e REGISTRY_STORAGE_DELETE_ENABLED="true" registry

# 垃圾回收

执行垃圾回收,上述删除的镜像才会真正从硬盘上移除

docker exec -it registry的容器名 /bin/registry garbage-collect /etc/docker/registry/config.yml

#Docker
Docker - 操作容器
Docker - 数据管理

← Docker - 操作容器 Docker - 数据管理→

最近更新
01
Flutter - Xcode16 还原编译速度
04-05
02
AI - 免费的 Cursor 平替方案
03-30
03
Android - 2025年安卓真的闭源了吗
03-28
更多文章>
Theme by Vdoing | Copyright © 2020-2025 FSA全栈行动
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×