如何在本地备份本地 Docker-registry 的映像?

How to locally backup the images of a local Docker-registry?


具有持久图像的本地 Docker 注册表

应该可以有一个临时注册表容器(及其 docker 卷),允许 不下载图像超过一次 ,即使在注册表之后(或整个 Docker VM)被丢弃并重新创建。

将允许只提取一次 图像,当互联网连接不好(或根本不可用)时让它们可用;还允许安装带有预下载图像的 docker volume
这比必须手动 docker push/docker pull 到本地注册表或 docker save/docker load 需要在那里可用的每个图像更方便。

备注:

我做到了,这里是分步说明。希望能让其他人的生活更轻松!

配置

首先使用所需的值定义环境变量。请参阅下面代码中的环境变量(PROXIED_REGISTRYREGISTRY_USERNAMEREGISTRY_PASSWORDPATH_WHERE_TO_PERSIST_IMAGES 等)

在主机上

迷你库

如果使用 minikube,首先绑定到其 VM 上的 docker

eval $(minikube docker-env)

或 运行 直接从 VM 内部通过 minikube ssh.

命令

创建本地注册表

(注意:某些环境可能是不必要的;查看 Docker 文档以查看您需要什么)

-v 选项将您要保存注册表数据(存储库文件夹和图像层)的路径挂载到本地注册表。
当您使用 Minikube 时,后者 will automatically mount the home folder from the host/Users/,在 macOS 上)到虚拟机上 Docker 是 运行.

docker run -d -p 5000:5000 \
    -e STANDALONE=false \
    -e "REGISTRY_LOG_LEVEL=debug" \
    -e "REGISTRY_REDIRECT_DISABLE=true" \
    -e MIRROR_SOURCE="https://${PROXIED_REGISTRY}" \
    -e REGISTRY_PROXY_REMOTEURL="https://${PROXIED_REGISTRY}" \
    -e REGISTRY_PROXY_USERNAME="${REGISTRY_USER}" \
    -e REGISTRY_PROXY_PASSWORD="${REGISTRY_PASSWORD}" \
    -v /Users/${MACOS_USERNAME}/${PATH_WHERE_TO_PERSIST_IMAGES}/docker/registry:/var/lib/registry \
    --restart=always \
    --name local-registry \
    registry:2

登录到您的本地注册表

echo -n "${REGISTRY_PASSWORD}" | docker login -u "${REGISTRY_USER}" --password-stdin "localhost:5000"

(可选)验证持久目录是否存在

docker exec registry ls -la /var/lib/registry/docker/registry
ll /Users/${MACOS_USERNAME}/${PATH_WHERE_TO_PERSIST_IMAGES}/docker/registry/docker/registry

尝试从您的私有注册表中提取一个映像

(查看它通过存储库代理 localhost:5000

docker pull localhost:5000/${REPOSITORY}/${IMAGE}:${IMAGE_TAG}

(可选)验证图像数据是否已在需要的地方同步到本地主机

docker exec registry ls -la /var/lib/registry/docker/registry
ll /Users/${MACOS_USERNAME}/${PATH_WHERE_TO_PERSIST_IMAGES}/docker/registry/docker/registry

如果使用 Kubernetes

将部署 spec 容器 image 更改为:

localhost:5000/${REPOSITORY}/${IMAGE}:${IMAGE_TAG}

瞧瞧!
您现在可以将从您的存储库下载的图像存储在您的主机上!
如果互联网可用,本地注册表将确保拥有最新版本的拉取图像,并向代理注册表(私有或 Docker 集线器)请求它。

当您的互联网连接太慢而无法重新下载您需要的所有内容,或者完全不可用时,您将有一个最后的备份到 运行 您的容器!
(对 Minikube 非常有用,当你需要销毁你的 docker 虚拟机时)


参考文献: