搭建私人镜像仓库
目前主流的开源私人镜像仓库有如下两个: CNCF Distribution:Docker 官方开源的镜像仓库实现,只提供镜像管理功能 Harbor (goharbor.io):由 vm 公司开源的企业级容器镜像仓库,它是 Docker Registry 的更高级封装,它提供了友好的 Web UI 界面,角色和用户权限管理,用户操作审计等功能
离线搭建 Harbor 仓库
Harbor 文档 |下载 Harbor 安装程序 (goharbor.io) Docker仓库管理镜像–公共仓库【Docker Hub】和私人仓库【Registry】和【harbor】 - 知乎 (zhihu.com)
- 下载离线安装包
从 Releases · goharbor/harbor (github.com) 中下载最新发行版离线安装包 harbor-offline-installer-{version}.tgz
- 解压离线安装包
tar xzvf harbor-offline-installer-version.tgz
cd harbor- 编辑
harbor.yaml配置文件模板,参考:Harbor 文档 |配置 Harbor YML 文件 (goharbor.io)
cp harbor.yml.tmpl harbor.yml
vi harbor.yml- 运行安装脚本
sudo ./install.sh通过 HTTP 连接到 Harbor
默认情况下无论 k8s 还是 Docker 都是通过 https 访问的,需要改为允许 http
Docker
- 编辑
daemon.json,没有则创建
vi /etc/docker/daemon.json写入如下内容,harbor 默认端口号是 80,因此可以不用写
{"insecure-registries" : ["<hostname>", "0.0.0.0"]}- 重启 Docker Engine。
systemctl restart docker如果 harbor 本身就部署在此 Docker 上则还需要如下操作重启 harbor
# 停止 harbor
docker-compose down -v
# 重启 harbor
docker-compose up -dDocker 从 Harbor 中拉取镜像
- 使用 Harbor 中的账号密码登录 Docker
docker login --username <username> --password <password> <harbor ip>- 拉取镜像
docker pull <harbor ip>/docker.io/mongo:6K8S
- 编辑 containerd 容器运行时配置文件
/etc/containerd/config.toml
[plugins]
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
# 增加如下内容
[plugins.cri.registry.mirrors."<hostname>"]
endpoint = ["http://<hostname>"]- 重启 containerd
systemctl restart containerd- 拉取镜像,只能使用 crictl 来拉取,ctr 仍旧默认使用 https
crictl pull <hostname>/xxx:xxx访问 Harbor
通过浏览器访问管理页面
访问 http://<ip> 初始用户名和密码为 admin 和 Harbor12345
通过 Docker 推送镜像
- 登录 Harbor
docker login -u admin -p Harbor12345 <harbor-ip>- 为镜像打 tag
docker tag ubuntu:14.04 <harbor_address>/demo/ubuntu:14.04- 推送镜像
docker push <harbor_address>/demo/ubuntu:14.04Harbor 基本运维
停止 Harbor
docker compose stop重启 Harbor
docker compose start重新配置 Harbor
- 停止 Harbor
docker compose down -v- 更新 harbor.yaml
vim harbor.yml- 运行 prepare 脚本以填充配置
./prepare- 重新创建并启动 Harbor 实例
docker compose up -d