GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Docker File vs Docker Compose :quelle est la différence ?

J'ai vu beaucoup de gens se confondre entre un fichier Dockerfile et un fichier Compose. C'est principalement parce que les deux sont utilisés pour modifier une image Docker d'une certaine manière, bien que ce ne soit pas techniquement correct.

Il est facile de confondre les deux termes, mais il est également nécessaire de comprendre la différence lors d'une conversation avec un collègue ou votre employeur (potentiel).

Dockerfile est ce qui est utilisé pour créer une image de conteneur, et un fichier Compose est ce qui est utilisé pour déployer une instance de cette image en tant que conteneur.

Permettez-moi d'entrer un peu dans les détails afin que vous compreniez bien la différence entre Docker Compose et Dockerfile.

Qu'est-ce qu'un Dockerfile ?

J'aime appeler Dockerfile le prédécesseur d'une image de conteneur. Vous construisez une image à partir d'un Dockerfile. Un Dockerfile typique contient des instructions de construction spéciales, des commandes telles que RUN , ADD , COPY , ENTRYPOINT , etc.

Prenons l'exemple ci-dessous :

FROM alpine:latest

RUN apk add --no-cache fortune

ENTRYPOINT ["fortune"]

Chaque ligne commence par une instruction pour le composant de construction. Ces instructions ne doivent pas nécessairement être écrites en majuscules. Ce qui suit est tout aussi valable que le précédent.

from alpine:latest

run apk add --no-cache fortune

entrypoint ["fortune"]

À partir de ce Dockerfile, vous pouvez maintenant créer une image de conteneur (ou une image docker). Une image est simplement un modèle pour les conteneurs en cours d'exécution, composé de plusieurs couches en lecture seule. Comme il ne s'agit pas d'un article sur les images de conteneurs, je vais m'abstenir de trop expliquer ce sujet.

Pour créer une image à partir de ce Dockerfile, à l'aide de la CLI docker, exécutez la commande suivante

docker build -t fortune:alpine .

Cela construira une image étiquetée fortune:alpine . Je ne vais pas encore créer de conteneur à partir de cette image, c'est pour la section suivante.

Qu'est-ce qu'un fichier Compose ?

Les fichiers Compose sont utilisés dans deux types de déploiements :dans le déploiement hors cluster avec docker-compose et un déploiement de cluster avec docker swarm .

Pour distinguer les deux types, je vais traiter le fichier de composition responsable du déploiement du cluster en tant que fichiers de pile. Je parlerai des fichiers de pile dans un instant.

Les fichiers de composition font partie d'un outil appelé docker-compose . C'est une application cliente pour le serveur démon docker, un peu comme le docker client CLI, mais au lieu de taper tout le run commandes à chaque fois, avec docker-compose vous pouvez réutiliser le même fichier YAML encore et encore et déployer le même conteneur avec la même configuration que la première fois.

C'est plus lisible, plus maintenable, plus intuitif. Un seul fichier de composition peut contenir plusieurs configurations de déploiement de conteneur.

La prise en charge des fichiers de composition fera partie du client docker par défaut qui est écrit en Go, en tant qu'argument de ligne de commande, "docker compose". Remarquez le trait d'union manquant. C'est encore expérimental, donc en production en utilisant la version Python, c'est-à-dire que docker-compose est toujours recommandé.

Prenons l'image précédente et déployons une instance de celle-ci à l'aide d'un fichier de composition.

version: "3.3"

services:
    fortune:
        image: "fortune:alpine"

Enregistrez le fichier sous docker-compose.yml . Exécutez maintenant dans le même répertoire la commande suivante

docker-compose up

Vous n'êtes pas obligé enregistrez le fichier sous docker-compose.yml , vous pouvez l'enregistrer comme bon vous semble, mais si ce n'est pas docker-compose.yml ou docker-compose.yaml , assurez-vous d'utiliser le -f [FILENAME] option.

docker-compose -f docker-compose.yml up

Attends et regarde ce qu'il va se passer.

Pour savoir quelle fortune c'est-à-dire, lisez cet article sur les drôles de commandes Linux.

12 commandes Linux amusantes pour pimenter votre terminalVoici quelques commandes Linux amusantes et inoffensives pour amuser vos collègues et amis. Ils peuvent sembler inutiles, mais ils sont néanmoins amusants. C'est FOSSCommunity

Qu'est-ce qu'un fichier de pile ?

Les fichiers de pile sont identiques pour composer des fichiers avec une syntaxe similaire et la plupart des options internes, à quelques exceptions près. Les fichiers de pile sont utilisés pour déployer des piles de services dans un cluster Swarm.

Vous pouvez réutiliser le fichier de composition précédent directement en tant que fichier de pile.

Tout d'abord, initialisez le cluster.

docker swarm init

Exécutez ensuite une commande similaire à la suivante

docker stack deploy -c docker-compose.yml fortune

S'il est déployé comme ceci, vous devez vérifier la sortie en affichant les journaux de service à l'aide de docker service logs ... .

Conclusion

Les fichiers Dockerfiles et Compose ont un objectif différent. Si je pouvais créer une chronologie, elle ressemblerait à ceci

Dockerfile -> Docker Image -> Compose File -> Running Containers

Il y a une autre raison pour laquelle les débutants sont confus avec ces deux fichiers. Un Dockerfile peut être pointé via le fichier Compose, puis vous pouvez utiliser docker-compose pour construire l'image.

Par exemple, vous pouvez réécrire le fichier de composition précédent afin

version: "3.3"

services:
    fortune:
        build:
            context: '.'
            dockerfile: "./Dockerfile"
        image: "fortune:alpine"

Vous pouvez maintenant exécuter docker-compose build pour construire l'image. Ou vous pouvez également exécuter docker-compose up --build pour créer et exécuter le conteneur en même temps.

Ici, le Dockerfile est passé par le fichier de composition, et à première vue, il peut sembler que c'est le fichier de composition qui est responsable de la construction de l'image, mais ce n'est pas le cas.

Docker Run vs Start vs Create :Différence expliquée Cet article explique la différence avec des exemples. Manuel LinuxAbhishek Prakash

J'espère que cet article a clarifié la différence entre un fichier Dockerfile et un fichier Compose. Si vous avez des questions, faites-le moi savoir dans la section des commentaires ci-dessous.


Docker
  1. Quoi de neuf dans Docker Compose v2 ?

  2. Quelle est la différence de rediriger une sortie en utilisant >, &>, >&et 2&> ?

  3. Quelle est la différence entre l'écriture dans un fichier et une mémoire mappée ?

  4. Quelle est la différence entre la section et le segment au format de fichier ELF

  5. Quelle est la différence entre l'ajout d'un utilisateur à sudoers et le groupe root ?

NVMe vs M.2 :Quelle est la différence ?

Saveurs Ubuntu :quelle est la différence ?

Qu'est-ce que Docker Compose et comment l'utiliser ?

iptables vs nftables :quelle est la différence ?

SIGTERM vs SIGKILL :Quelle est la différence ?

DevOps vs ingénieur logiciel :quelle est la différence ?