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.
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 PrakashJ'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.