Docker:【ビルドコンテキスト】とは?


はじめに

ビルド(build)とは?

  • イメージ(Dockerイメージ)を作成すること
  • イメージに構築する環境に必要なファイルやアプリを追加していく
  • 実行コマンドは「docker build」
    • Docker EngineがDockerファイルを参照し、イメージを作成する
  • 参考

コンテキストとは?

  • ファイルを指す場合
    • 書かれた設定情報(requirement.txtなど)
    • アプリインストールに必要なファイル
    • イメージにそのまま取り込むファイル
  • 配置先を指す場合
    • カレントディレクトリ
    • ファイルが格納された場所

ビルドコンテキストについて

Dockerの動き

  • docker build時
    • 環境構築に必要な情報をDockerデーモンに送る
    • Dockerに送る情報は特定のディレクトリに配置する
    • 送られてくるデータ量によってイメージのサイズが変わる
  • ポイント
    • ディレクトリの情報は要不要関係なくイメージに取り込まれる
    • 不要な情報が含まれると無駄にイメージが大きくなる
      • これは避けなければならないこと

ビルドコンテキストの概念を導入

  • ビルドコンテキストとは
    • イメージ作成に必要なファイル
    • 必要なファイルはディレクトリにまとめる
    • 不要なファイルはおかない
    • ビルド時にビルドコンテキストを指定する
  • 概念を導入して理解したいこと
    • イメージを作成する時にビルドコンテキストがどこかを理解する
    • イメージ名やタグにどのディレクトリの情報が含まれているか分かるようにする
    • ビルドに使用したディレクトリは基本触らない
      (テストや構築時のリトライは除く)

buildコマンド例

docker build .

  • 「.」
    • カレントディレクトリを指す
    • ビルドコンテキストはカレントディレクトリ
  • 運用
    • あるディレクトリに必要なファイルを集める
    • そのディレクトリにcdする
    • そこでdocker buildコマンドを実行する

docker build <path>

  • <path>
    • ディレクトリを指定する
    • ビルドコンテキストは指定したディレクトリ
  • 運用
    • あるディレクトリに必要なファイルを集める
    • docker buildコマンド実行時にディレクトリを指定する

まとめ

  • 指定ディレクトリにあるファイルがすべてイメージに取り込まれる
  • Dockerイメージが不必要に大きくならないように注意する
  • ビルドコンテキストとはそれらをまとめた総称、概念

リファレンス


Posted by futa