docker私人仓库搭建与运维

Administrator
Administrator
发布于 2025-04-16 / 52 阅读
0
0

docker私人仓库搭建与运维

初始化操作

拉取镜像

docker pull registry:2

创建config.yml文件

version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

运行registry

docker run -d \
  -p 5000:5000 \
  --name registry \
  -v /catelogue-for-volume/registry/registry-data:/var/lib/registry \
  -v /catelogue-for-volume/registry/config.yml:/etc/docker/registry/config.yml \
  --restart=always \
  registry:2

查看docker仓库

http://124.221.119.150:5000/v2/_catalog

在使用docker的服务器上配置通过HTTP协议拉取镜像

配置文件路径:/etc/docker/daemon.json
将124.221.119.150:5000加入insecure-registries,例如


{
  "registry-mirrors": ["https://docker.1ms.run"],
  "insecure-registries": ["124.221.119.150:5000"]
}

在使用docker的服务器上通过tag命令重构某个镜像文件(例如:alpine:latest)

docker tag alpine:latest 124.221.119.150:5000/myalpine:latest

推送镜像

docker push 124.221.119.150:5000/myalpine:latest

通过该接口查看推送的镜像

http://124.221.119.150:5000/v2/_catalog

通过该接口查看某个镜像的所有版本

http://124.221.119.150:5000/v2/<镜像名称>/tags/list

拉取镜像

docker pull 124.221.119.150:5000/myalpine:latest

备份及恢复

备份

备份前先查看路径是否正确
ls -ld /catelogue-for-volume/registry/data  # 查看目录是否存在及权限
备份成压缩包
sudo tar -czvf registry-backup-$(date +%Y%m%d).tar.gz /catelogue-for-volume/registry/data

恢复

停止运行registry
docker stop registry  # 如果容器名为 registry
解压
sudo tar -xzvf /root/registry-backup-20250421.tar.gz -C /
权限修复
sudo chown -R 1000:1000 /root/registry/data  # 根据实际 Registry 容器用户 ID 调整
重启registry服务
# 1. 停止并删除旧容器
docker stop registry
docker rm registry

# 2. 重新启动 Registry(使用你指定的 registry:2 镜像)
docker run -d --name registry \
  -v /root/registry/data:/var/lib/registry \
  -p 5000:5000 \
  registry:2

删除(例如myalpine:latest)

MANIFEST=$(curl -sI -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
  http://localhost:5000/v2/myalpine/manifests/latest | grep 'Docker-Content-Digest' | awk '{print $2}' | tr -d '\r\n')

echo "尝试删除 Manifest: ${MANIFEST}"
curl -v -X DELETE "http://localhost:5000/v2/myalpine/manifests/${MANIFEST}"

docker exec registry registry garbage-collect /etc/docker/registry/config.yml --delete-untagged

# 检查 myalpine 的标签(应返回 404)
curl -v http://localhost:5000/v2/myalpine/tags/list


评论