ビルド引数とキャッシュ無効化を使用したサービスのビルド
このステップでは、Docker Compose の 2 つの高度なビルドオプションを探求します:ビルド引数の使用とキャッシュ無効化でのビルドです。
ビルド引数を使用すると、Docker ビルドプロセスに変数を渡すことができます。これはDockerfile
自体を変更せずに、異なる環境や設定に基づいてビルドをカスタマイズするのに便利です。
まず、ビルド引数を受け入れるようにDockerfile
を修正しましょう。編集のためにDockerfile
を開きます:
nano ~/project/Dockerfile
内容を以下のように変更します:
FROM ubuntu:latest
ARG MESSAGE="Hello from build argument!"
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "$MESSAGE"]
ARG MESSAGE
命令を追加して、デフォルト値を持つMESSAGE
というビルド引数を定義しました。また、CMD
命令を変更してこの引数を使用するようにしました。
Ctrl + X
、Y
、Enter
の順に押してDockerfile
を保存します。
次に、このビルド引数に値を渡すようにdocker-compose.yml
ファイルを修正します。編集のためにファイルを開きます:
nano ~/project/docker-compose.yml
内容を以下のように変更します:
version: "3.8"
services:
cow:
build:
context: .
args:
MESSAGE: "Custom message from Compose!"
build:
ディレクティブをcontext:
とargs:
を持つオブジェクトに変更しました。
context: .
- Dockerfile
を含むディレクトリであるビルドコンテキストを指定
args:
- Dockerfile
に渡すビルド引数のマップ。MESSAGE
引数に"Custom message from Compose!"
という値を渡しています
Ctrl + X
、Y
、Enter
の順に押してdocker-compose.yml
ファイルを保存します。
では、ビルド引数を使用してイメージをビルドしましょう。~/project
ディレクトリにいることを確認してください。
cd ~/project
docker-compose build
ビルド出力を観察してください。ビルドプロセス中にビルド引数が使用されていることが確認できるはずです。
ビルドが完了したら、このイメージからコンテナを実行して出力を確認しましょう。
docker run project_cow
"Custom message from Compose!"というメッセージを含むcowsay
の出力が表示されるはずです。これにより、ビルド引数が正常に渡され使用されたことが確認できます。
時々、キャッシュを無視してすべてのレイヤーを強制的にリビルドしたい場合があります。これはキャッシュの問題が疑われる場合や、クリーンなビルドを保証したい場合に便利です。docker-compose build
コマンドに--no-cache
フラグを指定することでこれが可能です。
--no-cache
フラグを使用してイメージをリビルドしてみましょう。
docker-compose build --no-cache
再度ビルド出力を観察してください。今回は Docker がキャッシュされたレイヤーを使用せず、Dockerfile
のすべてのステップをリビルドします。このプロセスはキャッシュを使用したビルドよりも時間がかかります。
ビルドが完了したら、再度コンテナを実行して、メッセージがビルド引数で渡されたものと同じであることを確認できます。
docker run project_cow
依然として"Custom message from Compose!"が表示されるはずです。--no-cache
フラグはビルドプロセスにのみ影響し、docker-compose.yml
で定義された設定には影響しません。