• 【Docker】搭建 Docker 镜像仓库



    前言:公有仓库和私有仓库

    Docker 生态系统中,镜像仓库(Docker Registry)扮演着关键的角色,用于存储和分享 Docker 镜像。镜像仓库有公共的和私有的两种形式,每种形式都有其特定的应用场景。

    公共镜像仓库

    1. Docker Hub

    Docker Hub 是 Docker 公共仓库,是最大的 Docker 镜像仓库之一。它提供了大量的公共镜像供用户使用。你可以在 Docker Hub 上找到官方的基础镜像,也可以找到其他用户分享的各种应用和工具的镜像。

    1. 国内云服务商提供的公共仓库

    由于 Docker Hub 在国内访问速度较慢,一些国内的云服务商提供了类似于 Docker Hub 的公开服务。例如,网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等,都提供了稳定、快速的公共镜像仓库。

    私有镜像仓库

    1. 为什么搭建私有镜像仓库?

    虽然公共仓库提供了大量的镜像供用户使用,但在一些特定的场景下,企业或个人可能希望搭建自己的私有 Docker Registry。主要原因包括:

    • 安全性: 一些敏感的应用或数据不适合存储在公共仓库中,因此需要一个受控的、私有的存储环境。

    • 带宽控制: 在一些特殊网络环境下,使用公共仓库的下载速度可能不理想,搭建私有仓库可以更好地控制镜像的拉取速度。

    • 定制需求: 企业可能有自己特殊的镜像需求,需要在内部构建和管理特定版本的镜像。

    1. Docker Registry

    Docker Registry 是 Docker 提供的官方仓库服务,支持用户搭建自己的私有镜像仓库。你可以将 Docker Registry 部署在自己的服务器上,并通过简单的配置来实现私有仓库的搭建。

    搭建私有 Docker Registry 的详细步骤可以参考官方文档:Docker Registry 部署

    1. 私有 Docker Registry 在企业中的应用

    在企业内部,私有 Docker Registry 的应用非常广泛。它不仅为企业提供了更加安全和可控的镜像管理环境,还支持企业内部的持续集成和持续部署流程。通过搭建私有仓库,企业可以更好地管理和定制自己的镜像,确保应用的稳定和安全运行。

    总的来说,选择使用公共仓库还是搭建私有仓库,取决于具体的使用场景和需求。在实际应用中,有时候也会采用公共仓库和私有仓库结合的方式,根据实际需求灵活选择。

    一、搭建 Docker 镜像仓库

    在 Docker 生态系统中,镜像仓库(Docker Registry)用于存储和管理 Docker 镜像。你可以选择使用公共仓库,比如 Docker Hub,也可以搭建私有的 Docker Registry,方便自己团队或组织内部使用。

    官网地址:https://hub.docker.com/_/registry

    1.1 搭建简化版的镜像仓库

    Docker 官方提供了一个简化版的 Docker Registry 镜像,具备完整的仓库管理功能,但缺乏图形化界面。下面是一个简单的搭建命令:

    docker run -d \
        --restart=always \
        --name registry \
        -p 5000:5000 \
        -v registry-data:/var/lib/registry \
        registry
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这个命令中的参数说明:

    • -d: 后台运行容器。
    • --restart=always: 设置容器总是在 Docker 启动时重新启动。
    • --name registry: 为容器指定一个名字,这里是 registry
    • -p 5000:5000: 将主机的 5000 端口映射到容器的 5000 端口。
    • -v registry-data:/var/lib/registry: 挂载数据卷 registry-data 到容器内的 /var/lib/registry 目录,用于持久化存储镜像数据。
    • registry: 使用的镜像名称。

    通过上述命令,就成功运行了一个 Docker Registry 服务。访问 http://主机IP:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像。

    1.2 搭建带有图形化界面的镜像仓库

    有一些第三方工具可以为 Docker Registry 提供图形化界面,使得镜像的管理更加直观。一个常用的工具是 docker-registry-ui。通过 Docker Compose,我们可以很容易地搭建一个带有图形化界面的 Docker Registry 服务。以下是一个简单的 docker-compose.yml 文件:

    version: '3.0'
    services:
      registry:
        image: registry
        volumes:
          - ./registry-data:/var/lib/registry
      ui:
        image: joxit/docker-registry-ui:static
        ports:
          - 8080:80
        environment:
          - REGISTRY_TITLE=私有仓库
          - REGISTRY_URL=http://registry:5000
        depends_on:
          - registry
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这个 docker-compose.yml 文件包括两个服务:registryui。其中,registry 使用官方 Docker Registry 镜像,并挂载数据卷;ui 使用 docker-registry-ui 镜像,并配置了环境变量,包括私有仓库的标题和地址。

    1.3 配置 Docker 信任地址

    因为私服采用的是 HTTP 协议,默认不被 Docker 信任,所以需要进行配置。编辑 Docker 守护进程配置文件:

    # 打开要修改的文件
    vim /etc/docker/daemon.json
    
    • 1
    • 2

    添加如下内容:

    "insecure-registries": ["http://主机IP:8080"]
    
    • 1

    保存并退出。重载 Docker 守护进程配置并重启 Docker:

    systemctl daemon-reload
    systemctl restart docker
    
    • 1
    • 2

    通过以上步骤,就成功搭建了一个简化版的 Docker 镜像仓库,并且还可以使用 Docker Compose 部署一个带有图形化界面的 Docker Registry。


    然后通过浏览器访问:http://主机IP:8080/,就可以看到私有镜像查看的 UI 界面了。

    二、向私有镜像仓库推送和拉取镜像

    2.1 推送本地镜像到私有仓库

    1. 例如,现在要把本地的镜像 nginx,重新tagnginx:1.0,注意,名称前缀为私有仓库的地址:192.168.150.101:8080/
    docker tag nginx:latest 192.168.211.128:8080/nginx:1.0
    
    
    • 1
    • 2

    其含义是给本地镜像打上一个新标签,使其适应私有仓库地址。

    1. 然后再把它推送到私有仓库:
    docker push 192.168.211.128:8080/nginx:1.0
    
    • 1

    其含义是将标签过的镜像推送到私有仓库。

    1. 推送成功后,就可以在私有仓库的图形化界面中看到相应的镜像。

    2.2 拉取私有仓库中的镜像

    拉取镜像是将远程仓库中的镜像下载到本地使用的过程。使用 Docker 命令可以很方便地从私有仓库中拉取镜像。
    推送本地镜像到私有仓库的过程已经很详细了。接下来,我们来看一下拉取镜像的步骤。

    现在私有仓库中有一个镜像 nginx:1.0,我们可以通过以下命令将其拉取到本地:

    docker pull 192.168.211.128:8080/nginx:1.0
    
    • 1

    这个命令的含义是从指定的私有仓库地址拉取标签为 1.0nginx 镜像。

    拉取成功后,就可以在本地使用这个镜像。

    例如,拉取私有仓库镜像的整个步骤:

    1. 首先删除本地的nginx镜像

    2. 从私有仓库拉取镜像

    可以直接在私有仓库的 UI 界面直接复制拉取镜像的命令:

    执行在终端中执行这个命令,发现拉取成功了:

  • 相关阅读:
    C陷阱与缺陷 第6章 预处理器 6.3 宏并不是语句
    产品经理专业知识50篇(七)-如何建立一套完整的用户成长体系?
    Service
    小目标检测方法总结
    Restful风格的编程
    第14章 结构和其他数据形式
    【Go blog】Govulncheck v1.0.0 发布了!
    MATLAB算法实战应用案例精讲-【工具篇】运筹优化工具OR-TOOLS(补充篇)(附实战案例及代码实现)
    什么是 Wake-on-LAN?如何使用 Splashtop 远程喊醒电脑
    LeetCode19.删除链表的倒数第N个结点
  • 原文地址:https://blog.csdn.net/qq_61635026/article/details/133577870