Docker 企業級鏡像倉庫 Harbor 的搭建與維護

1、什麼是 Harbor

Harbor 是一個開源的雲本地 registry 倉庫,能夠用於管理和儲存 Docker 鏡像。Harbor 支持在多個倉庫直接進行復制鏡像,提供用戶管理和訪問控制和活動審計。nginx

Harbor 由如下服務組成(每一個服務都由一個容器運行):git

  • nginx
  • harbor-jobservice
  • harbor-portal
  • harbor-core
  • registryctl
  • harbor-db
  • redis
  • registry
  • harbor-log

本文搭建的 Harbor 是基於 1.8.0,由於我最近準備寫這個文檔的時候,就發現 Harbor 最新版本爲 1.8.0 了,本着追尋潮流,引領時尚的作人原則,就選擇基於 1.8.0 來書寫這篇文檔,1.8.0 相對於以前的版本仍是有比較多的更新的。github

  • 支持 OpenID Connect
  • 支持機器人帳戶,能夠將機器人帳戶設置只具備推送和拉取鏡像的權限。
  • 複製改進,擴展 Harbor-to-Harbor 的複製功能,增長了 Harbor --> Docker Hub 、Harbor---> Docker Registry 、Harbor---> Huawei Registry 的功能。
  • 支持定時清理任務,支持狀態檢查 API,增長了新的項目角色,不只僅是開發人員和管理員,還有維護人員、訪客。
  • 引入 harbor.yml 替代 harbor.cfg,Docker Registry 升級到 2.7.1。

2、Harbor 安裝

官方安裝文檔(2019.0514): https://github.com/goharbor/harbor/blob/master/docs/installation_guide.mdredis

官方文檔的安裝方法主要仍是針對於 1.8.0 以前的版本,後續官方應該會對 1.8.0 版本進行更新文檔。暫時沒有針對新的版本的文檔。sql

Harbor 的安裝是基於 docker-compose ,經過構建多個容器來組成一個服務。docker

2.一、Harbor 安裝環境

Harbor 的硬件需求

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 數據庫。數據庫

2.二、Harbor安裝

Harbor 有兩種安裝方法:

  • 在線安裝,在線安裝須要網絡,安裝包很是小。
  • 離線安裝,離線安裝,本地主機能夠沒有網絡,安裝包會比較大。

咱們這裏選擇的是離線安裝,避免因國內網絡問題致使安裝耗時比較久。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

安裝 Harbor

# 獲取須要安裝的版本
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。

2.3 配置HTTPS

說實話我開始是抵觸的,我不想去使用它,可是當我考慮到,我不可能暫停我全部已經運行的容器來修改配置,來解決 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

從新初始化 Harbor

# 暫停
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  倉庫域名

3、Harbor 的使用

3.一、登陸Harbor並使用

登陸網址 : 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

3.二、注意事項

在進行登陸的過程當中咱們會遇到如下的問題,咱們也給出瞭解決辦法。

# 登陸
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

4、Harbor 管理

4.1 啓動暫停

咱們可使用 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).

對於1.8.0版本

方法一 : 更改 harbor.yml 配置文件

在配置文件中有配置 監聽端口 和使用具體協議的位置,咱們根據各自需求進行設置。

注意,咱們這邊進行更改 docker-compose.yml 配置文件 來更改配置是無效的,由於當咱們運行了 prepare docker-compose文件就會被重寫,因此更改 docker-compose.yml 是無效的。

對於1.8.0以前的版本

對於 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
相關文章
相關標籤/搜索