Dockerfile からビルドする
Railway で Dockerfile を使ってビルドする方法を解説します。カスタムパスの設定、ビルド時の変数利用、キャッシュマウント、Docker Compose のインポートまでカバーします。
著者: AIイノベーションズ 阿部隼也(X / Twitter)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/pip
Docker Compose
docker-compose.yml
ファイルをプロジェクトキャンバスにドラッグ&ドロップするだけで、定義されたサービスやボリュームを自動的にインポートできます。いくつかの設定はまだサポートされていませんが、基本的な構成であれば魔法のように機能します。
PR