目錄node
Harbor 是一個開源的雲本地 registry 倉庫,能夠用於管理和儲存 Docker 鏡像。Harbor 支持在多個倉庫直接進行復制鏡像,提供用戶管理和訪問控制和活動審計。nginx
Harbor 由如下服務組成(每一個服務都由一個容器運行):git
本文搭建的 Harbor 是基於 1.8.0,由於我最近準備寫這個文檔的時候,就發現 Harbor 最新版本爲 1.8.0 了,本着追尋潮流,引領時尚的作人原則,就選擇基於 1.8.0 來書寫這篇文檔,1.8.0 相對於以前的版本仍是有比較多的更新的。github
官方安裝文檔(2019.0514): https://github.com/goharbor/harbor/blob/master/docs/installation_guide.mdredis
官方文檔的安裝方法主要仍是針對於 1.8.0 以前的版本,後續官方應該會對 1.8.0 版本進行更新文檔。暫時沒有針對新的版本的文檔。sql
Harbor 的安裝是基於 docker-compose ,經過構建多個容器來組成一個服務。docker
Resource | Capacity | Description |
---|---|---|
CPU | minimal 2 CPU | 4 CPU is preferred |
Mem | minimal 4GB | 8GB is preferred |
Disk | minimal 40GB | 160GB is preferred |
Software | Version | Description |
---|---|---|
Python | version 2.7 or higher | Note that you may have to install Python on Linux distributions (Gentoo, Arch) that do not come with a Python interpreter installed by default |
Docker engine | version 17.03.0-ce+ or higher | For installation instructions, please refer to: https://docs.docker.com/engine/installation/ |
Docker Compose | version 1.18.0 or higher | For installation instructions, please refer to: https://docs.docker.com/compose/install/ |
Openssl | latest is preferred | Generate certificate and keys for Harbor |
Port | Protocol | Description |
---|---|---|
443 | HTTPS | Harbor portal and core API will accept requests on this port for https protocol |
4443 | HTTPS | Connections to the Docker Content Trust service for Harbor, only needed when Notary is enabled |
80 | HTTP | Harbor portal and core API will accept requests on this port for http protocol |
目前,Harbor 使用的數據庫僅支持 PostgreSQL 數據庫。數據庫
咱們這裏選擇的是離線安裝,避免因國內網絡問題致使安裝耗時比較久。vim
安裝 docker-compose ,版本須要1.18.0+centos
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
# 獲取須要安裝的版本 https://github.com/goharbor/harbor/releases # 下載 cd /opt/ && wget 下載版本連接 tar -xzf harbor-offline-installer* cd harbor # 編輯配置文件 harbor.yml vim harbor.yml # 須要更改的參數 hostname: 192.168.15.170 # 綁定ip,不能使用127.0.0.1和localhost http: # 監聽端口,默認80,也就是咱們 管理ui訪問的端口 port: 80 harbor_admin_password: Harbor12345 # 設置管理員密碼 ## 還能夠設置啓動 https,並指定證書,和指定數據目錄 # 安裝 ./install.sh
默認安裝是不包含 Notary 和 Clair (用於漏洞掃描)。可是已經與他們集成了。咱們可使用
默認是使用 HTTP 協議,咱們能夠配置證書並使用 HTTPS 來訪問 Harbor。
說實話我開始是抵觸的,我不想去使用它,可是當我考慮到,我不可能暫停我全部已經運行的容器來修改配置,來解決 docker login
的問題,全部我只能老老實實的來配置 HTTPS ,這個煩人的 HTTPS。
官方配置文檔: https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
咱們這裏演示的是建立本身的 證書,實際生產環境中咱們能夠去阿里雲或者其餘雲服務器廠商申請免費的 證書。
# 建立存放證書的目錄 mkdir -p /data/cert/ cd /data/cert/ # 建立自簽名證書key文件 openssl genrsa -out ca.key 4096 openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=192.168.15.170" \ -key ca.key \ -out ca.crt #CN 替換爲你的倉庫域名
#配置 HTTPS 配置 https: # # https port for harbor, default is 443 port: 443 # # The path of cert and key files for nginx certificate: /data/cert/ca.crt private_key: /data/cert/ca.key
# 暫停 docker-compose down -v prepare # 生成配置文件,根據 harbor.yml 配置生成docker-compose文件。 docker-compose up -d # 後臺啓動
將 Harbor 生成的證書 /data/cert/ca.crt
複製到 客戶端的 /etc/docker/certs.d/倉庫域名/
。
而後重啓docker 。
docker login 倉庫域名
登陸網址 : ip,http://192.168.15.170
默認的用戶名和密碼是:
用戶名:admin
密碼: Harbor12345
登陸 Harbor 並建立一個私有項目 test 。
1.8.0版本使用界面圖
1.7.5版本使用界面圖
(不知道爲啥上面有一坨綠色,難道是……,不可能的)。
本地登陸 而且上傳鏡像
docker login 192.168.15.170 docker tag centos:latest 192.168.15.170/test/centos:latest # tag 名稱= 倉庫地址/項目名稱/鏡像名稱:標記(版本號) docker push 192.168.15.170/test/centos:latest
下載鏡像
docker pull 192.168.15.170/test/centos:latest
在進行登陸的過程當中咱們會遇到如下的問題,咱們也給出瞭解決辦法。
# 登陸 docker login 192.168.15.170 # 登陸報錯 [root@localhost harbor]# docker login 192.168.15.170 Username: admin Password: Error response from daemon: Get https://192.168.15.170/v2/: dial tcp 192.168.15.170:443: connect: connection refused # 解決辦法 ,官方的安裝文檔也是有寫到這個問題 在 dockerd 啓動參數中加上 --insecure-registry=192.168.15.170 編輯配置文件 /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=192.168.15.170
咱們可使用 docker-compose 來管理 Harbor 的生命週期,如下命令的運行環境目錄須要與 docker-compose.yml
是同一個目錄。
# 暫停 Harbor docker-compose stop # 啓動 Harbor docker-compose start # 更改 harbor.yml,1.8.0以前的版本配置文件是 harbor.cfg docker-compose down -v vim harbor.yml # 更改配置 prepare # 生成配置文件,根據 harbor.yml 配置生成docker-compose文件。 docker-compose up -d # 刪除 Harbor 的容器,將鏡像數據和 Harbor的數據庫文件保存在文件系統上。 docker-compose down -v # 完全地刪除 Harbor 的數據和鏡像 rm -r /data/database rm -r /data/registry
默認狀況下,Harbor 的數據保存在 /data/ 下,即便咱們刪除或者重建 Harbor 數據不會發生改變。而且 Harbor 使用了 rsyslog 來進行收集每一個容器的日誌,默認狀況下,這些日誌文件儲存在主機的 /var/loh/harbor/
Harbor 默認的監聽端口是 80(HTTP)和 443(HTTPS).
方法一 : 更改 harbor.yml
配置文件
在配置文件中有配置 監聽端口 和使用具體協議的位置,咱們根據各自需求進行設置。
注意,咱們這邊進行更改 docker-compose.yml
配置文件 來更改配置是無效的,由於當咱們運行了 prepare
docker-compose
文件就會被重寫,因此更改 docker-compose.yml
是無效的。
對於 HTTP 協議。
方法一 :更改 docker-compose.yml
配置文件
proxy: image: goharbor/nginx-photon:v1.7.5 container_name: nginx restart: always cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID - NET_BIND_SERVICE volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor dns_search: . ports: - 80:80 - 443:443 - 4443:4443 depends_on: - postgresql - registry - core - portal - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy" # 將原有的內部監聽80端口替換爲 8888 proxy: image: goharbor/nginx-photon:v1.7.5 container_name: nginx restart: always cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID - NET_BIND_SERVICE volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor dns_search: . ports: - 8888:80 - 443:443 - 4443:4443 depends_on: - postgresql - registry - core - portal - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy"
方法二 更改 harbor.cfg
,將端口添加到參數 hostname
上。
hostname = 192.168.15.170:8888
對於HTTPS 協議
跟配置 HTTP 協議一致。
更改了配置以後,咱們須要從新部署 Harbor.
# 如下命令在 docker-compose.yml 文件所在目錄中運行 ./prepare docker-compose up -d