カスタム Docker イメージ
Zeabur にはすでにコミュニティ提供の多くのテンプレートが含まれていますが、独自の Docker イメージをデプロイしたり、永続ストレージを設定したり、起動コマンドを設定したりする必要があるかもしれません。このニーズに応えるため、Zeabur はカスタマイズ可能なプリビルド機能を提供しています。
インターフェースを開く
「Add Service」→「Docker Images」をクリックすると、このページが開きます。
設定説明
イメージ
「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_USER
や DB_1_HOST
は有効です。
「Value」は環境変数の値です。ここでは ${KEY}
を使用して他の環境変数のキーを参照できます。上記の図では、MARIADB_PASSWORD
は MARIADB_ROOT_PASSWORD
を直接参照しているため、MARIADB_PASSWORD
の値は 123456
となります。同様に、環境変数の値が password=${MARIADB_PASSWORD}
の場合、展開後の結果は password=123456
となります。この ${KEY}
の参照形式は、サービス起動時に直接展開されるため、アプリケーションが参照するのは既に展開された値であり、アプリケーション層で再度展開する必要はありません。
「Expose」は、環境変数のキーと値を同時に他のサービスにも適用することを指します。上記の図を例にすると、MARIADB_USERNAME
と MARIADB_PASSWORD
は両方とも Expose がチェックされているため、同じプロジェクト下の他のサービスは MARIADB_USERNAME
、MARIADB_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」はファイアウォールのインバウンドルールに相当し、宣言されたポートのみが他のサービスや外部ネットワークから接続可能です。
「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:3306
、backend.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」は永続ストレージ空間のマウントパスです。
デフォルトでは、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」を使用すると、Docker イメージがデフォルトで使用する Entrypoint とパラメータを変更できます。この部分はやや高度なので、意味がよくわからない場合はスキップしても構いません。
GUI から作成された Start Command のデフォルトのコマンドはすべて /bin/sh
です。コマンドが /bin/sh
でない場合は、Edit TOML 機能で直接変更するか、カスタマーサポートにご相談ください。
独自のテンプレート YAML を記述する
GUI は Docker サービスを作成するための必要な多くのパラメータを提供していますが、カスタムアイコン、接続手順、詳細設定などを追加したい場合があるかもしれません。この場合、コードでテンプレートを記述する方が良い選択肢となるでしょう。
独自のテンプレートの記述についてご不明な点がございましたら、お気軽にカスタマーサポートにご連絡ください。