Harbor 简介
Harbor是Vmware开源的企业级Docker Registry管理项目,用于存储和分发Docker镜像。Harbor除了提供docker-registry外,还提供管理UI,基于角色的访问控制,日志审核等功能。
Harbor的所有组件都在Docker中部署,使用Docker compose 可以快速部署和管理。
github地址:https://github.com/vmware/harbor
Harbor 搭建
1. 环境准备
个人使用版本:
docker:17.06.2-ce
docker-compose:1.17.1
harbor:1.3.0-rc1
2. 安装 docker
根据自己系统,安装对应版本详细看:https://docs.docker.com/engine/installation/#cloud
3. 安装 docker-compose
下载docker-compose包:
$ curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
最新版本查看地址:https://github.com/docker/compose/releases
检查是否配置成功:
$ sudo docker-compose --version
4. 安装harbor:
下载 harbor包:
$ wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.3.0-rc1.tgz
最新版本查看:https://github.com/vmware/harbor/releases
加压 harbor包:
$ tar xvf harbor-offline-installer-v1.3.0-rc1.tgz
5. 配置docker-compose
进入到解压后的harbor文件夹,修改 harbor.cfg文件:
$ vim harbor.cfg
基本值都是默认,我只修改了:
hostname = XX.XX.XX.XX // 本机ip地址
其它配置都可以不改,然后仔细看下每个配置的作用便可,因为可能后面回用到。
6. 执行harbor下的 install.sh文件
$ ./install.sh
harbor服务就会根据docker-compose.yml的配置下载依赖的镜像,启动服务。
7. 浏览器访问
默认端口80,如果被占用,修改docker-compose.yml。
默认登录账号:admin 密码:Harbor12345(默认)
控制台登录harbor
当基于上面默认安装后,使用 docker login xx.xx.xx.xx 会报如下错误:
Error response from daemon: Get https://xx.xx.xx.xx/v2/: dial tcp xx.xx.xx.xx:443: getsockopt: connection refused
这时我们很容易就想到我们默认用的是http协议,未用https协议,也没配置SSL,所以这么让请求变成http协议。
解决方法:
新建个docker.service,并配置。
- 系统启动后docker执行:sudo systemctl enable docker
新建docker.service 并编辑:
$ sudo vi /etc/systemd/system/multi-user.target.wants/docker.service
找到ExecStart这行,并在后面添加http://harbor ip,保存退出,同时如果你要配置国内加速器也在这里配置 —registry-mirror=https://registry.docker-cn.com
ExecStart=/usr/bin/dockerd --insecure-registry http://xx.xx.xx.xx
加载配置,并重启docker
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
再次用登录
$docker login xx.xx.xx.xx
上传自己的镜像
详细例子:
https://docs.docker.com/get-started/part2/#tag-the-image
打标签
$ docker tag SOURCE_IMAGE[:TAG] xx.xx.xx.xx/项目名/IMAGE[:TAG]
上传
$docker push xx.xx.xx.xx/项目/IMAGE[:TAG]
下载镜像
$ docker pull xx.xx.xx.xx/项目名/IMAGE:latest