Dockerfile の要素を調べる
Dockerfile は、Docker イメージのビルドに使用される一連の命令を含むスクリプトです。 Dockerfile には通常、次の情報が含まれます。
- 新しいイメージを作成するために使用する基本イメージまたは親イメージ
- ベース OS を更新してその他のソフトウェアをインストールするためのコマンド
- 開発したアプリケーションなど、含めるビルド成果物
- ストレージやネットワーク構成など、公開するサービス
- コンテナーが起動されるときに実行するコマンド
Dockerfile を作成する
Dockerfile を作成する最初の手順は、アプリケーションの基盤として機能する基本イメージを選択することです。 たとえば、.NET アプリケーションをビルドする場合、Microsoft .NET イメージをベースとして選択できます。
# Use the .NET 6 runtime as a base image
FROM mcr.microsoft.com/dotnet/runtime:6.0
# Set the working directory to /app
WORKDIR /app
# Copy the contents of the published app to the container's /app directory
COPY bin/Release/net6.0/publish/ .
# Expose port 80 to the outside world
EXPOSE 80
# Set the command to run when the container starts
CMD ["dotnet", "MyApp.dll"]
各行を見て、その機能を確認しましょう。
FROM mcr.microsoft.com/dotnet/runtime:6.0
: このコマンドは、.NET 6 アプリを実行するために必要な .NET 6 ランタイムに基本イメージを設定します。WORKDIR /app
: 作業ディレクトリを/app
に設定します。アプリ ファイルがコピーされる場所です。COPY bin/Release/net6.0/publish/ .
: 発行されたアプリの内容をコンテナーの/app
ディレクトリにコピーします。 .NET 6 アプリが構築され、bin/Release/net6.0/publish
ディレクトリに公開されているとします。EXPOSE 80
: 既定の HTTP ポートであるポート 80 を外部に公開します。 アプリが別のポートで待ち受けしている場合、この行を適宜変更します。CMD ["dotnet", "MyApp.dll"]
: コンテナーの起動時に実行するコマンド。 今回、アプリの DLL ファイル (MyApp.dll
) の名前で dotnet コマンドを実行しています。 アプリの名前とエントリ ポイントが一致するよう、この行を変更します。
Dockerfile ファイルの仕様については説明しません。 詳細については、Dockerfile のリファレンスを参照してください。 最終的なコンテナー イメージを作成するときに、これらの各ステップでキャッシュされたコンテナー イメージが作成されます。 これらの一時的なイメージは、それまでのものの上に階層化され、すべてのステップが完了すると 1 つのイメージとして表されます。
リソース
- Docker 実行リファレンス (CLI)
- Docker ビルド リファレンス