docker-compose build
とdocker build
の違いは何ですか?
ドッキングされたプロジェクトパスにdocker-compose.yml
ファイルがあると仮定します。
docker-compose build
そして
docker build
docker-compose
は、時間を稼ぎ、500文字の長さの行を回避する(および同時に複数のコンテナーを開始する)ためのdocker CLIのラッパーです。パラメーターを取得するために、docker-compose.yml
というファイルを使用します。
Docker-composeファイル形式のリファレンス here を見つけることができます。
したがって、基本的にdocker-compose build
はdocker-compose.yml
を読み取り、build:
ステートメントを含むすべてのサービスを探し、それぞれに対してdocker build
を実行します。
各build:
は、Dockerfile
、コンテキスト、およびドッカーに渡す引数を指定できます。
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
docker-compose build
は、docker-compose.yml
ファイルにサービスを構築します。
https://docs.docker.com/compose/reference/build/
docker build
は、Dockerfileで定義されたイメージを構築します。
基本的に、docker-composeは、単にdockerコマンドよりもdockerを使用するより良い方法です。
ここでの質問が、docker-compose buildコマンドが複数のイメージを含むZipのようなものをビルドする場合、そうでなければ通常のDockerfileで個別にビルドされますが、思考は間違っています。
Docker-composeビルドは、docker-compose.ymlの個々のサービスエントリに移動して、個々のイメージをビルドします。
Docker images、commandでは、保存されている個々の画像もすべて見ることができます。
本当の魔法はdocker-compose upです。
これは基本的に相互接続されたコンテナのネットワークを作成し、ホスト名に似たコンテナ名で互いに通信できます。
最初の回答に追加しています...
サービス定義でイメージ名とコンテナ名を指定できます。
例えば以下のdocker-composeの例の「web」というサービスの場合、イメージ名とコンテナー名を明示的に指定できるため、Dockerはデフォルトを使用する必要がありません。
それ以外の場合、Dockerが使用するイメージ名は、フォルダー(ディレクトリ)とサービス名の連結になります。例えばmyprojectdir_web
したがって、docker buildコマンドの実行時に生成される目的のイメージ名を明示的に配置することをお勧めします。
例えば画像: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