解决从官方仓库下载网络不通畅问题,搭建私有化镜像仓库

本文主要针对适用于个人的镜像仓库Registry和适用于企业的镜像仓库Harbor 做介绍。

先看看搭建私有化镜像仓库能解决什么问题?

1.搭建Docker私有化仓库能解决什么问题?

  1. 镜像拉取、下载慢:从本地私有仓库下载镜像比从远程公共仓库下载要快得多,因为数据传输的延迟和带宽限制被大大降低。(个人使用很重要)
  2. 节省网络带宽:私有仓库允许用户在本地网络内下载和分发Docker镜像,因此能够尽量避免从远程公共仓库进行下载。(个人使用很重要)
  3. 增强安全性:私有化仓库允许对镜像进行更严格的安全控制和审计、进行更细粒度的访问权限限制,确保只有授权用户才能下载和上传镜像。
  4. 镜像的统一管理和分发:私有仓库使得Docker镜像的管理和分发更加集中和统一,管理员可以轻松地管理不同版本和标签的镜像,确保团队成员使用一致的镜像版本。

如果平时使用过程中有使用的比较好的镜像,可以拉取下来,然后推送到自己的仓库收藏一下。有时候想用的时候又拉取不下来,很是折腾、费时间。

2.常用私有化镜像仓库介绍

2.1 Docker官方Registry镜像

Docker官方Registry镜像是一个开源的、轻量级的Docker镜像仓库解决方案。它提供了基本的镜像存储和分发功能,是Docker官方推荐的私有仓库搭建方式之一。

适用场景:一个简单、轻量级的Docker私有仓库,适用于小型团队个人开发者,对镜像管理功能要求不高,主要关注基本的镜像存储和分发;

注意:Registry:本身默认并不提供图形化界面

2.2 Harbor

Harbor是一个企业级的Docker Registry服务器,由VMware开源并维护。

适用场景

  • 一个功能全面的Docker私有仓库,适用于中大型企业或团队
  • 对用户和镜像进行细粒度的权限控制;
  • 对镜像的安全性、可靠性和性能有较高要求;
  • 需要与CI/CD系统集成,实现自动化构建和部署;

3.安装部署(compose方式)

本文安装优先采用docker compose方式进行安装部署,如果有不清楚的,可以去看前面的文章。

3.1 Docker Registry和Docker-registry-ui

前提条件:已经安装了docker。

1、docker-compose.yml文件示例内容:

解释:

① 定义了一个名为my-registry的服务,它使用官方的registry镜像,并在容器内运行。容器内的5000端口被映射到宿主机的15000端口,同时,./data目录被用作镜像的存储位置

② 定义了一个名为my-registry-ui的服务


yaml

代码解读

复制代码

services: my-registry:   privileged: true    #image: registry    # 如果拉取不下来,可以用下面的加速地址   image: dockerproxy.net/library/registry:latest   restart: always   container_name: my-registry   ports:     - "15000:5000"   volumes:     - "./data:/var/lib/registry"  # 图形化界面 my-registry-ui:    #image: joxit/docker-registry-ui:1.5-static   image: dockerproxy.net/joxit/docker-registry-ui:1.5-static    # 或者使用特定的版本,例如 joxit/docker-registry-ui:1.5-static   container_name: my-registry-ui   restart: always   ports:     - 18080:80   environment:     - REGISTRY_TITLE=My Private Registry     - REGISTRY_URL=http://my-registry:5000      # 可选:设置CATALOG_ELEMENTS_LIMIT来限制UI中显示的镜像数量     - CATALOG_ELEMENTS_LIMIT="1000"   depends_on:     - my-registry

  1. 启动服务

docker-compose.yml文件所在的目录下,运行以下命令来启动服务:


代码解读

复制代码

docker-compose up -d

这个命令会启动Docker Registry容器,并在后台运行。

3.2 Harbor

前提条件:已经安装了docker。

PS:如果公网访问的话,还需要:

  • 一个域名或IP地址,用于访问Harbor;
  • 一个SSL证书(可选,但推荐用于保护通信);
  1. 下载harbor并安装

bash

代码解读

复制代码

# 1. 从github下载harbor仓库(如果实在觉得慢或者其他网络原因,也有快的办法:离线包下载然后上传到服务器。不清楚的可以联系我) wget https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz ​ # 2.解压 tar xvf harbor-offline-installer-v2.11.2.tgz ​ # 3.打开解压后的文件夹 cd harbor ​ # 4. 配置Harbor(修改harbor.yml文件) cp harbor.yml.tmpl harbor.yml # 编辑harbor.yml,例如修改hostname主机名(我这边使用的127.0.0.1)、端口(默认80端口)、存储位置等等 # 如果不需要HTTPS的话,把这个选项也注释掉。 ​ # 5. 安装Harbor(运行自动化安装脚本来部署Harbor) ./install.sh ​

  1. 安装完成后服务自动启动:

访问地址(我没有使用域名,配置的是IP、端口改为8314):http://hostname:8314/,默认账号:admin/Harbor12345。

可以看到以下界面。

首页:

4.使用

4.1 配置Docker守护进程(在Docker客户端上)
  • 编辑Docker的配置文件(通常是/etc/docker/daemon.json),添加insecure-registries字段,并将Harbor的地址添加到该字段中。
  • 需要配置Docker守护进程以信任Harbor/Registry的仓库。

bash

代码解读

复制代码

vim /etc/docker/daemon.json ​ ## 内容大概如下 {  #################开始##################  "insecure-registries": [    "192.168.1.153:8314" ],  #################结束################## ​  "registry-mirrors": [                "https://dockerproxy.com"       ] } ​

记得


代码解读

复制代码

systemctl daemon-reload systemctl restart docker

4.2 推送和拉取镜像(Docker Registry和Harbor)

这两个仓库的登录、推送、拉取命令基本是一样的。

  1. 如果要推送和拉取镜像,一般需要进行登录:
  • 在Docker客户端上,使用docker login命令登录到镜像仓库。
  • 输入用户名和密码(Harbor默认是admin/Harbor12345;Docker Registry 默认没有密码,随便输)。

bash

代码解读

复制代码

# 登录Harbor,docker login harbor.example.com docker login <Harbor/Docker Registry服务器地址>

  1. 推送

为要推送的本地镜像打上一个新的标签(Tag),这个标签应该包含仓库的地址、项目名和镜像名。例如:


ruby

代码解读

复制代码

# Harbor 命令 docker tag your-image-name:tag registry.<Harbor服务器地址>/<项目名>/<镜像名>:tag ​ # Docker Registry命令 docker tag your-image-name:tag <Docker Registry服务器地址>/<仓库名>/<镜像名>:tag ​ ## 示例(注意:默认端口5000,我设置为15000):docker tag grafana/grafana:9.2.4 192.168.1.153:15000/my_registry/grafana:9.2.4 ​

最后,使用docker push命令将镜像推送到Harbor/Docker Registry:


perl

代码解读

复制代码

# Harbor docker push registry.<Harbor服务器地址>/<项目名>/<镜像名>:tag ​ # Registry docker push <Docker Registry服务器地址>/<项目名>/<镜像名>:tag ​ ## 示例:docker push 192.168.1.153:15000/my_registry/grafana:9.2.4

Docker Registry 推送:

  1. 拉取

同样,首先确保你已经登录到Harbor。

使用docker pull命令从Harbor拉取镜像。命令格式如下:


ruby

代码解读

复制代码

# Harbor命令 docker pull registry.<Harbor服务器地址>/<项目名>/<镜像名>:tag #Docker Registry命令 docker pull <Docker Registry服务器地址>/<仓库名>/<镜像名>:tag

这里的<Harbor/Docker Registry服务器地址><项目名><镜像名>:tag应该与你推送镜像时使用的相同。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐