Docker镜像仓库

Docker 镜像仓库(Docker Registry)是用于存储和分发 Docker 镜像的服务。它可以帮助企业和开发者更方便地管理和共享镜像。常见的 Docker 镜像仓库实施方案包括:

  1. 镜像保存为压缩包
  2. 使用 Registry 镜像仓库(官方私有仓库)
  3. 使用 Harbor 镜像仓库(企业级私有仓库)
  4. 使用公有云镜像服务(如阿里云)未来在写,留个悬念

1. 镜像保存为压缩包

如果不想使用镜像仓库,可以直接将 Docker 镜像保存为压缩文件,以便在不同环境之间传输和使用。

操作步骤:
  1. 查看当前镜像,确认导出镜像的名字以及版本:

    docker images
    
    # 输出类似于这样的结果
    REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
    wordpress_mysql   latest    1471ea5a136c   22 hours ago   726MB
    wordpress_nginx   latest    c728551200c4   2 days ago     407MB
    ubuntu            22.04     560582227a09   8 weeks ago    69.2MB
    busybox           latest    82c58a5c5b73   5 months ago   4.04MB
    
  2. 导出镜像为 tar 文件:

    #             [自己自定义名字]    [镜像名:镜像版本]
    docker save -o wordpress_nginx.tar wordpress_nginx:latest
    
  3. 传输到目标机器(使用scp命令,U盘传输,FTP服务),只要能将这个文件传过去就OK

  4. 在目标机器上加载镜像:

    #               [刚才传输的文件名]
    docker load -i wordpress_nginx.tar
    
适用场景:
  • 适用于 离线环境临时镜像传输
  • 适用于 无法搭建 Registry只需少量镜像共享

2. 使用 Registry 镜像仓库(官方私有仓库)

首先先解决一个问题,什么是 Registry 镜像,今天学的时候有些困惑,为了避免学了就忘,向未来的自己解释一下:

  1. 什么是 Registry?

    Registry 是官网提供的 Docker镜像仓库 ,用于存储和分发Docker镜像。它的核心是 registry:2 这个Docker镜像,它的本质是一个 基于 HTTP API 的服务,而不是一个物理的文件目录。大白话就是,你可以把自己的镜像存在了 Registry 这个容器中。

  2. 为什么 Registry 是一个 Docker 镜像?

    • 方便部署
      • 容器化方式:其实这也是蛮巧妙的一个方式,当 Registry 被打包成一个镜像,那么用户就可以直接使用 docker run 命令运行,而不需要手动安装一套复杂的软件。
      • 跨平台支持:因为这个仓库是一个镜像,所以可以在任何支持 Docker 的环境中运行,避免了不同操作系统之间的兼容性问题,而且如果有突然事件发生,你可以将这个作为镜像的仓库直接打包带走,并在另一台机器搭建,非常方便。
    • 与Docker生态深度集成
      • 镜像存储方式:Registry 作为一个 Docker 容器运行,可以直接存储和管理 Docker 镜像,并通过 REST API 提供标准化的镜像管理接口。
      • 兼容 Docker CLI:Registry 可以直接使用 docker pushdocker pull 命令进行交互,不需要额外的客户端软件。
    • 独立运行,支持扩展
      • 支持挂载外部存储:虽然 Registry 作为容器运行,但它的数据是存储在宿主机的挂载目录或远程存储(如 S3、GCS)中的,并不会消失。
      • 支持分布式存储:Registry 可以使用云存储、数据库等后端作为存储方式,提高数据安全性和可扩展性。
安装 Docker Registry
  1. 拉取官方 registry 镜像

    docker pull registry:2
    
  2. 运行私有仓库

    docker run -d -p 5000:5000 --name registry registry:2
    
  3. 查看仓库是否启动成功

    curl http://localhost:5000/v2/_catalog
    
上传和下载镜像
  1. 修改镜像标签(格式:IP/镜像名)

    docker tag wordpress_nginx:latest localhost:5000/wordpress_nginx:latest
    

    这里的修改标签是必须得执行的步骤,就是将 [镜像名:版本] 的格式改成了 [镜像仓库地址/镜像名:版本] 的格式,改成这样方便后面的拉取和上传,其实这个格式有点那个 scp 的味道了...

  2. 上传镜像

    docker push localhost:5000/wordpress_nginx:latest
    

    ⚠ 这里会出现一个错误信息/var/lib/docker/overlay2/.../merged: no such file or directory,这是因为在Docker存储空间中的一些残留文件或损坏的文件系统引起的,处理方法就是清理Docker存储空间:

    # 执行如下命令可以清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)所以在删除之前需要将运行的镜像给一个tag标签
    docker system prune
    
  3. 本地拉取镜像

    docker pull localhost:5000/wordpress_nginx:latest
    
  4. 局域网拉取镜像

    # 首先需要添加一个解析记录
    vim /etc/docker/daemon.json
    {
    	"insecure-registries": ["192.168.17.199:5000"]
    }
    
    # 然后重启docker
    systemctl restart docker
    
    # 最后就可以正常拉取
    docker pull 192.168.17.199:5000/wordpress_nginx:latest
    
适用场景
  • 适用于 小型团队内部使用
  • 适用于 测试环境
  • 需要 基础的镜像管理能力,但对安全性要求不高

3. 使用 Harbor 镜像仓库(企业级私有仓库)

Harbor 是基于 Docker Registry 的企业级镜像仓库,提供 用户权限管理、镜像扫描、Web UI 等功能。

安装 Harbor
  1. 下载 harbor

    wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
    
  2. 解压并进入 Harbor 目录

    tar -xzf harbor-offline-installer-v2.12.2.tgz
    cd harbor
    
  3. 修改配置文件

    cp harbor.yml.tmpl harbor.yml
    vim harbor.yml
    
    • 修改 hostname: <服务器IP地址/域名>

    • 取消 https 配置(如果不使用 HTTPS)

    • 使用 https 配置(写入证书地址即可)

      certificate: /your/certificate/path
      private_key: /your/private/key/path
      
  4. 安装 Harbor

    ./install.sh
    
上传和下载镜像
  1. 修改镜像标签

    docker tag wordpress_nginx:latest <服务器IP地址/域名>/<项目名称-在HarborL网站里>/<仓库镜像名字>:latest
    # 例如
    docker tag wordpress_nginx:latest firewalld.cn/wordpress/wordpress_nginx:latest
    
  2. 登陆Harbor

    docker login <服务器IP地址/域名>
    # 例如
    docker login firewalld.cn
    # 输入账号和密码,账号和密码在harbor.yml有写,默认为:
    user:admin
    password:Harbor12345
    
  3. 上传镜像

    docker push firewalld.cn/wordpress/wordpress_nginx:latest
    
  4. 拉取镜像

    docker pull firewalld.cn/wordpress/wordpress_nginx:latest
    
适用于场景
  • 适用于 企业镜像级管理
  • 适用于 需要Web界面管理
  • 适用于 安全性要求较高的环境

4. 使用公有云镜像服务(阿里云)

阿里云、腾讯云、华为云等提供 公有云 Docker 镜像仓库,支持镜像加速、权限管理等功能。

以下是以阿里云为示例讲解:

1️⃣ 登陆阿里云控制台,进入 容器镜像服务
2️⃣ 创建命名空间和镜像仓库:

image
image
image

# 然后键入密码,不是阿里云账号的密码,是新建镜像仓库的密码,切记,要记住!!!

image

image

image

# 这里我选择本地仓库,如果是别的仓库则可以自己添加

image

# 至此,这个阿里云的镜像仓库就创建完成了
# 并且,在这个页面有操作指南,认真读!!!
3️⃣ 获取阿里云登录命令
# 上一个截图的操作指南的第一步,在自己的Linux主机中输入,这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker login --username=你的阿里云账号 ************.cn-hongkong.personal.cr.aliyuncs.com
4️⃣ 修改镜像标签
# 选择要上传的镜像,然后修改该镜像的标签,这个改标签的过程是为了后续方便上传和拉取,也是必须操作!这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker tag [ImageId] ************.cn-hongkong.personal.cr.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
5️⃣ 上传镜像
# 上传镜像到自建的公有云镜像仓库,这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker push ************.cn-hongkong.personal.cr.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
6️⃣ 拉取镜像
# 拉取镜像,使用另一台机器测试一样是否能拉取,这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker pull ************.cn-hongkong.personal.cr.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
7️⃣ 适用场景
  • 适用于 公有云环境
  • 适用于 无需自行维护镜像仓库
  • 适用于 跨区域、多环境部署
posted @ 2025-03-25 23:14  小时候老白啦  阅读(196)  评论(0)    收藏  举报