デプロイカスタム Docker イメージ

カスタム Docker イメージ

Zeabur にはすでにコミュニティ提供の多くのテンプレートが含まれていますが、独自の Docker イメージをデプロイしたり、永続ストレージを設定したり、起動コマンドを設定したりする必要があるかもしれません。このニーズに応えるため、Zeabur はカスタマイズ可能なプリビルド機能を提供しています。

インターフェースを開く

「Add Service」→「Docker Images」をクリックすると、このページが開きます。

Open Docker customization page

設定説明

イメージ

Image 設定説明

「Image」はプルする Docker イメージです。通常、docker pull または docker run に続くイメージタグです。例えば:

docker pull mariadb      # タグは "mariadb"
docker run mariadb:lts   # タグは "mariadb:lts"

または Docker Compose のこの部分です。

version: '3.9'
services:
  db:
    image: postgres      # タグは "postgres"
    # ...

設定が完了したら、環境変数、ポートなどのプリビルド起動設定を続行できます。

環境変数

環境変数の設定例

「Environment Variable」は、その名の通りサービスに渡される環境変数です。しかし、単純な環境変数の設定に加えて、Zeabur では環境変数を他のサービスに渡す(Expose する)ことも可能で、環境変数の設定に柔軟性を持たせることができます。

「Key」は環境変数のキーで、英字、数字、アンダースコアのみで構成できます。例えば MARIADB_USERDB_1_HOST は有効です。

「Value」は環境変数の値です。ここでは ${KEY} を使用して他の環境変数のキーを参照できます。上記の図では、MARIADB_PASSWORDMARIADB_ROOT_PASSWORD を直接参照しているため、MARIADB_PASSWORD の値は 123456 となります。同様に、環境変数の値が password=${MARIADB_PASSWORD} の場合、展開後の結果は password=123456 となります。この ${KEY} の参照形式は、サービス起動時に直接展開されるため、アプリケーションが参照するのは既に展開された値であり、アプリケーション層で再度展開する必要はありません。

「Expose」は、環境変数のキーと値を同時に他のサービスにも適用することを指します。上記の図を例にすると、MARIADB_USERNAMEMARIADB_PASSWORD は両方とも Expose がチェックされているため、同じプロジェクト下の他のサービスは MARIADB_USERNAMEMARIADB_PASSWORD という2つの環境変数を参照でき、もちろん ${KEY} でそれらを参照することもできます。

他のサービスで Expose された変数以外に、Zeabur が事前に定義している特殊変数を使用することも可能です。例えば、${ZEABUR_WEB_URL} を使用して web ポートに設定された URL を取得できます。

Docker イメージのドキュメントを参照する場合、通常、環境変数は 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」はファイアウォールのインバウンドルールに相当し、宣言されたポートのみが他のサービスや外部ネットワークから接続可能です。

「Port Name」は英字とハイフンのみで構成できます。「Port」にはサービスがリッスンするポート番号を記述します。例えば MariaDB は 3306 です。Web サービスはほとんどが 8080, 3000, 80, … です。

「Port Type」は HTTP または TCP を選択できます。外部ネットワークの場合、HTTP はドメイン名 (例: my-service.zeabur.app) で直接接続でき、同時に Zeabur が自動的に TLS 証明書を署名します。TCP は Zeabur が自動的に割り当てる転送ホスト名とポートで接続できます (例: reg.clusters.zeabur.com:12345)。サービス間の接続の場合、サービス内部ネットワークを使用してサービスに直接接続することで、不要なトラフィックコストを削減できます。この場合、ポートには宣言したポート番号をそのまま入力すれば良いです (すなわち mariadb.zeabur.internal:3306backend.zeabur.internal:8080)。

Docker イメージのドキュメントを参照する場合、通常、環境変数は docker run の後の -p パラメータで指定されています。以下の例を参照してください。

docker run -p 3306 mariadb:latest
 
# Port Name = <カスタム>; Port = 3306; Port Type = TCP
# TCP は MariaDB が TCP ベースのカスタムプロトコルを使用しているためです。

Docker Compose の場合は以下のようになります。

version: '3.9'
services:
  adminer:
    image: adminer
    restart: always
    ports:
      - 80:8080
      # Port Name = <カスタム>; Port = 8080; Port Type = HTTP
      # HTTP は adminer がデータベースを管理する PHP Web インターフェースであるためです。

ボリューム

Volumes の設定例

「Volumes」は永続ストレージ空間のマウントパスです。

デフォルトでは、Zeabur はサービスが再起動されるたびに、サービス内のデータをイメージのデフォルト状態にリセットします(これをステートレスと呼びます)。コンテナ内に長期的にデータを保存する必要がある場合は、永続ストレージ空間を構成し、長期的に保存したいディレクトリにマウントすることで、サービスが再起動または更新されても、マウントされたディレクトリは変更されません。ただし、サービスを削除したり、手動でディレクトリの内容を変更したりすると、その内容は変更されます。また、サービスの「Backup」機能もこの空間のデータをバックアップします。永続ストレージ空間の料金については、Zeabur の Pricing ページを参照してください。

「Volume id」はストレージ空間の識別子で、英字、数字、ハイフンのみ入力できます。「Path」はストレージ空間のマウントパスです。Docker イメージの Volume 設定を参考に設定してください。

Docker イメージのドキュメントを参照する場合、通常、環境変数は docker run の後の -v パラメータで指定されています。以下の例を参照してください。

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

Docker Compose の場合は以下のようになります。

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

起動コマンド

Start Command の設定例

「Start Command」を使用すると、Docker イメージがデフォルトで使用する Entrypoint とパラメータを変更できます。この部分はやや高度なので、意味がよくわからない場合はスキップしても構いません。

GUI から作成された Start Command のデフォルトのコマンドはすべて /bin/sh です。コマンドが /bin/sh でない場合は、Edit TOML 機能で直接変更するか、カスタマーサポートにご相談ください。

独自のテンプレート YAML を記述する

GUI は Docker サービスを作成するための必要な多くのパラメータを提供していますが、カスタムアイコン、接続手順、詳細設定などを追加したい場合があるかもしれません。この場合、コードでテンプレートを記述する方が良い選択肢となるでしょう。

独自のテンプレートの記述についてご不明な点がございましたら、お気軽にカスタマーサポートにご連絡ください。