違いは何であるdocker-compose build
とはdocker build
?
ドッキングされたプロジェクトパスにdocker-compose.yml
ファイルがあるとします。
docker-compose build
そして
docker build
違いは何であるdocker-compose build
とはdocker build
?
ドッキングされたプロジェクトパスにdocker-compose.yml
ファイルがあるとします。
docker-compose build
そして
docker build
回答:
docker-compose
時間を稼ぎ、500文字の長さの行を回避する(そして同時に複数のコンテナーを開始する)ために、docker CLIのラッパーと見なすことができます(実際、コメントで述べられているように、 Pythonの別の実装です)。docker-compose.yml
パラメータを取得するために呼び出されるファイルを使用します。
docker-composeファイル形式のリファレンスはここにあります。
したがって、基本的にdocker-compose build
はを読み取りdocker-compose.yml
、build:
ステートメントを含むすべてのサービスを探しdocker build
、それぞれに対してを実行します。
それぞれbuild:
がDockerfile
、dockerに渡すコンテキストと引数を指定できます。
サンプルdocker-compose.yml
ファイルで締めくくります:
version: '3.2'
services:
database:
image: mariadb
restart: always
volumes:
- ./.data/sql:/var/lib/mysql
web:
build:
dockerfile: Dockerfile-alpine
context: ./web
ports:
- 8099:80
depends_on:
- database
を呼び出すときdocker-compose build
は、web
ターゲットのみがイメージを作成する必要があります。docker build
コマンドは次のようになります。
docker build -t web_myproject -f Dockerfile-alpine ./web
web
コンテナ名に由来します。myproject
は現在のフォルダの名前です。これにより、両方にweb
コンテナを含む2つのプロジェクトで作業する場合の競合が回避されます。
docker-compose.yml
上記に基づいて、web
サービス名に由来します。
docker-compose build
docker-compose.yml
ファイルにサービスを構築します。
https://docs.docker.com/compose/reference/build/
docker build
Dockerfileで定義されたイメージをビルドします。
基本的に、docker-composeは、dockerコマンドよりもdockerを使用するためのより良い方法です。
ここでの質問がdocker-composebuildコマンドが複数のイメージを含むzipのようなものをビルドするかどうかである場合、そうでなければ通常のDockerfileとは別にビルドされますが、考え方は間違っています。
Docker-compose buildは、docker-compose.ymlの個々のサービスエントリに移動することで、個々のイメージをビルドします。
Dockerイメージ、コマンドを使用すると、保存されているすべての個々のイメージも確認できます。
本当の魔法はdocker-composeupです。
これは基本的に相互接続されたコンテナのネットワークを作成し、ホスト名に似たコンテナの名前で相互に通信できます。
最初の答えに追加...
サービス定義の下でイメージ名とコンテナー名を指定できます。
たとえば、以下のdocker-composeの例の「web」というサービスの場合、イメージ名とコンテナ名を明示的に指定できるため、dockerはデフォルトを使用する必要がありません。
それ以外の場合、dockerが使用するイメージ名は、フォルダー(ディレクトリ)とサービス名を連結したものになります。例:myprojectdir_web
そのため、dockerbuildコマンドの実行時に生成される目的のイメージ名を明示的に指定することをお勧めします。
例:画像:mywebserviceImage container_name:my-webServiceImage-Container
docker-compose.ymlファイルの例:
version: '3.2'
services:
web:
build:
dockerfile: Dockerfile-alpine
context: ./web
ports:
- 8099:80
image: mywebserviceImage
container_name: my-webServiceImage-Container
depends_on:
- database
build:
すると、正確なファイル名がDockerfile
。になります。たとえば、build: ./web
.Soの使用context:
は良いものです!
docker build
との違いについての追加の単語はほとんどありませんdocker-compose build
。どちらにも、既存のイメージをレイヤーのキャッシュとして使用してイメージを構築するためのオプションがあります。
docker build
と、オプションは--cache-from <image>
docker-composer
、セクションにタグcache_from
がありbuild
ます。残念ながら、これまで、このレベルでは、一方が作成した画像は、レイヤーのキャッシュとして他方と互換性がありません(IDは互換性がありません)。しかし、docker-compose
v1.25.0(2019年11月18日)は、実験的な機能の導入COMPOSE_DOCKER_CLI_BUILDをそのようdocker-compose
な用途ネイティブドッカービルダー(従って、製画像docker build
のための層のキャッシュとして使用することができますdocker-compose build
)