docker buildを実行する際に引数に与える . を所謂おまじないとしか思っていなかったせいで少しハマったので、メモ。
コンテクスト
いつも docker build . -t hoge:v1
などと実行して無事にbuildできていたので気にしていなかったが、引数の”.”はなんなのか。
docker build のヘルプを表示してみる。
$ docker build --help Usage: docker build [OPTIONS] PATH | URL | - Build an image from a Dockerfile Options: (省略)
Optionを無視すれば引数は1つで、その値は PATH/URL/- のいずれからしい。
docker buildのリファレンスによると、この引数で与える値はコンテクストと呼ばれるらしい。
docker build
コマンドは、 Dockerfile と「 コンテクスト 」から Docker イメージを構築するコマンドです。構築のコンテクストとは、指定したパス
やURL
に置かれているファイル全てです。構築の過程で、そのコンテクストにある全てのファイルを参照できます。たとえば、 COPY 命令を使う時に、コンテクスト内にあるファイルを参照して構築できます。URL
パラメータでは、3種類のリソースを参照できます: Git リポジトリ、パッケージ済みの tar ボールコンテキスト、テキストファイル。
コンテクストとDockerfileが揃って初めてimageが構築できるよう。
ところで自分がハマった部分は、先ほどdocker build --help
を実行した際の -f
が関連していたので少し補足します。
Dockerfileがリポジトリ直下にない場合
docker build . -f ./docker/rails/Dockerfile -t hoge:v1
buildの引数のコンテクストを指定した上で、-f
によりDockerfileの位置を指定する必要があります。
ちなみにdocker buildのヘルプ確認時に出てきた -f
の説明は以下です。
-f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile')
-fオプションをつけない場合、Dockerfileが PATH/Dockerfile’ に存在する前提で実行されます。
(fはfileの頭文字のようですね。)
このため、Dockerfileが./Dockerfile
に配置されていてる場合は、PATHとして.
を指定してdocker buildを実行すると無事にbuildできます。