【问题标题】:How to locally backup the images of a local Docker-registry?如何在本地备份本地 Docker-registry 的镜像?
【发布时间】:2021-07-05 18:30:29
【问题描述】:
  • 如何创建一个本地注册表容器,该容器从主机装载一个卷并在本地保存所有被拉取的图像?

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

应该可以有一个临时的注册表容器(及其 docker 卷),允许 不多次下载图像,即使在注册表(或整个 Docker 虚拟机)被抛出之后离开并重新创建。

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

注意事项:

  • 装载的目标应该是/var/lib/registry/docker/registry
  • 可以将本地 Docker 注册表配置为 pull-through cache
  • 我的特定设置在 macOS 上通过 minikube 运行 docker;但答案不一定是特定的。

【问题讨论】:

    标签: docker minikube docker-registry docker-volume


    【解决方案1】:

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

    配置

    首先使用所需的值定义您的环境变量。请参阅下面代码中的 env-vars(PROXIED_REGISTRYREGISTRY_USERNAMEREGISTRY_PASSWORDPATH_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 真的很有用)


    参考资料:

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 2017-11-30
      • 2019-08-13
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2020-01-06
      相关资源
      最近更新 更多