docker-compose.yml
におけるimageの設定に関して整理した経験より(2021-03-16)
畑田です。
docker-compose.yml
でimageに関する設定を記述する方法を整理したので記録しておきます。
docker-compose.yml
について
docker compose
コマンドやdocker-compose
コマンドでは、imageやcontainerなどの論理オブジェクトを管理する設定を書いたファイルを参照する必要があります。
これがdocker-compose.yml
です。
厳密にいうと、ファイルを指定せずにdocker compose
あるいはdocker-compose
を実行すると、コマンドを打っているdirectory内のdocker-compose.yml
あるいはdocker-compose.yaml
をデフォルトで参照します。
--file
オプションを用いるとどんな名前のファイルでも参照できます。
imageの設定について
docker-compose.yml
ファイル内には、各サービスについて、どの様なimageをビルドするのかを記述する必要があります。
imageに関する変数の指定には、build:
オプションとimage:
オプションを用います。
いずれもservice名の直下に書きます。
build:
option
まず、build:
はimageをビルドするリソースを指定するキーです。
具体的なvalueは、remoteにあるimageへのURLやlocalのDockerfile
へのpath(相対パス、絶対パスとも指定可能)です。
build:
の下にはcontext:
とdockerfile:
などのオプションを記述することができます。(その他にもargs:
やnetwork:
などがあります。)
context:
オプションには、Dockerfileにとってのcurrent directoryを指定し、dockerfile:
オプションにはDockerfileへのpathを指定することができます。
この2つのオプションを使うと、Dockerfileが位置するdirectoryとDockerfileにとってのcurrent directoryが違うという状況を実現できます。
image:
option
image:
オプションは単独で用いられる場合と、build:
オプションとともに用いる場合があります。
単独で用いられる場合、valueにはremote (docker hub)あるいはlocalに存在する、imageのNAME[:TAG]やIDを指定します。
この際、dockerは先にlocalにあるimageを探索し、なければremote (docker hub)を探索するので、同名で異なる内容のimageがlocalとremoteに存在するとき、localが優先されます。
bulid:
オプションとともに用いられる場合、valueにはbuild:
で指定してビルドされたimageにつける名前とタグを指定できます。
build:
オプションのみを記述すると、image名はdefautでroot-directory-name_service-nameになります。