Was ist der Unterschied zwischen docker-compose buildund docker build?
Angenommen, in einem Docker-Projektpfad befindet sich eine docker-compose.ymlDatei:
docker-compose build
Und
docker build
Was ist der Unterschied zwischen docker-compose buildund docker build?
Angenommen, in einem Docker-Projektpfad befindet sich eine docker-compose.ymlDatei:
docker-compose build
Und
docker build
Antworten:
docker-composekann als Wrapper um die Docker-CLI betrachtet werden (tatsächlich handelt es sich um eine andere Implementierung in Python, wie in den Kommentaren erwähnt ), um Zeit zu gewinnen und 500 Zeichen lange Zeilen zu vermeiden (und auch mehrere Container gleichzeitig zu starten). Es wird eine aufgerufene Datei docker-compose.ymlverwendet, um Parameter abzurufen.
Die Referenz für das Docker-Compose-Dateiformat finden Sie hier .
docker-compose buildLesen Sie also im Grunde Ihre docker-compose.yml, suchen Sie nach allen Diensten, die die build:Anweisung enthalten, und führen Sie docker buildfür jeden einen aus.
Jederbuild: kann a Dockerfile, einen Kontext und Argumente angeben , die an Docker übergeben werden sollen.
Um mit einer Beispieldatei abzuschließen 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
Beim Aufrufen docker-compose buildmuss nur das webZiel ein Image erstellen. Der docker buildBefehl würde folgendermaßen aussehen:
docker build -t web_myproject -f Dockerfile-alpine ./web
webkommt vom Containernamen. myprojectist der Name des Ordners, in dem Sie sich befinden. Dadurch werden Konflikte vermieden, wenn Sie an zwei Projekten arbeiten, die beide einen webContainer enthalten.
docker-compose.ymloben angegebenen, webkommt aus dem Dienstnamen.
docker-compose builderstellt die Dienste in der docker-compose.ymlDatei.
https://docs.docker.com/compose/reference/build/
docker build erstellt das von Dockerfile definierte Image.
Grundsätzlich ist Docker-Compose eine bessere Möglichkeit, Docker zu verwenden als nur ein Docker-Befehl.
Wenn die Frage hier ist, ob der Docker-Compose-Build-Befehl eine Zip-Datei mit mehreren Bildern erstellt, die sonst mit der üblichen Docker-Datei separat erstellt worden wären, dann ist das Denken falsch.
Docker-Compose Build erstellt einzelne Images, indem Sie in docker-compose.yml in den einzelnen Serviceeintrag gehen.
Mit Docker-Bildern, Befehl, können wir auch alle einzelnen Bilder sehen, die gespeichert werden.
Die wahre Magie ist Docker-Compose.
Dieser erstellt im Grunde ein Netzwerk miteinander verbundener Container, die mit einem Containernamen ähnlich einem Hostnamen miteinander kommunizieren können.
Zur ersten Antwort hinzufügen ...
Sie können den Bildnamen und den Containernamen unter der Dienstdefinition angeben.
Beispiel: Für den Dienst "web" im folgenden Docker-Compose-Beispiel können Sie den Bildnamen und den Containernamen explizit angeben, damit Docker die Standardeinstellungen nicht verwenden muss.
Andernfalls ist der vom Docker verwendete Image-Name die Verkettung des Ordners (Verzeichnisses) und des Dienstnamens. zB myprojectdir_web
Es ist daher besser, den gewünschten Bildnamen explizit anzugeben, der generiert wird, wenn der Docker-Build-Befehl ausgeführt wird.
Beispiel: mywebserviceImage container_name: my-webServiceImage-Container
Beispiel für die Datei 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:, müssen Sie den genauen Dateinamen als angeben Dockerfile. Zum Beispiel in build: ./web.So ist die Verwendung von context:eine gute!
Einige zusätzliche Worte über den Unterschied zwischen docker buildund docker-compose build. Beide haben die Option, Bilder mit einem vorhandenen Bild als Ebenen-Cache zu erstellen.
docker buildist die Option--cache-from <image>docker-composergibt es ein Tag cache_fromim buildAbschnitt.Leider sind Bilder, die von einem erstellt wurden, auf dieser Ebene bisher nicht mit dem anderen als Ebenen-Cache kompatibel ( IDs sind nicht kompatibel ). In docker-compose Version 1.25.0 (18.11.2019) wird jedoch eine experimentelle Funktion COMPOSE_DOCKER_CLI_BUILD eingeführt , docker-composedie den nativen Docker-Builder verwendet (daher können von erstellte Bilder docker buildals Cache für Ebenen verwendet werden docker-compose build).