web-dev-qa-db-fra.com

Quelle est la différence entre `docker-compose build` et` docker build`?

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
38
Benyamin Jafari

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
50
hugoShaka

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.

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

10
Corey Taylor

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.

3
Bharat Raj

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
1
shivbits