wake-up-neo.com

Was ist der Unterschied zwischen Docker-Compose-Build und Docker-Build?

Was ist der Unterschied zwischen docker-compose build und docker build?

Angenommen, in einem dockerisierten Projektpfad gibt es ein docker-compose.yml Datei:

docker-compose build

Und

docker build
38
Benyamin Jafari

docker-compose ist ein Wrapper um die Docker-CLI, um Zeit zu sparen und 500 Zeichen lange Zeilen zu vermeiden (und auch mehrere Container gleichzeitig zu starten). Es verwendet eine Datei namens docker-compose.yml, um Parameter abzurufen.

Sie finden die Referenz für das Docker-Compose-Dateiformat hier .

Also im Grunde genommen docker-compose build liest dein docker-compose.yml, suche nach allen Diensten, die den build: Anweisung und führe ein docker build für jeden.

Jeder build: kann ein Dockerfile, einen Kontext und Argumente angeben, die an docker übergeben werden sollen.

Zum Abschluss ein Beispiel docker-compose.yml Datei :

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 

Beim Aufruf von docker-compose build, nur das web -Ziel benötigt ein Image, um erstellt zu werden. Das docker build Befehl würde so aussehen:

docker build -t web_myproject -f Dockerfile-Alpine ./web
50
hugoShaka

docker-compose build erstellt die Dienste in docker-compose.yml Datei.

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

docker build erstellt das von Dockerfile definierte Image.

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

10
Corey Taylor

Grundsätzlich ist Docker-Compose eine bessere Methode, Docker zu verwenden, als nur einen Docker-Befehl.

Wenn die Frage hier lautet, ob der Befehl docker-compose build eine Zip-Datei erstellt, die mehrere Images enthält, die andernfalls mit der üblichen Docker-Datei separat erstellt worden wären, ist die Überlegung falsch.

Docker-compose build erstellt einzelne Images, indem in docker-compose.yml ein Eintrag für einzelne Services eingegeben wird.

Mit dem Befehl docker images können wir auch sehen, wie alle Einzelbilder gespeichert werden.

Die wahre Magie besteht darin, dass sich die Hafenarbeiter zusammensetzen.

Dieser wird im Grunde genommen ein Netzwerk von miteinander verbundenen Containern erstellen, die miteinander mit einem Containernamen kommunizieren können, der einem Hostnamen ähnelt.

3
Bharat Raj

Zur ersten Antwort hinzufügen ...

Sie können den Image-Namen und den Containernamen unter der Service-Definition angeben.

z.B. Für den Dienst "web" im folgenden Docker-Compose-Beispiel können Sie den Image-Namen und den Containernamen explizit angeben, damit Docker die Standardeinstellungen nicht verwenden muss.

Andernfalls besteht der von Docker verwendete Bildname aus der Verknüpfung des Ordners (Verzeichnis) und des Dienstnamens. z.B. myprojectdir_web

Aus diesem Grund ist es besser, den gewünschten Image-Namen explizit anzugeben, der generiert wird, wenn der Docker-Build-Befehl ausgeführt wird.

z.B. image: mywebserviceImage container_name: my-webServiceImage-Container

beispiel für eine docker-compose.yml-Datei:

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