Site icon Soul & Shell Blog

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

Harbor logo

建制自己私有的 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 管理介面與服務,可以自訂專案與各種角色成員,算是非常夠用了。畫面如下:

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 service@your-domain.com
  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 套件

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

通常我會進行幾項設定

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

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

./install.sh

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

整合 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...

Exit mobile version