搭建私人镜像仓库
目前主流的开源私人镜像仓库有如下两个: 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 -d
Docker 从 Harbor 中拉取镜像
- 使用 Harbor 中的账号密码登录 Docker
docker login --username <username> --password <password> <harbor ip>
- 拉取镜像
docker pull <harbor ip>/docker.io/mongo:6
K8S
- 编辑 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.04
Harbor 基本运维
停止 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