fbpx

透過 Harbor 建制自己的 Docker Registry + 永久憑證更新

建制自己私有的 Docker Registry

以往我們的 Docker Image 都是上傳到 Docker Hub,如果自己在開發上有很多專案需要管理,或者需要自訂複雜的帳號權限,這時候就需要自行建立 Docker Registry 來存放 Image。這裡我們手把手教學如何建立自己的 Harbor Server,並且透過 Caddy 全自動管理 SSL 憑證,這樣一來就可以大量減少維護的時間,也可以有自己專用的 Docker Registry。

Harbor Project 介紹

Harbor 是一個 Open Source 的 Docker Registry,使用 Apache License 進行發布,可以透過 Docker Compose 的方式啟動整個服務,安裝完成後提供完整的 Web 管理介面與服務,可以自訂專案與各種角色成員,算是非常夠用了。畫面如下:

harbor web console

Docker 與 Docker Compose 安裝教學

安裝 Docker 與 Docker Compose

由於 Harbor 整體透過 Docker Compose 安裝,所以進行 Harbor 安裝以前要先準備好 Docker Compose 環境,以 Ubuntu 為例安裝 Docker-ec 方式如下:

sudo apt-get remove docker docker-engine docker.io

sudo apt-get -y update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

sudo apt-get update -y

sudo apt-get install -y docker-ce docker-ce-cli containerd.io

Ubuntu 安裝 docker-compose 如下:

export DOCKER_COMPOSE_VERSION=1.29.2

sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

安裝 Caddy 與設定 Proxy (自動管理 Let’s Encrypt 憑證)

由於我們這裡需要自己透過 Caddy 來管理 SSL 並作為入口的 Proxy,目的是為了透過 Caddy 管理 Let's Encrypt 免費憑證,因此開始安裝以前我們要先設定好網域與憑證,安裝 Caddy 一樣透過 Docker Compose 如下:

version: '3.7'

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1450

services:

  caddy:
    image: caddy:2.4.6-alpine
    restart: unless-stopped
    environment:
      - ENV_MAINT=online
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ../data/caddy:/data

假設需要配置的 Domain 為 your-domain.com 那麼我們先設定 Caddyfile 檔案如下:

https://your-domain.com {
  tls [email protected]
  reverse_proxy https://192.168.1.1:8443 {
    transport http {
      tls_insecure_skip_verify
    }
  }
}

上述設定檔中的 192.168.1.1 是 Host 的 Network Interface,到時候我們會把 Harbor 服務掛載在這裡,請變更為你自己的網路位置。確認 Domain 已經正確設定 Record 以後就可以先啟動 Caddy 服務,讓 Caddy 自動申請 Let's Encrypt 憑證

docker-composer up -d

完成以後可以先執行 docker-compose down 先關閉 Caddy

Harbor 安裝教學

查詢想要安裝的 Harbor 版本

先到 Harbor 官方 GitHub 確認最近的 Release 版本號,可以在 Harbor Release 查詢,如下:

harbor release version

下載 Harbor 套件

export HARBOR_VERSION=2.9.4

wget https://github.com/goharbor/harbor/releases/download/v${HARBOR_VERSION}/harbor-offline-installer-v${HARBOR_VERSION}.tgz

tar xvf harbor-offline-installer-v${HARBOR_VERSION}.tgz

設定 Harbor 與啟動 Docker Compose

cd harbor

cp harbor.yml.tmpl harbor.yml

vim harbor.yml

通常我會進行幾項設定

  • 修改 hostname (假設 your-domain.com)
  • 修改 https.certificate 與 https.private_key (從前一個步驟 Caddy 啟動以後可以自動產生對應的 crt 與 key 檔案)
  • 修改 harbor_admin_password 預設密碼
  • 修改 database.password 預設密碼
  • 調整 data_volume 資料存放位置

Docker 一般在使用時,預設會走 HTTPS 並且要有合法的憑證,但由於 Harbor 預設載入憑證的方式不容易管理,我預計會透過 Caddy Proxy 來管理 SSL 憑證。前一個步驟啟動 Caddy 的時候如果正確運作,就可以在 ./data/caddy/certificates 資料夾裡面找到憑證檔案,可以先把檔案 Copy 過來 Harbor 的專案目錄使用。

設定好以後,接下來執行 install.sh 產生設定檔,如下:

./install.sh

執行完成後就會在目錄中產生 common 資料夾與 docker-compose.yml 檔案,同時也會下載需要的 Docker Image,並且自動啟動,正確啟動後如下:

harbor docker compose

整合 Harbor 與 Caddy Proxy 轉址

修改 Harbor 服務 Port

由於我們希望透過自己的 Caddy 進行 HTTPS 憑證管理,所以先透過 docker-compose down 停止服務,然後編輯一下 docker-compose.yml 檔案,把 proxy.ports 改為「- 8443:8443」並註解「- 80:8080」。

重新啟動 Harbor 服務

切換到透過以下 harbor 目錄透過以下命令重新啟動 Docker Compose,啟動後原本的 Harbor Project 會 Bind 在 8443 Port

docker-compose up -d

重新啟動 Caddy 服務

最後切換到 caddy 目錄一樣透過以下命令啟動服務

docker-compose up -d

啟動後就會透過 Caddy 負責 HTTPS 的憑證更新並且自動透過 Reverse Proxy 轉到內部的 Harbor 8443 服務,這樣就可以自動更新憑證囉。

Good Luck...