• 如何配置和使用自己的私有 Docker Registry


    Docker Registry 是 Docker 镜像仓库的核心组件,它可以存储和分发 Docker 镜像。在实际应用中,你可能希望有一个自己的私有 Docker Registry,用于安全地存储公司内部的镜像或个人项目的镜像。本文将详细介绍如何在服务器上搭建私有 Docker Registry,并确保它的安全性,使其能够只被授权用户访问。

    目录:
    1. 什么是 Docker Registry?
    2. 搭建私有 Docker Registry
      • 运行 Docker Registry
      • 设置用户名和密码
    3. 配置客户端访问 Docker Registry
      • 修改客户端的 daemon.json
    4. 推送与拉取镜像
      • 推送镜像到私有 Docker Registry
      • 从私有 Docker Registry 拉取镜像
    5. 保证 Docker Registry 的安全性
      • 开放必要的端口
      • 设置身份验证
      • 使用 HTTPS 加密通信
    6. 总结

    1. 什么是 Docker Registry?

    Docker Registry 是存储 Docker 镜像的服务器端应用,它可以用于存储、管理、共享镜像。Docker 官方提供了一个公开的 Docker Hub,但对于许多企业来说,出于安全性或管理需求的考虑,往往需要自建私有 Docker Registry。自建私有仓库可以帮助你:

    • 保持敏感镜像的私密性。
    • 通过局域网或内网加速镜像的拉取和分发。
    • 提供更强的访问控制。

    2. 搭建私有 Docker Registry

    2.1 运行 Docker Registry

    首先,我们需要在服务器上运行 Docker Registry。你可以使用以下命令快速启动一个 Docker Registry 容器:
     

    1. docker run -d -p 8089:5000 --restart=always --name registry \
    2. -v /myregistry/data:/var/lib/registry \
    3. registry:2

    解释:

    • -p 8089:5000:将宿主机的 8089 端口映射到容器内部的 5000 端口,容器内部的 Docker Registry 服务默认监听 5000 端口。
    • -v /myregistry/data:/var/lib/registry:将宿主机的 /myregistry/data 目录挂载到容器内部,用于持久化存储镜像数据。
    • --restart=always:确保容器在 Docker 重启或失败时会自动重启。

    此时,Docker Registry 应该已经启动,并通过 http://<你的服务器公网IP>:8089 可以访问到它。

    2.2 设置用户名和密码

    默认情况下,Docker Registry 是公开的,任何人都可以通过访问你的服务器 IP 来拉取和推送镜像。为了保护你的私有仓库,应该为 Docker Registry 配置用户名和密码进行身份验证。

    首先,你需要安装 htpasswd 工具来生成用户名和密码:

    1. 安装 htpasswd

      1. sudo apt-get update
      2. sudo apt-get install apache2-utils

        2.创建用户名和密码: 使用 htpasswd 命令创建加密的用户名和密码文件: 
     

    1. mkdir -p /myregistry/auth
    2. htpasswd -Bc /myregistry/auth/htpasswd myusername
    • 你会被提示输入密码并确认。这样会生成一个 htpasswd 文件,其中存储了加密后的用户名和密码。

      3.启动带身份验证的 Docker Registry: 使用以下命令重新启动 Docker Registry,并添加身份验证:
       

      1. docker run -d -p 8089:5000 --restart=always --name registry \
      2. -v /myregistry/data:/var/lib/registry \
      3. -v /myregistry/auth:/auth \
      4. -e "REGISTRY_AUTH=htpasswd" \
      5. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
      6. -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
      7. registry:2

      此时,Docker Registry 启用了基本身份验证,只有通过验证的用户才能推送或拉取镜像。


      3. 配置客户端访问 Docker Registry

      在客户端上推送或拉取镜像时,需要先登录 Docker Registry。首先,确保 Docker 客户端知道如何访问你的私有仓库,特别是如果你没有使用 HTTPS。

      3.1 修改客户端的 daemon.json

      如果你没有为 Docker Registry 配置 HTTPS,那么你需要在客户端的 Docker 中允许通过 HTTP 访问私有仓库。可以通过编辑 /etc/docker/daemon.json 文件来实现:

    • 编辑 daemon.json 文件
       

      1. sudo tee /etc/docker/daemon.json <<-'EOF'
      2. {
      3. "registry-mirrors": ["https://<阿里云镜像加速器>"],
      4. "insecure-registries": ["<你的服务器公网IP>:8089"]
      5. }
      6. EOF
    • 这会告诉 Docker 使用镜像加速器,同时允许通过 HTTP 访问你的私有 Docker Registry。

    • 重启 Docker 服务

    sudo systemctl restart docker
    

    4. 推送与拉取镜像

    4.1 推送镜像到私有 Docker Registry
    1. 登录到私有 Docker Registry: 在执行任何操作前,必须先登录你的私有仓库:

    docker login <你的服务器公网IP>:8089
    
    • 系统会提示你输入用户名和密码。成功登录后,你可以推送镜像。

    • 推送镜像

      1. docker build -t <你的服务器公网IP>:8089/my-image .
      2. docker push <你的服务器公网IP>:8089/my-image

      这里 my-image 是你想要推送的镜像名称。

    4.2 从私有 Docker Registry 拉取镜像
    1. 拉取镜像

    docker pull <你的服务器公网IP>:8089/my-image
    
    1. 这将从你的私有仓库中拉取名为 my-image 的镜像。


    5. 保证 Docker Registry 的安全性

    5.1 开放必要的端口

    确保你的服务器防火墙和云服务提供商的安全组允许访问 8089 端口。你可以通过以下命令来开放这个端口:
     

    sudo ufw allow 8089
    

    此外,在云服务器的管理控制台中,确保安全组规则也允许 8089 端口的入站访问。

    5.2 设置身份验证

    如上文所述,使用 htpasswd 工具为 Docker Registry 设置用户名和密码,可以有效防止未授权用户访问。

    5.3 使用 HTTPS 加密通信

    为了避免使用 HTTP 明文传输密码,建议你为 Docker Registry 配置 HTTPS 证书。可以使用 Nginx 作为反向代理,配置 SSL/TLS 证书。以下是大致步骤:

    1. 安装 Nginx 并申请 Let's Encrypt 证书。
    2. 将 Nginx 配置为监听 443 端口,并将请求反向代理到 Docker Registry 的 5000 端口。
    3. 更新客户端的 daemon.json 文件,移除 insecure-registries 配置,并使用 HTTPS 访问私有 Docker Registry。

    6. 总结

    通过上述步骤,你可以成功搭建并配置一个安全的私有 Docker Registry。它允许你将 Docker 镜像安全地推送到私有仓库,并根据需要从中拉取镜像。通过设置身份验证和防火墙规则,你可以确保这个私有仓库不会被未经授权的用户访问。此外,使用 HTTPS 可以进一步增强安全性,避免敏感信息在传输过程中泄露。

    搭建自己的私有 Docker Registry 后,整个团队可以快速、可靠地分发和管理 Docker 镜像,而不依赖于第三方服务。这不仅提高了安全性,也大大提升了 DevOps 效率。

  • 相关阅读:
    【五】Socket函数详解
    大数据培训教程Combiner合并
    JAVA计算机毕业设计宠物领养系统Mybatis+系统+数据库+调试部署
    使用Qt QML创建自定义表格组件
    RSS阅读器
    【MySQL】(五)DML表数据操作——数据的插入、修改、删除
    【力扣hot100】刷题笔记Day25
    虚拟人铺路数字产业未来
    外包干了三年,快要废了。。。
    (10)Qt---项目打包
  • 原文地址:https://blog.csdn.net/mbs6176966/article/details/142216313