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

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

本文主要针对适用于个人的镜像仓库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应该与你推送镜像时使用的相同。

相关推荐
warrah2 小时前
k8s迁移——岁月云实战笔记
笔记·容器·kubernetes
韩俊强4 小时前
使用Docker部署一个Node.js项目
docker·容器·node.js
Steven_Mmm5 小时前
初试Docker
运维·docker·容器
Gauss松鼠会6 小时前
GaussDB 企业版轻量化部署探索(二)
数据库·人工智能·docker·华为云·gaussdb
会飞的土拨鼠呀9 小时前
Kubernetes 是什么?
云原生·容器·kubernetes
过过过呀Glik11 小时前
在 Ubuntu 上安装与配置 Docker 的完整指南
linux·ubuntu·docker
G_whang11 小时前
centos7 下使用 Docker Compose
运维·docker·容器
大饼酥12 小时前
保姆级教程Docker部署RabbitMQ镜像
docker·容器·rabbitmq
Engineer-Yao12 小时前
【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
docker·大模型·win10·wsl·ollama·本地大模型·ragflow
黄白柴柴13 小时前
docker run 端口映射
运维·docker·容器