Docker 本地私有镜像库部署与使用

Docke

r 本地私有镜像库部署与使用

  • 文档资料
  • 前提条件
  • 部署本地私有镜像库
    • 1. 获取 Docker Hub 中的 Registry 官方镜像
    • 2. 拉取 Registry 镜像
    • 3. 复查 Registry 官方镜像是否已完成下载
    • 4. 创建 Registry 镜像的持久化路径
    • 5. 启用 Registry 镜像
    • 6. 复查 Region 容器状态
    • 7. 调整配置文件 daemon.json
    • 8. 刷新系统配置
    • 9. 重启 Docker 服务
    • 10. 复查本地私有镜像库配置是否生效
  • 测试上传镜像至本地私有镜像库
    • 1. 调整镜像标签
    • 2. 复查标签是否生效
    • 3. 上传镜像
    • 4. 查看私有库存有的所有镜像
    • 5. 查看指定镜像的所有标签
    • 删除本地私有镜像库中的镜像
      • 1. 获取指定标签的指定镜像的 sha256 值(镜像的 sha256 值为唯一标识)
      • 2. 删除元数据信息
      • 3. 删除实际数据

文档资料

  • Docker 文档:https://www.docker.com/blog/how-to-use-your-own-registry-2

前提条件

  • Docker-CE:需提前安装 Docker 服务
  • Docker Hub:保证可从 docker hub 中获取镜像

部署本地私有镜像库

1. 获取 Docker Hub 中的 Registry 官方镜像

docker search --filter "is-official=true" registry

# 输出结果
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
registry                         Distribution implementation for storing and …   3919      [OK]

2. 拉取 Registry 镜像

docker pull registry

3. 复查 Registry 官方镜像是否已完成下载

docker images registry

# 输出结果
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
registry     latest    b8604a3fe854   2 years ago   26.2MB

4. 创建 Registry 镜像的持久化路径

mkdir -p /data/service/docker/registry

5. 启用 Registry 镜像

# 参数解释
# -itd:在容器中打开一个伪终端进行交互操作,并在后台运行
# /data/service/docker/registry:/var/lib/registry:将容器内的 /var/lib/registry 目录映射至宿主机的 /data/service/docker/registry 目录
# -p 5000:5000:将容器内的端口号 5000 映射至宿主机的端口号 5000
# -e REGISTRY_STORAGE_DELETE_ENABLED="true": 允许删除镜像
# --restart=always:在容器退出时,总是重启容器
# --name registry:指定所创建容器的名称为 registry

docker run -itd -v /data/service/docker/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest -e REGISTRY_STORAGE_DELETE_ENABLED="true" 

6. 复查 Region 容器状态

docker ps -f "name=registry"

# 输出结果
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS       PORTS                                       NAMES
10461fcbf804   registry:latest   "/entrypoint.sh /etc…"   8 months ago   Up 2 weeks   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

7. 调整配置文件 daemon.json

{
  /* IP 地址为宿主机 IP 地址
   * 端口号为后续重启容器时所映射的宿主机端口号
   */
  "insecure-registries": ["10.10.10.21:5000"]
}

8. 刷新系统配置

systemctl daemon-reload

9. 重启 Docker 服务

systemctl restart docker

10. 复查本地私有镜像库配置是否生效

docker info | grep -A 2 "Insecure Registries"
 
# 输出结果
Insecure Registries:
  10.10.10.21:5000
  127.0.0.0/8

测试上传镜像至本地私有镜像库

1. 调整镜像标签

# centos:7.9.2009:现有镜像与标签
# 10.10.10.21:5000/centos:7.9.2009:新标签

docker tag centos:7.9.2009 10.10.10.21:5000/centos:7.9.2009 

2. 复查标签是否生效

docker image centos

3. 上传镜像

docker push 10.10.10.21:5000/centos:7.9.2009

4. 查看私有库存有的所有镜像

curl http://10.10.10.21:5000/v2/_catalog

# 输出结果
{"repositories":["centos"]}

5. 查看指定镜像的所有标签

curl http://10.10.10.21:5000/v2/centos/tags/list

# 输出结果
{"name":"centos","tags":["7.9.2009"]}

删除本地私有镜像库中的镜像

1. 获取指定标签的指定镜像的 sha256 值(镜像的 sha256 值为唯一标识)

curl -v --silent "10.10.10.21:5000/v2/centos/manifests/7.9.2009" 2>&1 | grep Docker-Content-Digest | awk '{print $3}'

2. 删除元数据信息

curl -I -X DELETE http://10.10.10.21:5000/v2/fbgweb//manifests/sha256:f807503d35c84442bac9eec105457d279e8b81d62d0235bb9dd0598887710e30

# 输出信息
HTTP/1.1 301 Moved Permanently
Docker-Distribution-Api-Version: registry/2.0
Location: /v2/fbgweb/manifests/sha256:f807503d35c84442bac9eec105457d279e8b81d62d0235bb9dd0598887710e30
Date: Sat, 01 Apr 2023 03:13:34 GMT
Content-Length: 0

3. 删除实际数据

# 登录镜像
docker exec -it registry /bin/sh

# 按元数据信息,清理实际数据
registry garbage-collect /etc/docker/registry/config.yml