部署自訂 Docker 映像檔

自訂 Docker 映像檔

雖然 Zeabur 已經包含了許多由社群提供的模板,但您可能需要部署自己的 Docker 映像檔、設定持久儲存、設定啟動指令等等。為此需求,Zeabur 提供了可客製化的預建功能。

開啟介面

點選 “Add Service” → “Docker Images” 即可打開此頁面。

Open Docker customization page

設定說明

Image

Image 設定說明

「Image」為要拉取的 Docker image,通常就是緊隨 docker pulldocker run 後面的 image tag,比如

docker pull mariadb      # tag 是 "mariadb"
docker run mariadb:lts   # tag 是 "mariadb:lts"

或者是 Docker Compose 中的這個地方

version: '3.9'
services:
  db:
    image: postgres      # tag 是 "postgres"
    # ...

設定完成後,即可接下去設定環境變數、Port⋯⋯等等的 Prebuilt 啟動設定。

Environment Variable

環境變數的設定範例

「Environment Variable」,顧名思義就是傳給服務的環境變數。不過除了單純的環境變數設定外,Zeabur 也允許你將環境變數傳給其他服務 (Expose),讓你有更大的環境變數設定彈性。

「Key」是環境變數的鍵,只能由英文字母、數字和底線組成,如 MARIADB_USERDB_1_HOST 都是可以接受的。

「Value」則是環境變數的值,裡面可以使用 ${KEY} 來在引用其他環境變數的 key。如上圖中 MARIADB_PASSWORD 直接引用了 MARIADB_ROOT_PASSWORD,所以 MARIADB_PASSWORD 的值就會等於 123456;同理,假如有個環境變數的值是 password=${MARIADB_PASSWORD},展開之後的結果就是 password=123456${KEY} 這種引用格式 會在服務啟動時直接展開,所以應用程式看到的會是已經展開完成的值,你不需要在應用層重新展開。

「Expose」指把環境變數的鍵值同時套用到其他服務上。以上圖為例,MARIADB_USERNAMEMARIADB_PASSWORD 都有核取 Expose,所以同專案底下的其他服務都可以看到 MARIADB_USERNAMEMARIADB_PASSWORD 這兩個環境變數,當然也可以使用 ${KEY} 引用它們。

除了其他服務 Exposed 的變數以外,你也可以使用 Zeabur 預先定義好的特殊變數,比如使用 ${ZEABUR_WEB_URL} 取回設定在 web port 的網址。

如果你在參考 Docker image 的文件,通常環境變數在 docker run 之後的 --env(或 -e)引數中,如下範例所示。

docker run --detach --name some-mariadb --env MARIADB_USER=example-user --env MARIADB_PASSWORD=my_cool_secret --env MARIADB_DATABASE=example-database --env MARIADB_ROOT_PASSWORD=my-secret-pw  mariadb:latest
 
# MARIADB_USER          = example-user
# MARIADB_PASSWORD      = my_cool_secret
# MARIADB_DATABASE      = example-database
# MARIADB_ROOT_PASSWORD = my-secret-pw

如果是 Docker Compose,則是

version: '3.9'
services:
  adminer:
    image: adminer
    restart: always
    environment:
      DEBUG: "true"   # (or) - DEBUG=true
      # DEBUG = true

Ports

Ports 的設定範例

「Ports」相當於防火牆的連入 (inbound) 規則,只有宣告的 Ports 可以被其他服務或外網連線。

「Port Name」只能由英文字母和連接號組成。「Port」則寫上服務監聽的 Port,如 MariaDB 就是 3306;Web 服務大部分都是 8080, 3000, 80, …。

「Port Type」可以是 HTTPTCP。外網的部分,HTTP 可以使用網域(如 my-service.zeabur.app)直連,同時 Zeabur 也會自動簽署 TLS 憑證;TCP 則可以使用 Zeabur 自動分配的轉送主機名稱和 Port 連線(如 reg.clusters.zeabur.com:12345)。如果是服務之間,可以使用 服務內網 直連到服務,減少不必要的流量費用,此時 Port 直接填寫你宣告的 Port 即可(亦即 mariadb.zeabur.internal:3306backend.zeabur.internal:8080)。

如果你看得是 Docker image 的文件,通常環境變數在 docker run 之後的 -p 參數中,如下範例所示。

docker run -p 3306 mariadb:latest
 
# Port Name = <Custom>; Port = 3306; Port Type = TCP
# TCP 是因為 MariaDB 是使用基於 TCP 的自訂協定。

如果是 Docker Compose,則是

version: '3.9'
services:
  adminer:
    image: adminer
    restart: always
    ports:
      - 80:8080
      # Port Name = <Custom>; Port = 8080; Port Type = HTTP
      # HTTP 是因為 adminer 是一個管理資料庫的 PHP Web 介面。

Volumes

Volumes 的設定範例

「Volumes」是持久儲存空間的掛載路徑。

預設情況下 Zeabur 在服務每次重新啟動時,都會將服務裡面的資料重設回 Image 的預設狀態(又稱 Stateless)。假如你需要在容器中長期儲存資料,可以配置一個持久儲存空間,並掛載在你想長期儲存的目錄下,這樣服務無論重啟還是更新,掛載的目錄都不會更動——直到你刪除服務或者是自己修改目錄的內容。另外服務的「Backup」功能也是備份這個空間的資料。持久儲存空間的收費方式可以參閱 Zeabur 的 Pricing 頁面

「Volume id」為儲存空間的代號,只能輸入英文字母、數字和連接號。「Path」 為儲存空間的掛載路徑,可以參考 Docker image 的 Volume 設定做配置。

如果你看得是 Docker image 的文件,通常環境變數在 docker run 之後的 -p 參數中,如下範例所示。

docker run -v your-storage:/var/lib/mysql mariadb:latest
 
# Volume ID = <Custom>; Path = /var/lib/mysql

如果是 Docker Compose,則是

version: '3.9'
services:
  mariadb:
    image: mariadb
    volumes:
      - your-storage:/var/lib/mysql
      # Volume ID = <Custom>; Path = /var/lib/mysql

Start Command

Start Command 的設定範例

「Start Command」讓你可以改掉 Docker image 預設使用的 Entrypoint 和引數。這部分比較進階,如果你不太清楚意義,可以略過。

從 GUI 建立的 Start Command 預設的 Command 都是 /bin/sh。如果你的 Command 不是 /bin/sh,可使用 Edit TOML 功能直接修改,或與 客服 討論更改方式。

撰寫自己的模板 YAML

雖然 GUI 提供了許多用於建立您的 Docker 服務的必要參數,但您可能希望新增自訂圖示、連線說明或詳細設定。在這種情況下,以程式碼撰寫您的模板 可能是更好的選擇。

如果您對於撰寫自己的範本有任何問題,歡迎聯絡客服