建制自己私有的 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
通常我會進行幾項設定
- 修改 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 與 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...