如何在本地备份本地 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
需要在那里可用的每个图像更方便。
备注:
- 装载的目的地可能应该是
/var/lib/registry/docker/registry
.
- 可以将本地 Docker 注册表配置为 pull-through cache。
- 我的特定设置通过
minikube
在 macOS 上运行 docker
;但答案不必特定于它。
我做到了,这里是分步说明。希望能让其他人的生活更轻松!
配置
首先使用所需的值定义环境变量。请参阅下面代码中的环境变量(PROXIED_REGISTRY
、REGISTRY_USERNAME
、REGISTRY_PASSWORD
、PATH_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 虚拟机时)
参考文献:
- 如何创建一个本地注册表容器,从主机安装一个卷并在本地持久保存所有拉取的图像?
具有持久图像的本地 Docker 注册表
应该可以有一个临时注册表容器(及其 docker 卷),允许 不下载图像超过一次 ,即使在注册表之后(或整个 Docker VM)被丢弃并重新创建。
这 将允许只提取一次 图像,当互联网连接不好(或根本不可用)时让它们可用;还允许安装带有预下载图像的 docker volume
。
这比必须手动 docker push
/docker pull
到本地注册表或 docker save
/docker load
需要在那里可用的每个图像更方便。
备注:
- 装载的目的地可能应该是
/var/lib/registry/docker/registry
. - 可以将本地 Docker 注册表配置为 pull-through cache。
- 我的特定设置通过
minikube
在 macOS 上运行docker
;但答案不必特定于它。
我做到了,这里是分步说明。希望能让其他人的生活更轻松!
配置
首先使用所需的值定义环境变量。请参阅下面代码中的环境变量(PROXIED_REGISTRY
、REGISTRY_USERNAME
、REGISTRY_PASSWORD
、PATH_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 虚拟机时)