Quelle est la différence entre docker-compose build
et docker build
?
Supposons qu’un fichier docker-compose.yml
se trouve dans un chemin de projet dockérisé:
docker-compose build
Et
docker build
docker-compose
est un wrapper autour de la CLI du menu fixe afin de gagner du temps et d'éviter des lignes de 500 caractères (et de démarrer plusieurs conteneurs simultanément). Il utilise un fichier appelé docker-compose.yml
afin de récupérer les paramètres.
Vous pouvez trouver la référence pour le format de fichier docker-compose ici .
Donc, fondamentalement, docker-compose build
lira votre docker-compose.yml
, recherchera tous les services contenant l’instruction build:
et exécutera un docker build
pour chacun d’eux.
Chaque build:
peut spécifier une Dockerfile
, un contexte et des arguments à transmettre au menu fixe.
Pour conclure avec un exemple de fichier 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
Lors de l'appel de docker-compose build
, seule la cible web
aura besoin d'une image pour être construite. La commande docker build
ressemblerait à ceci:
docker build -t web_myproject -f Dockerfile-Alpine ./web
docker-compose build
construira les services dans le fichier docker-compose.yml
.
https://docs.docker.com/compose/reference/build/
docker build
construira l'image définie par Dockerfile.
Fondamentalement, docker-compose est un meilleur moyen d’utiliser docker qu’une simple commande docker.
Si la question qui se pose ici est de savoir si la commande docker-compose build va générer un type de fichier Zip contenant plusieurs images, qui auraient sinon été construites séparément avec le fichier Dockerfile habituel, alors la pensée est fausse.
Docker-compose build, construira des images individuelles, en entrant dans l’entrée de service individuelle dans docker-compose.yml.
Avec docker images, on peut voir toutes les images individuelles en cours de sauvegarde.
La vraie magie est docker-compose up.
Celui-ci créera essentiellement un réseau de conteneurs interconnectés, pouvant se parler avec un nom de conteneur similaire à un nom d'hôte.
Ajout à la première réponse ...
Vous pouvez donner le nom de l'image et le nom du conteneur sous la définition de service.
par exemple. pour le service appelé 'web' dans l'exemple docker-compose ci-dessous, vous pouvez donner explicitement le nom de l'image et le nom du conteneur, de sorte que docker ne doit pas utiliser les valeurs par défaut.
Sinon, le nom d'image que docker utilisera sera la concaténation du dossier (Répertoire) et le nom du service. par exemple. myprojectdir_web
Il est donc préférable de spécifier explicitement le nom d’image souhaité qui sera généré lors de l’exécution de la commande docker build.
par exemple. image: mywebserviceImage nom_conteneur: my-webServiceImage-Container
exemple de fichier 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