web-dev-qa-db-ja.com

`docker-compose build`と` docker build`の違いは何ですか?

docker-compose builddocker buildの違いは何ですか?

ドッキングされたプロジェクトパスにdocker-compose.ymlファイルがあると仮定します。

docker-compose build

そして

docker build
38
Benyamin Jafari

docker-composeは、時間を稼ぎ、500文字の長さの行を回避する(および同時に複数のコンテナーを開始する)ためのdocker CLIのラッパーです。パラメーターを取得するために、docker-compose.ymlというファイルを使用します。

Docker-composeファイル形式のリファレンス here を見つけることができます。

したがって、基本的にdocker-compose builddocker-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
50
hugoShaka

docker-compose buildは、docker-compose.ymlファイルにサービスを構築します。

https://docs.docker.com/compose/reference/build/

docker buildは、Dockerfileで定義されたイメージを構築します。

https://docs.docker.com/engine/reference/commandline/build/

10
Corey Taylor

基本的に、docker-composeは、単にdockerコマンドよりもdockerを使用するより良い方法です。

ここでの質問が、docker-compose buildコマンドが複数のイメージを含むZipのようなものをビルドする場合、そうでなければ通常のDockerfileで個別にビルドされますが、思考は間違っています。

Docker-composeビルドは、docker-compose.ymlの個々のサービスエントリに移動して、個々のイメージをビルドします。

Docker images、commandでは、保存されている個々の画像もすべて見ることができます。

本当の魔法はdocker-compose upです。

これは基本的に相互接続されたコンテナのネットワークを作成し、ホスト名に似たコンテナ名で互いに通信できます。

3
Bharat Raj

最初の回答に追加しています...

サービス定義でイメージ名とコンテナ名を指定できます。

例えば以下の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
1
shivbits