AIイノベーションズ
Railway/Guides

Dockerfile からビルドする

Railway で Dockerfile を使ってビルドする方法を解説します。カスタムパスの設定、ビルド時の変数利用、キャッシュマウント、Docker Compose のインポートまでカバーします。

著者: AIイノベーションズ 阿部隼也X / Twitter

Railwayはこちら

Dockerfile からビルドする

リポジトリのルートに Dockerfile が存在する場合、Railway は自動的にそれを検出してビルドに使用します。これにより、Nixpacks が提供する自動ビルドの「マジック」を超えて、より詳細なビルドプロセス制御が可能になります。

ビルドログに以下のメッセージが表示されれば、Dockerfile が使われている証拠です。

==========================
Using detected Dockerfile!
==========================

カスタム Dockerfile パス

デフォルトでは、Railway はリポジトリのルートにある Dockerfile という名前のファイルを探します。ファイル名が異なる、または別のディレクトリにある場合は、環境変数でパスを指定できます。

  • 変数名: RAILWAY_DOCKERFILE_PATH
  • : Dockerfile へのパス (例: Dockerfile.origin/build/Dockerfile)

この設定は、Config as Code を使って railway.jsonrailway.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/pip

Docker Compose

docker-compose.yml ファイルをプロジェクトキャンバスにドラッグ&ドロップするだけで、定義されたサービスやボリュームを自動的にインポートできます。いくつかの設定はまだサポートされていませんが、基本的な構成であれば魔法のように機能します。

Railwayはこちら

PR