搭建私人镜像仓库

目前主流的开源私人镜像仓库有如下两个: CNCF Distribution:Docker 官方开源的镜像仓库实现,只提供镜像管理功能 Harbor (goharbor.io):由 vm 公司开源的企业级容器镜像仓库,它是 Docker Registry 的更高级封装,它提供了友好的 Web UI 界面,角色和用户权限管理,用户操作审计等功能

离线搭建 Harbor 仓库

Harbor 文档 |下载 Harbor 安装程序 (goharbor.io) Docker仓库管理镜像–公共仓库【Docker Hub】和私人仓库【Registry】和【harbor】 - 知乎 (zhihu.com)

  1. 下载离线安装包

Releases · goharbor/harbor (github.com) 中下载最新发行版离线安装包 harbor-offline-installer-{version}.tgz

  1. 解压离线安装包
tar xzvf harbor-offline-installer-version.tgz
cd harbor
  1. 编辑 harbor.yaml 配置文件模板,参考:Harbor 文档 |配置 Harbor YML 文件 (goharbor.io)
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
  1. 运行安装脚本
sudo ./install.sh

通过 HTTP 连接到 Harbor

默认情况下无论 k8s 还是 Docker 都是通过 https 访问的,需要改为允许 http

Docker

  1. 编辑 daemon.json,没有则创建
vi /etc/docker/daemon.json

写入如下内容,harbor 默认端口号是 80,因此可以不用写

{"insecure-registries" : ["<hostname>", "0.0.0.0"]}
  1. 重启 Docker Engine。
systemctl restart docker

如果 harbor 本身就部署在此 Docker 上则还需要如下操作重启 harbor

# 停止 harbor
docker-compose down -v
# 重启 harbor
docker-compose up -d

Docker 从 Harbor 中拉取镜像

  1. 使用 Harbor 中的账号密码登录 Docker
docker login --username <username> --password <password> <harbor ip>
  1. 拉取镜像
docker pull <harbor ip>/docker.io/mongo:6

K8S

使用 https 自签证书访问

  1. 编辑 containerd 容器运行时配置文件 /etc/containerd/config.toml
[plugins]
  [plugins.cri.registry]
    [plugins.cri.registry.mirrors]
      # 增加如下内容
      [plugins.cri.registry.mirrors."<hostname>"]
        endpoint = ["http://<hostname>"]
  1. 重启 containerd
systemctl restart containerd
  1. 拉取镜像,只能使用 crictl 来拉取,ctr 仍旧默认使用 https
crictl pull <hostname>/xxx:xxx

访问 Harbor

通过浏览器访问管理页面

访问 http://<ip> 初始用户名和密码为 admin 和 Harbor12345

通过 Docker 推送镜像

  1. 登录 Harbor
docker login -u admin -p Harbor12345 <harbor-ip>
  1. 为镜像打 tag
docker tag ubuntu:14.04 <harbor_address>/demo/ubuntu:14.04
  1. 推送镜像
docker push <harbor_address>/demo/ubuntu:14.04

Harbor 基本运维

停止 Harbor

docker compose stop

重启 Harbor

docker compose start

重新配置 Harbor

  1. 停止 Harbor
docker compose down -v
  1. 更新 harbor.yaml
vim harbor.yml
  1. 运行 prepare 脚本以填充配置
./prepare
  1. 重新创建并启动 Harbor 实例
docker compose up -d