我做到了,这里是分步说明。希望能让其他人的生活更轻松!
配置
首先使用所需的值定义您的环境变量。请参阅下面代码中的 env-vars(PROXIED_REGISTRY、REGISTRY_USERNAME、REGISTRY_PASSWORD、PATH_WHERE_TO_PERSIST_IMAGES 等)
在主机上
Minikube
如果使用 minikube,首先绑定到其 VM 上的 docker
eval $(minikube docker-env)
或通过minikube ssh直接从VM内部运行命令。
创建本地注册表
(注意:某些环境可能是不必要的;查看 Docker 文档以了解您需要什么)
-v 选项将您希望保留注册表数据(存储库文件夹和映像层)的路径安装到本地注册表。
当您使用 Minikube 时,后者 will automatically mount the home folder from the host(/Users/,在 macOS 上)到运行 Docker 的虚拟机上。 p>
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 中心)。
当您的互联网连接速度太慢而无法重新下载所需的所有内容或完全不可用时,您也将有一个最后的备份来运行您的容器!
(当你需要销毁你的 docker 虚拟机时,Minikube 真的很有用)
参考资料: