Compose ファイル構築リファレンス¶
Compose 仕様とは、複数のコンテナアプリケーションを定義するための、プラットフォームに中立な手法です。Compose の実装で焦点をあてているのは、ローカルマシン上でアプリケーションを実行する開発の利用例であり、ソースからアプリケーションを構築(および再構築)も明確にサポートしています。 Compose
定義¶
Compose Specification (仕様)は、サービス上で build
(構築)サブセクションをオプションでサポートするように拡張されました。このセクションで定義するのは、サービス コンテナ イメージの services
サブセットのみ、 build
サブセクションや image
属性をもとに作成されるその他を定義できます。サービスに build
サブセクションがある場合、Compose 実装はソースからイメージを構築できるため、 Compose ファイルで対応するサービスの image
属性を見落とす処理も「
構築の指定は、単一文字列でコンテクストのパスを指定するか、詳細な構築を定義するかのどちらかです。
前者の場合、パス全体を Docker コンテクストとして使用しますので、このコンテクストのルートで正しい Dockerfile
を探し、docker build を実行します。コンテクストのパスは、絶対パスか相対パスです。なお、相対パスは Compose ファイルの親フォルダを基準にする必要があります。 Compose ファイルを持ち運びできるようにするには、絶対パスは避けるべきであり、 Compose 実装はユーザに対して
後者の場合、代替する Dockerfile
の場所指定を含む、構築に対する引数を指定できます。これは、絶対パスも相対パスも利用できます。Dockerfile が相対パスの場合は、コンテキストのパスを基準にする
イメージの一貫性¶
サービス定義に image
属性と build
セクションの両方がある場合、取得したイメージがソースから構築したイメージと厳密に同じかどうかを、 Compose 実装では保証できません。ユーザから何らかの指示が明示されない限り、 Compose 実装は第一にイメージの取得を試し、レジストリ内にイメージがみつからない場合は、イメージをソースから構築します。Compose 実装はユーザからの要求によって、この挙動をカスタマイズするオプションを提供しても :ruby:構いません <MAY>` 。
構築イメージの公開¶
構築をサポートする Compose 実装は、構築したイメージのレジストリ image
属性を持たないイメージの送信を防ぐため、 Compose 実装はユーザに
YAML ファイル内でサービスに対する image
属性が明示的に宣言されていない場合、Compose 実装はサービスの image
属性を生成する仕組みを提供しても image
属性を持たないサービス イメージの送信を image
属性を持っていると見なします。
説明例¶
以下の静的なサンプル アプリケーション例を通し、 Compose 仕様の概念を説明します。このサンプルは実用的ではありません。
services:
frontend:
image: awesome/webapp
build: ./webapp
backend:
image: awesome/database
build:
context: backend
dockerfile: ../backend.Dockerfile
custom:
build: ~/custom
ソースからサービス イメージを構築する時、このような Compose ファイルによって3つの Docker イメージが作成されます。
awesome/webapp
docker イメージは、 Compose ファイルがある親フォルダ内のwebapp
サブディレクトリを、 docker 構築コンテクストとして使用します。このフォルダ内にDockerfile
が無い場合は、エラーを起こします。awesome/database
docker イメージは、 Compose ファイルがある親フォルダ内のwebapp
サブディレクトリを、 docker 構築コンテクストとして使用します。構築手順を定義するにあたり、backend.Dockerfile
ファイルを使います。このファイルはコンテクストパスに関連して検索されますので、つまり、このサンプルでは..
が Compose ファイルの親フォルダとして基準となります(解決されます)ので、backend.Dockerfile
は兄弟のようなファイルと言えます。custom
ディレクトリで、ユーザの HOME (ホームディレクトリ)内を docker コンテクストとして使い、 Docker イメージを構築します。ポータブルではないパスが構築イメージで使われた場合、Compose 実装はユーザに警告します。
awesome/webapp
と awesome/database
の両 Docker イメージが(デフォルトの)レジストリに custom
サービスイメージは image
属性を持たないためスキップされ、ユーザには、この属性が無いと警告します。
build 定義¶
build
要素は、 Docker イメージをソースから構築するために、 Compose 実装によって適用される設定情報のオプションを定義します。 build は、構築コンテクストへのパスを含む文字列か、詳細な構造のどちらかで指定します。
services:
webapp:
build: ./dir
この文字列の構文を使うと、 Compose ファイルの親フォルダからの相対パスとしてのみ、構築コンテキストを設定できます。このパスはディレクトリであり、かつ、 Dockerfile
を含む必要があります。
あるいは、 build
は以下のように定義されたフィールドを持つオブジェクトにもできます。
context(必須)¶
context
は Dockerifle を含むディレクトリのパスか、 git リポジトリの url を定義します。
値が相対パスとして指定される場合、 Compose ファイルの場所からの相対パスと解釈する
build:
context: ./dir
dockerfile¶
dockerfile
は別の Dockerfile を指定できるようにします。相対パスは構築コンテキストを基準とする
build:
context: .
dockerfile: webapp.Dockerfile
args¶
args
は、たとえば Dockerfile の ARG
値のように構築の引数を指定します。
以下の Dockerfile を使います:
ARG GIT_COMMIT
RUN echo "Based on commit: $GIT_COMMIT"
args
は Compose ファイルの build
キー以下で GIT_COMMIT
を定義できます。 args
はマップかリストで指定できます。
build:
context: .
args:
GIT_COMMIT: cdc3b19
build:
context: .
args:
- GIT_COMMIT=cdc3b19
build の引数(args)の指定時に、値を省略できます。その場合、ユーザの操作によって構築時に値の指定が
args:
- GIT_COMMIT
ssh¶
ssh
は、イメージ構築中にイメージビルダが
ssh
属性の構文は、以下どちらかです。
default`` :ビルダを ssh-agent に接続します。
ID=path
:ID と関連するパスをキーバリューで定義します。 PEM ファイルや、 ssh-agent ソケットのパスを指定できます。
シンプルな default
例:
build:
context: .
ssh:
- default # mount the default ssh agent
または
build:
context: .
ssh: ["default"] # mount the default ssh agent
任意の ID myproject
にローカルの SSH 鍵のパスを使う場合:
build:
context: .
ssh:
- myproject=~/.ssh/myproject.pem
イメージビルダは構築期間中に SSH 鍵をマウントできます。具体例として、 BuildKit 拡張構文によって、 ID として設定された SSH 鍵をマウントすると、リソースへ安全なアクセスできます:
RUN --mount=type=ssh,id=myproject git clone ...
cache_from¶
cache_from
は、イメージビルダがキャッシュの解決に
キャッシュ場所の構文は、以下のグローバル形式 [NAME|type=TYPE[,KEY=VALUE]]
に従う必要があります。シンプルな NAME
は、実際には type=registry,ref=NAME
と書く形式の省略形です。
Compose ビルダの実装は任意のタイプをサポートしても
registry
は、キーref
によって設定された OCI イメージから構築キャッシュを取得します。
build:
context: .
cache_from:
- alpine:latest
- type=local,src=path/to/cache
- type=gha
サポートされていないキャッシュは無視が
cache_to¶
cache_to
は、以後の構築時に構築キャッシュとして共有するために使えるよう、エクスポートする場所のリストを定義します。
build:
context: .
cache_to:
- user/app:cache
- type=local,dest=path/to/cache
type=TYPE[,KEY=VALUE]
構文を使って定義できます。
サポートされていないキャッシュ対象は無視が
extra_hosts¶
extra_hosts
は構築時に追加のホスト名を割り当てます。 extra_hosts と同じ構文です。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
Compose 実装は、コンテナのネットワーク設定内に、 IP アドレスとホスト名の一致するエントリを作成する /etc/hosts
に行を追加します。
162.242.195.82 somehost
50.31.209.229 otherhost
isolation¶
isolation
は構築時のコンテナ分離技術を指定します。 isolation のように、サポートしている値はプラットフォーム固有です。
labels¶
labels
は構築成果のイメージにメタデータを追加します。 labels
はアレイ形式かマップ形式のどちらかです。
他のソフトウェアが使うラベルとの重複を避けるため、逆引き DNS 記法を
build:
context: .
labels:
com.example.description: "Accounting webapp"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
build:
context: .
labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
shm_size¶
shm_size
は、Docker イメージ構築時に割り当てる共有メモリの容量( Linux 上の /dev/shm
パーティション )を設定します。設定はバイトを整数値で指定するか、 バイト値 の文字列で表現します。
build:
context: .
shm_size: '2gb'
build:
context: .
shm_size: 10000000
target¶
target
は、マルチステージ Dockerfile
内で定義されている
build:
context: .
target: prod
実装¶
buildX bake
参考
- Compose file build reference