【Railway】Dockerfile からビルドする
Railway で Dockerfile を使ってビルドする方法を解説します。カスタムパスの設定、ビルド時の変数利用、キャッシュマウント、Docker Compose のインポートまでカバーします。
Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)
Dockerfile からビルドする
リポジトリのルートに Dockerfile が存在する場合、Railway は自動的にそれを検出してビルドに使用します。これにより、Nixpacks が提供する自動ビルドの「マジック」を超えて、より詳細なビルドプロセス制御が可能になります。
ビルドログに以下のメッセージが表示されれば、Dockerfile が使われている証拠です。
==========================
Using detected Dockerfile!
==========================カスタム Dockerfile パス
デフォルトでは、Railway はリポジトリのルートにある Dockerfile という名前のファイルを探します。ファイル名が異なる、または別のディレクトリにある場合は、環境変数でパスを指定できます。
- 変数名:
RAILWAY_DOCKERFILE_PATH - 値: Dockerfile へのパス (例:
Dockerfile.originや/build/Dockerfile)
この設定は、Config as Code を使って railway.json や railway.toml で管理することも可能です。
ビルド時の変数利用
ビルド時に Railway が注入する環境変数(サービス変数や Railway 提供の変数)を使いたい場合は、Dockerfile 内で ARG 命令を使って明示的に宣言する必要があります。
# 必要な変数を指定
ARG RAILWAY_SERVICE_NAME
# 変数を使用
RUN echo $RAILWAY_SERVICE_NAMEマルチステージビルドの場合は、必要なステージごとに ARG を宣言してください。
キャッシュマウント
Dockerfile でビルドキャッシュを有効にするには、--mount=type=cache を利用します。ID はサービス ID とターゲットパスを組み合わせて一意にする必要があります。
--mount=type=cache,id=s/<service id>-<target path>,target=<target path><service id> は実際のサービス ID に置き換えてください。
ターゲットパスの確認方法
ターゲットパスが不明な場合は、Nixpacks のソースコードが参考になります。providers ディレクトリから使用している言語の定義ファイルを探し、CACHE_DIR 関連の変数を確認します。
例 (Python の場合):
Python のプロバイダーでは PIP_CACHE_DIR が /root/.cache/pip と定義されているため、マウントコマンドは以下のようになります。
--mount=type=cache,id=s/<service id>-/root/cache/pip,target=/root/.cache/pipDocker Compose
docker-compose.yml ファイルをプロジェクトキャンバスにドラッグ&ドロップするだけで、定義されたサービスやボリュームを自動的にインポートできます。いくつかの設定はまだサポートされていませんが、基本的な構成であれば魔法のように機能します。
Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)