一、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