自由気ままに書いちゃおう

好きなことをつらつらと・・・

【docker】ビルドコンテキスト(build context)とは?

今回はビルドコンテキストについてです。

■ビルドコンテキストの説明に入る前に・・・

docker buildコマンドのfオプションについて復習しておきます。
fオプションを付与する際の書式は以下の通りでした。

docker build -t タグ名 -f Dockerファイル名 ビルドコンテキスト



つまり、Dockerfileとビルドコンテキストは別物です。
Dockerfileとビルドコンテキストは一緒のフォルダである必要はありません。

■ビルドコンテキストとは?

docker buildコマンド実行時に付加する情報のことです。
付加情報と言うぐらいなので、ないとき/不要なときもあります。

以下、若干の語弊もあるのですが、例を示します。

【ないとき】
下記の通り、Dockerfileのみが格納されているときは、ビルドコンテキストはありません。
f:id:guri2o1667:20201130160027p:plain

 

Dockerを勉強し始めた当初は、ない(=作らない。Dockerfileとビルドコンテキストに同じフォルダを指定=ドットのみを指定した場合)ことが大半です。
この場合のdocker buildコマンドは以下の通りです。
f:id:guri2o1667:20201130144615p:plain

 

【あるとき】
下記の通り、Dockerfileとtest.txtというものが格納されております。
test.txtが付加情報(=ビルドコンテキスト情報)となります。

f:id:guri2o1667:20201130160008p:plain

■ビルドコンテキストの用途


「docker build時にコンテナにコピーしたいファイルの格納先」として利用します。
 

■docker build時にコンテナにコピーしたいファイルの格納先

ビルドコンテキストのディレクトリに適当なファイルを格納し、
そのファイルをビルド時にコンテナにコピーすることができます。

例えば、以下のようにwork2フォルダに「test.txt」「Dockerfile」を格納している状態で、test.txtをコンテナの/var/tmp/testdirにコピーしてみたいと思います。
※この場合、work2フォルダが「Dockerfileの格納先」兼「ビルドコンテキストフォルダ」です。

【work2フォルダ内容】

f:id:guri2o1667:20201130145658p:plain


【Dockerfile内容】


ここでは、RUNコマンドによりコンテナ内に/var/tmp/testdirを新規作成し、
COPYコマンドでtest.txt を /var/tmp/testdir/にコピーするようにDockerfileを構成しております。
f:id:guri2o1667:20201130145725p:plain

test.txtの中身は以下です。
※ただのテキストファイルです。

f:id:guri2o1667:20201130150813p:plain

【docker buildコマンド結果】

f:id:guri2o1667:20201130145807p:plain

【docker run後のファイル確認】

f:id:guri2o1667:20201130150632p:plain

上記の通り、/var/tmp/testdirの中にtest.txtが格納されており、test.txtの中身もビルドコンテキスト内に格納したものと同じことが確認できました。

■ビルドコンテキストをもう少し深堀りしてみる

docker buildコマンド時の出力結果を確認してみます。
※実際には、右側に処理時間が記載されているのですが、ここでは表示に都合上割愛しております。

f:id:guri2o1667:20201130151052p:plain


10行目、11行目がDockerfileに記載したRUN/COPYコマンドの処理結果です。

■Dockerfileとビルドコンテキストを別々に格納したいとき

Dockerfileとビルドコンテキストを別々に格納/管理したいときがあるかと思います。
そのようなときには、docker buildコマンドでfオプションを利用します。
fオプションの使い方の詳細は下記記事で取り上げていますので、ここではコマンドだけ記載します。

www.guri2o1667.work

 

ビルドコンテキストはwork2(今迄から変更なし)、
Dockerfileをwork3フォルダに格納します。

f:id:guri2o1667:20201130153514p:plain

 

f:id:guri2o1667:20201130153524p:plain


この状態でdocker buildコマンドを実行します。
※カレントディレクトリは、C:\Users\test\Desktop\work2です。

docker build -t centos:test1 -f C:\Users\test\Desktop\work3\Dockerfile .

f:id:guri2o1667:20201130154057p:plain

以上です。