一、Harbor 简介
Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器。
Harbor具有的优势:
1. 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2. 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3. 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4. 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性
二、Harbor 安装
1、先安装Docker并启动Docker
未安装 docker 可以参考文章:docker安装
2、安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
给docker-compose添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
查看docker-compose是否安装成功
docker-compose -version
3、下载Harbor的压缩包,并解压安装
点击获取下载地址:Harbor
https://github.com/goharbor/harbor/releases
tar -xf harbor-offline-installer-v1.10.2.tgz && mv harbor /usr/local/src/
修改hostname和port
cd /usr/local/src/harbor && vim harbor.yml
hostname: 192.168.66.102
port: 85
如果只用ip访问就需要注释掉https的选项
#https:
#port: 443
安装Harbor
./prepare
./install.sh
4、启动 Harbor 后,访问
docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动
访问Harbor
http://localhost:85
默认账户密码:admin/Harbor12345
三、打包上传镜像到 Harbor
1)登录后提示成功
在linux总端登录Harbor:
sudo docker login -u tens -p Tens123456 161.17.60.38:85
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
2)对镜像进行打包
将要上传的镜像打tag 使其知道要上传的地址
打包的方式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
eureka v1 c0b9a9abf81e About an hour ago 150MB
sudo docker tag eureka:v1 161.17.60.38:85/tensquare/eureka:v1
3)把打包好的镜像上传到
sudo docker push 161.17.60.38:85/tensquare/eureka:v1
The push refers to repository [161.17.60.38:85/tensquare/eureka]
5be351ff00ca: Pushed
ceaf9e1ebef5: Pushed
9b9b7f3d56a0: Pushed
f1b5933fe4b5: Pushed
v1: digest: sha256:4871feb25d52cd4275d97b63a85556043a3efee74349e008807383e1d7e9132f size: 1159
4)在 Harbor 上面就可看到上传的镜像
四、下载 Harbor 上项目的镜像到本地
1)登录成功后,拉取镜像
下载的镜像要知道要下载的地址和对应目录和版本号
拉取的方式:docker push [OPTIONS] NAME[:TAG]
在linux总端登录Harbor:
sudo docker login -u tens -p Tens123456 161.17.60.38:85
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
sudo docker pull 161.17.60.38:85/tensquare/eureka:v1
v1: Pulling from tensquare/eureka
e7c96db7181b: Already exists
f910a506b6cb: Already exists
c2274a1a0e27: Already exists
a5100da0a6a8: Pull complete
Digest: sha256:3ffae5f17b10b0366de123902aa78ed3426a7069b4d01b3fcc1b2ac38b499038
Status: Downloaded newer image for 161.17.60.38:85/tensquare/eureka:v1
2)在拉取的机器上面能看到刚刚拉取的镜像
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
161.117.60.138:85/tensquare/eureka v1 26f03cdd882a 19 minutes ago 150MB
注意:遇到的坑
这里用的docker版本为:18.06.3
docker -v
Docker version 18.06.3-ce, build d7080c1
登录 Harbor 的时候会报错:
Error response from daemon: Get http://161.17.60.38:85/v2/: dial tcp 161.17.60.38:85: connect: connection refused
上传镜像到 Harbor 的时候,会报错:
The push refers to repository [161.17.60.38:85/tensquare/eureka]
Get http://161.17.60.38:85/v2/: dial tcp 161.17.60.38:85: connect: connection refused
8DB6CD
在网上搜了半天,有的是去编辑 /etc/docker/daemon.json 文件,而有的是在 docker.service
如果在 /etc/docker/daemon.json 的解决办法:添加 insecure-registries 即可
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
"insecure-registries": ["161.17.60.38:85"]
}
如果是在 docker.service 解决办法:在 ExecStart 添加 --insecure-registry
find / -name docker.service -type f
/usr/lib/systemd/system/docker.service
在 ExecStart 这行后面加上 -insecure-registry=Harbor登录地址
sudo vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=161.17.60.38:85
sudo systemctl daemon-reload
sudo systemctl restart docker
......
重启完成后重新登录即可
在linux总端登录Harbor:
sudo docker login -u tens -p Tens123456 161.17.60.38:85