第一部分——Docker篇 第四章 搭建镜像仓库

发布于:2025-04-12 ⋅ 阅读:(33) ⋅ 点赞:(0)

关于系统的改造探索

开篇:系统改造的调研报告

第一部分——Docker篇

第一章 Docker容器
第二章 Docker安装
第三章 构建自定义镜像
第四章 搭建镜像仓库
第五章 容器编排
第六章 容器监控



前言

    随着业务的发展,传统的架构已经不符合项目的要求了。双活、集群也渐渐提上了日程。。。


    云上开发,最不方便的地方就是不能连外网,查资料,下载东西非常麻烦。上边配置的 Docker仓库,就无法连接上阿里云,并且我们自己构建的 镜像 需要上传到一个公共的地方,方便各个机子拉取。这时候就需要搭建 Docker私服

    搭建 Docker私服 有几种方式:Registry、Nexus、Harbor 这里逐一搭建下吧

Registry

    Registry 是官方提供的镜像仓库。仅能使用api和json进行操作,不够友好,所以一般情况下不用这个,了解即可

  1. 运行Registry
docker run -itd -p 5000:5000 --name registry   registry

访问:http://ip:5000/v2/_catalog,不出意外的话,会出现以下界面:

在这里插入图片描述

  1. 推送镜像
    在操作之前,需要配置一下/etc/docker/daemon.json文件,具体配置如下:
{
  "registry-mirrors": ["加速地址"],
  //这里配置是让docker信任该地址,否则会提示https安全问题
  "insecure-registries":["registry-ip:5000"]
}

重启下 Docker

systemctl daemon-reload
systemctl restart docker

这样私有仓库就配置完成了

在上传进行之前还需要重命名下 镜像 的名称,Docker 会根据镜像名称选择上传的仓库。如下:

#重命名成registry仓库地址
docker tag nginx 192.168.233.130:5000/nginx
#上传镜像
docker push 192.168.233.130:5000/nginx

在这里插入图片描述

再次访问:http://ip:5000/v2/_catalog,出现 Nginx 镜像。如下:

在这里插入图片描述

  1. 拉取 镜像
    执行下列命令从私服拉取 镜像
docker pull  192.168.233.130:5000/nginx

在这里插入图片描述

注:这里拉取的时候需要添加私服地址,这涉及到docker镜像命名的问题,如果直接通过镜像拉取,并不是像Maven那样:先去私服找,再去公网找,即使配置了私服地址也没用,官方貌似拒绝了这个提案。RedHat系统可以添加 --add-registry 和 --block-registry 进行覆盖,其他系统就不行了,github也有相应的讨论

在这里插入图片描述
在这里插入图片描述


Nexus

    现在 Docker镜像 的仓库已不少了,之所以带 Nexus 玩,主要还是因为之前 Maven私服 也是用 Nexus 搭建的,这样可以充分利用资源。嘿嘿~~

  1. 安装 Nexus
    Nexus 还是用 Docker 进行安装,先启动 Nexus,命令如下:
docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 -v /etc/localtime:/etc/localtime --name nexus3   sonatype/nexus3

在这里插入图片描述
Nexus3 默认用户名是 admin,密码需要进入容器内部进行查看。如下:

#进入容器内部
docker exec -it nexus3 bash
tail -200f /nexus-data/admin.password

2.创建仓库
现在只需要在 Nexus提供的界面上建立 Docker仓库 即可。具体步骤如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

按照上面配置直接创建仓库即可。创建完成 Nexus 会多个 Docker仓库

在这里插入图片描述

  1. 推送 镜像
    推送镜像和Registry 一样,配置一下 /etc/docker/daemon.json 文件。如下:
{
  "registry-mirrors": ["加速地址"],
  //这里配置是让docker信任该地址,否则会提示https安全问题
  "insecure-registries":["nexus-ip:8082","registry-ip:5000"]
}

重启下 Docker

systemctl daemon-reload
systemctl restart docker

接着需要先登录到 NexusNexus存在权限校验)再进行推送。如下:

#登录Nexus
docker login -u admin -p admin nexus-ip:8082
#重命名成nexus私库地址
docker tag nginx 192.168.233.130:8082/nginx
#推送镜像
docker push 192.168.233.130:8082/nginx

在这里插入图片描述

在这里插入图片描述

  1. 拉取 镜像
    拉取镜像和 Registry 一样了,就不一一赘述了

注:不论是Registry还是Nexus,这里只是简单的示例,无法用于实际环境。如果确定使用docker部署,要把数据持久化到服务器,否则容器终止,数据也会消失


Harbor

    接下来欢迎本次的主角——Harbor。以下是它的自我介绍:

Harbor 是一个开源可信云原生注册表项目,用于存储、签名和扫描内容。 Harbor 通过添加用户通常需要的功能(例如安全性、身份和管理)来扩展开源 Docker 发行版。让注册表更接近构建和运行环境可以提高映像传输效率。 Harbor 支持注册表之间的镜像复制,还提供高级安全功能,例如用户管理、访问控制和活动审核

看不懂,反正很厉害就是了。之所以选择 Harbor ,还有个原因是:Harbor 也可以作为 Helm仓库( k8s 包管理工具)。让我们先抛弃这些晦涩的概念,先学会怎么用吧
在这里插入图片描述

  1. 下载 Harbor
    虽然 Harbor 是用 Docker 部署的,但是分为几个模块,官方对其进行了整合,还是得下载下安装包。先去官方的github整个安装包(根据实际情况选择版本),这里以2.9.1为例

  2. 解压

tar -zxvf  harbor-offline-installer-v2.9.1.tgz

解压后的目录结构,如下:

在这里插入图片描述

可以看到 Harbor 已经准备好了一切

  1. 安装
    在正式安装之前,先改下文件夹名称、添加下配置文件:
mv harbor harbor-install
cd harbor-install
cp harbor.yml.tmpl harbor.yml

再修改下配置文件,打开 harbor.yml,参考配置如下:

#主机名,这里改成ip
hostname: 192.168.233.130
http:
#访问端口,根据实际情况配置
  port: 8080

# https相关配置,这里不需要,直接注释,否则会报错
#https:
#  port: 443
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

#登录密码
harbor_admin_password: Harbor12345

# Harbor DB configuration
database:
  password: root123
  max_idle_conns: 100
  max_open_conns: 900
  conn_max_lifetime: 5m
  conn_max_idle_time: 0

# 数据存储位置
data_volume: /usr/local/docker/harbor/data

trivy:
  ignore_unfixed: false
  skip_update: false
  offline_scan: false
  security_check: vuln
  insecure: false
  
jobservice:
  max_job_workers: 10
  job_loggers:
    - STD_OUTPUT
    - FILE
  logger_sweeper_duration: 1 #days

notification:
  webhook_job_max_retry: 3
  webhook_job_http_client_timeout: 3 #seconds

log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    #日志存储位置
    location: /usr/local/docker/harbor/logs

_version: 2.9.0

proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy


upload_purging:
  enabled: true
  age: 168h
  interval: 24h
  dryrun: false

cache:
  enabled: false
  expire_hours: 24

配置完成后,直接安装即可:

./install.sh

在这里插入图片描述

直接访问ip:8080(端口、密码根据上边配置进行填写

在这里插入图片描述

在这里插入图片描述

  1. 推送 镜像
    在推送 镜像 之前,先新增一个项目:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

接下来的操作,就和 Nexus 大同小异了。配置 /etc/docker/daemon.json 文件。如下:

{
  "registry-mirrors": ["加速地址"],
  //这里配置是让docker信任该地址,否则会提示https安全问题
  "insecure-registries":["harbor-ip:8080","nexus-ip:8082","registry-ip:5000"]
}

重启 Docker

systemctl daemon-reload
systemctl restart docker

登录、推送。如下:

#登录到Harbor
docker login -u admin -p Harbor12345 192.168.233.130:8080
#重命名为Harbor地址
docker tag nginx 192.168.233.130:8080/test/nginx
#推送到Harbor
docker push 192.168.233.130:8080/test/nginx

相较于 NexusHarbor 路径多了个 test,这个即之前创建的项目名

在这里插入图片描述

  1. 拉取 镜像
    拉取镜像和推送一样,需要带上项目名:
docker pull 192.168.233.130:8080/test/nginx

总结

    上边大致概括了几种搭建 Docker私服 的方式,可根据项目情况进行选择,如果还有其他更方便部署方式,欢迎大家进行补充


网站公告

今日签到

点亮在社区的每一天
去签到