今回はビルドコンテキストについてです。
- ■ビルドコンテキストの説明に入る前に・・・
- ■ビルドコンテキストとは?
- ■ビルドコンテキストの用途
- ■docker build時にコンテナにコピーしたいファイルの格納先
- ■ビルドコンテキストをもう少し深堀りしてみる
- ■Dockerfileとビルドコンテキストを別々に格納したいとき
■ビルドコンテキストの説明に入る前に・・・
docker buildコマンドのfオプションについて復習しておきます。
fオプションを付与する際の書式は以下の通りでした。
docker build -t タグ名 -f Dockerファイル名 ビルドコンテキスト
つまり、Dockerfileとビルドコンテキストは別物です。
Dockerfileとビルドコンテキストは一緒のフォルダである必要はありません。
■ビルドコンテキストとは?
docker buildコマンド実行時に付加する情報のことです。
付加情報と言うぐらいなので、ないとき/不要なときもあります。
以下、若干の語弊もあるのですが、例を示します。
【ないとき】
下記の通り、Dockerfileのみが格納されているときは、ビルドコンテキストはありません。
Dockerを勉強し始めた当初は、ない(=作らない。Dockerfileとビルドコンテキストに同じフォルダを指定=ドットのみを指定した場合)ことが大半です。
この場合のdocker buildコマンドは以下の通りです。
【あるとき】
下記の通り、Dockerfileとtest.txtというものが格納されております。
test.txtが付加情報(=ビルドコンテキスト情報)となります。
■ビルドコンテキストの用途
「docker build時にコンテナにコピーしたいファイルの格納先」として利用します。
■docker build時にコンテナにコピーしたいファイルの格納先
ビルドコンテキストのディレクトリに適当なファイルを格納し、
そのファイルをビルド時にコンテナにコピーすることができます。
例えば、以下のようにwork2フォルダに「test.txt」「Dockerfile」を格納している状態で、test.txtをコンテナの/var/tmp/testdirにコピーしてみたいと思います。
※この場合、work2フォルダが「Dockerfileの格納先」兼「ビルドコンテキストフォルダ」です。
【work2フォルダ内容】
【Dockerfile内容】
ここでは、RUNコマンドによりコンテナ内に/var/tmp/testdirを新規作成し、
COPYコマンドでtest.txt を /var/tmp/testdir/にコピーするようにDockerfileを構成しております。
test.txtの中身は以下です。
※ただのテキストファイルです。
【docker buildコマンド結果】
【docker run後のファイル確認】
上記の通り、/var/tmp/testdirの中にtest.txtが格納されており、test.txtの中身もビルドコンテキスト内に格納したものと同じことが確認できました。
■ビルドコンテキストをもう少し深堀りしてみる
docker buildコマンド時の出力結果を確認してみます。
※実際には、右側に処理時間が記載されているのですが、ここでは表示に都合上割愛しております。
10行目、11行目がDockerfileに記載したRUN/COPYコマンドの処理結果です。
■Dockerfileとビルドコンテキストを別々に格納したいとき
Dockerfileとビルドコンテキストを別々に格納/管理したいときがあるかと思います。
そのようなときには、docker buildコマンドでfオプションを利用します。
fオプションの使い方の詳細は下記記事で取り上げていますので、ここではコマンドだけ記載します。
ビルドコンテキストはwork2(今迄から変更なし)、
Dockerfileをwork3フォルダに格納します。
この状態でdocker buildコマンドを実行します。
※カレントディレクトリは、C:\Users\test\Desktop\work2です。
docker build -t centos:test1 -f C:\Users\test\Desktop\work3\Dockerfile .
以上です。