Harbor官方介紹
Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器,通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源Docker Distribution。作爲一個企業級私有Registry服務器,Harbor提供了更好的性能和安全。提升用戶使用Registry構建和運行環境傳輸鏡像的效率。Harbor支持安裝在多個Registry節點的鏡像資源複製,鏡像全部保存在私有Registry中, 確保數據和知識產權在公司內部網絡中管控。另外,Harbor也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。
Harbor安裝環境
Centos: CentOS 7.3
Docker: 18.03.1-ce
Docker-composer: 1.23.2
Harbor: harbor-offline-installer-v1.6.2.tgz
可以參考 docker - 在centos7和windows10安裝 、 docker - 鏡像加速器 、 安裝 docker-compose 分別安裝docker engine/docker compose
harbor 1.6.2 需要的運行環境:docker 17.03.0-ce+ and docker-compose 1.10.0+ .
Harbor安裝
Harbor支持在線和離線兩種安裝方式,本文采用在線方式安裝。在線安裝安裝過程中需要下載docker鏡像,離線包則已經有相關鏡像
離線包可以在百度雲盤下載:
鏈接:https://pan.baidu.com/s/1hWeEu4J-o1LYFrFgWOmQww 提取碼:q9q7
在線安裝包可以在下面的連接下載:
鏈接:https://pan.baidu.com/s/1FbB-QCB63k6psOtpOkvXYw
提取碼:o72z
把安裝壓縮包 harbor-offline-installer-v1.6.2.tgz 上傳到服務器
1、解壓
[root@localhost harbor]# tar xvf harbor-offline-installer-v1.6.2.tgz
2、配置
在harbor的解壓目錄裏,有下列文件,其中 harbor.cfg是配置文件,install.sh是安裝文件
drwxr-xr-x. 3 root root 23 Dec 9 22:41 common
-rw-r--r--. 1 root root 813 Nov 20 13:59 docker-compose.chartmuseum.yml
-rw-r--r--. 1 root root 863 Nov 20 13:59 docker-compose.clair.yml
-rw-r--r--. 1 root root 1258 Nov 20 13:59 docker-compose.notary.yml
-rw-r--r--. 1 root root 3675 Nov 20 13:59 docker-compose.yml
drwxr-xr-x. 3 root root 136 Nov 20 13:59 ha
-rw-r--r--. 1 root root 7913 Nov 20 13:59 harbor.cfg
-rwxr-xr-x. 1 root root 6162 Nov 20 13:59 install.sh
-rw-r--r--. 1 root root 10768 Nov 20 13:59 LICENSE
-rw-r--r--. 1 root root 482 Nov 20 13:59 NOTICE
-rw-r--r--. 1 root root 1535603 Nov 20 13:59 open_source_license
-rwxr-xr-x. 1 root root 39132 Nov 20 13:59 prepare
下面修改一些示例中使用的參數,更詳細的參數請參考:https://github.com/goharbor/harbor/blob/v1.6.2/docs/installation_guide.md
vim harbor.cfg
修改配置,使用IP地址訪問harbor,暴露的端口是5000
# 監聽地址,不能設置爲127.0.0.1或者localhost,這裏設置的是docker host的ip地址
hostname = 192.168.88.30:5000
# 登錄密碼,默認密碼:Harbor12345
harbor_admin_password = 123456
修改docker-compose.yml,映射容器中的80端口到host的5000端口
proxy:
image: goharbor/nginx-photon:v1.6.2
container_name: nginx
restart: always
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
ports:
#需要改這裏
- 5000:80
- 443:443
- 4443:4443
3. 安裝
運行安裝目錄裏面的 install.sh。耐心等待,如果是在線安裝版本,需要下載一些docker鏡像,如果已經 docker - 鏡像加速器 配置了加速器,那是相當快的。
./install.sh
下載的鏡像如下:
[root@localhost harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/redis-photon v1.6.2 473bfdd9d245 2 weeks ago 210MB
goharbor/registry-photon v2.6.2-v1.6.2 62c30cdb384a 2 weeks ago 196MB
goharbor/nginx-photon v1.6.2 c0602500e829 2 weeks ago 132MB
goharbor/harbor-log v1.6.2 781ee4ceb5d3 2 weeks ago 197MB
goharbor/harbor-jobservice v1.6.2 3419a2276f96 2 weeks ago 192MB
goharbor/harbor-ui v1.6.2 66268686bb96 2 weeks ago 215MB
goharbor/harbor-adminserver v1.6.2 4024440925a4 2 weeks ago 181MB
goharbor/harbor-db v1.6.2 0ed4186be0d1 2 weeks ago 219MB
啓動的容器
[root@localhost harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18c82d20d070 goharbor/harbor-jobservice:v1.6.2 "/harbor/start.sh" 2 minutes ago Up About a minute harbor-jobservice
1a807ff9307d goharbor/nginx-photon:v1.6.2 "nginx -g 'daemon of…" 2 minutes ago Up About a minute (health: starting) 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:5000->80/tcp nginx
83428db239b3 goharbor/harbor-ui:v1.6.2 "/harbor/start.sh" 2 minutes ago Up 23 seconds (health: starting) harbor-ui
d785d1e0b4fb goharbor/redis-photon:v1.6.2 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 6379/tcp redis
126657d6e33c goharbor/harbor-adminserver:v1.6.2 "/harbor/start.sh" 2 minutes ago Restarting (1) 3 seconds ago harbor-adminserver
1ac23c837879 goharbor/registry-photon:v2.6.2-v1.6.2 "/entrypoint.sh /etc…" 2 minutes ago Up 2 minutes (healthy) 5000/tcp registry
d080851c8190 goharbor/harbor-db:v1.6.2 "/entrypoint.sh post…" 2 minutes ago Up 2 minutes (healthy) 5432/tcp harbor-db
b47254ceba04 goharbor/harbor-log:v1.6.2 "/bin/sh -c /usr/loc…" 2 minutes ago Up 2 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
默認情況下,docker是不給你直接用IP地址訪問HARBOR的,但是在host裏面使用curl命名是可以訪問的
解決這個問題的方法:
需要在docker的安全檢查那裏添加白名單
#vim /usr/lib/systemd/system/docker.service
#修改如下一行
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.88.30:5000
重新訪問
用系統管理員賬戶登錄後,可以看到有一個默認的public項目
4. 推送鏡像到harbor
接下來,我們把在 docker - dockerfile構建一個簡單的springboot應用鏡像 文章中做的springboot-docker鏡像推送到harbor中。
首先,在harbor裏創建一個test-project項目
如果訪問級別設爲公佈,所有人都可以不需要登錄就可以拉取和推送鏡像。
命令行登錄harbor
docker login 192.168.88.30:5000
出現以下問題
Error response from daemon: Get https://192.168.88.30:5000/v2/: http: server gave HTTP response to HTTPS client
需要在docker的安全檢查那裏添加白名單
#vim /usr/lib/systemd/system/docker.service
#修改如下一行
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.88.30:5000
重啓docker
systemctl daemon-reload
systemctl restart docker.service
重新登錄
[root@localhost harbor]# docker login 192.168.88.30:5000
Username: admin
Password:
Login Succeeded
查看下我們現在的鏡像
[root@localhost springboot-docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot-docker 1.0 3be343b3b3ea About a minute ago 121MB
倉庫拉取或者推送的命名格式:
${IP或者域名}/${項目}/${模塊}:${tag}
原來的springboot-docker項目打標籤,推送到harbor。
[root@localhost ~]# docker tag springboot-docker:1.0 192.168.88.30:5000/test-project/springboot-docker:1.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.88.30:5000/test-project/springboot-docker 1.0 3be343b3b3ea 10 hours ago 121MB
springboot-docker 1.0 3be343b3b3ea 10 hours ago 121MB
[root@localhost ~]# docker push 192.168.88.30:5000/test-project/springboot-docker:1.0
The push refers to repository [192.168.88.30:5000/test-project/springboot-docker]
fff182a7c29a: Pushed
f7b41bda6817: Pushed
ed6f0bd39121: Pushed
0c3170905795: Pushed
df64d3292fd6: Pushed
1.0: digest: sha256:f37dc7dbb294a3e1eb7f53d8ad7616068dccf7996233bc8b72578d96aabee1fa size: 1366
推送完畢後,通過頁面可以看到相應的鏡像
拉取私庫中的鏡像:
docker pull 192.168.88.30:5000/test-project/springboot-docker:1.0