70 votes

Quelle est la différence entre un fichier de pile et un fichier Compose ?

J'apprends à utiliser Docker Compose pour déployer des applications dans plusieurs conteneurs, sur plusieurs hôtes. Et je suis tombé sur deux fichiers de configuration - le fichier stack et le fichier Compose.

De la Référence YAML du fichier de la pile du nuage Elle stipule un fichier de pile est un fichier au format YAML qui définit un ou plusieurs services, de manière similaire à une docker-compose.yml mais avec quelques extensions.

Et de ce poste il indique que les piles sont très similaires à docker-compose, sauf qu'elles définissent des services alors que docker-compose définit des conteneurs .

Ils se ressemblent beaucoup, et je me demande donc quand utiliser le fichier stack et quand utiliser le fichier Compose ?

1 votes

Bonne question. Je voudrais également demander pourquoi nous avons besoin de Docker stack alors que nous avons déjà docker compose ? Dans le deuxième lien, il est dit que Docker stack est un service du moteur Docker, alors que Docker compose ne l'est pas. Alors pourquoi ne pouvons-nous pas simplement mettre à niveau docker compose et en faire un service ?

1 votes

@lonelyloner grande question, à mon avis c'est parce que docker-compose est un outil à part entière et qu'il n'est pas intégré à docker. Sous Linux, j'ai dû l'installer séparément, alors que sous Windows, je crois qu'il est intégré à Docker. J'espère qu'à l'avenir, Docker les fusionnera et qu'il n'y aura plus qu'un seul fichier de pile.

65voto

Roman Mik Points 445

D'un point de vue conceptuel, les deux fichiers ont le même objectif : le déploiement et la configuration de vos conteneurs sur les moteurs Docker.

L'outil Docker-compose a été créé en premier et son but est "de définir et d'exécuter des applications Docker multi-conteneurs" sur un seul moteur Docker. (voir aperçu de docker compose )

Vous utilisez docker-compose up pour créer/mettre à jour vos conteneurs, réseaux, volumes, etc.

Pile Docker est utilisé dans Docker Swarm (l'outil d'orchestration et de planification de Docker) et, par conséquent, il possède des paramètres de configuration supplémentaires (c'est-à-dire répliques, déploiement, rôles) qui ne sont pas nécessaires sur un moteur Docker unique.

Le fichier de pile est interprété par docker stack commande. Cette commande ne peut être invoquée qu'à partir d'un gestionnaire d'essaims Docker.

Vous pouvez convertir docker-compose.yml en docker-cloud.yml et inversement. Cependant, comme indiqué dans votre question, vous devez faire attention aux différences. De plus, vous devez garder à l'esprit qu'il existe différentes versions pour docker-compose. Actuellement, la dernière version est la version 3. ( https://docs.docker.com/compose/compose-file/ )

Edit : Un blog intéressant, qui pourrait aider à comprendre les différences, peut être trouvé ici https://blog.nimbleci.com/2016/09/14/docker-stacks-and-why-we-need-them/

1 votes

Oui, cela m'a troublé car le fichier Compose mentionne également des propriétés liées à l'essaimage, telles que deploy qui sont ignorés lorsque vous utilisez docker compose et seulement dans les faits docker stack deploy . Je suppose qu'à toutes fins utiles, pour la version 3+ de compose, ils sont les mêmes ?

0 votes

La version 3 est différente de la 2. Pas beaucoup. Notamment la façon dont les volumes sont déclarés. Il y a aussi d'autres changements. La version 3 de compose devrait pouvoir fonctionner sur swarm sans changement, mais en réalité vous voudrez ajouter des configurations swarm, surtout si vos conteneurs ont des volumes et que vous ne pouvez pas vous permettre de perdre leurs données lors d'un redéploiement.

7 votes

@sudo "docker stack" ne fonctionne que sur Docker Swarm. docker-compose est une extension de dock pour faciliter l'orchestration des services sur un seul moteur docker. Docker stack est une création de docker-compose. Nous espérons qu'à l'avenir, ils fusionneront les deux et garderont docker stack.

15voto

JeremyDouglass Points 538

Nota: La question suppose que la référence Docker Cloud est la référence pour comprendre stack, et elle est utile, mais ce n'est pas la source qui fait autorité sur stack vs compose -- il s'agit plutôt d'un guide spécifique au service hébergé de Docker : "Docker Cloud fournit un service de registre hébergé avec des facilités de construction et de test." Pour la documentation sur les fichiers, voir le Format du fichier de composition version 3 -- Bien qu'il soit nommé "Compose", c'est l'endroit qui fait autorité pour savoir quelles fonctionnalités fonctionnent à la fois avec compose et swarm/stack, et comment.

Vous pouvez spécifier un groupe de conteneurs Docker à configurer et à déployer de deux manières :

  1. Docker compose ( docker-compose up )
  2. Essaim de Docker ( docker swarm init; docker stack deploy --compose-file docker-stack.yml mystack )

Les deux prennent un fichier YAML écrit dans le fichier Docker Format du fichier de composition version 3 . Cette référence est la principale source documentant la configuration de docker-compose et de docker swarm/stack.

Cependant, il existe des différences spécifiques entre ce que vous pouvez faire dans les deux fichiers yml -- des options spécifiques, et des conventions de nommage spécifiques :

Options

Les options de configuration de service disponibles sont documentées sur le site Web de la Commission européenne. Composer la référence du fichier généralement avec une note au bas de l'entrée d'une option décrivant celle-ci comme ignorée soit par docker stack deploy ou par docker-compose up .

Par exemple, les options suivantes sont ignorée lors du déploiement d'une pile en mode essaimage avec un fichier Compose (version 3) :

build, cap_add, cap_drop, cgroup_parent, container_name, depends_on, devices, external_links, links, network_mode, restart, security_opt, stop_signal, sysctls, tmpfs (version 3-3.5), userns_mode

...alors que certaines options sont ignorées par docker-compose tout en travaillant avec docker stack deploy comme :

déployer, politique de redémarrage

Lorsqu'il est exécuté à partir de la ligne de commande, docker stack deploy affichera des avertissements sur les options qu'il ignore :

Ignorer les options non prises en charge : liens

Nommage des fichiers

  • Pour docker-compose up le nom de fichier par défaut est docker-compose.yml si aucun nom de fichier alternatif n'est spécifié en utilisant -f (voir le composer la référence ). Il est courant d'utiliser ce nom par défaut et d'exécuter la commande sans argument.

  • Pour docker stack deploy il n'y a pas de fichier par défaut donné dans le référence de déploiement de la pile docker . Vous pouvez utiliser le nom que vous voulez, mais voici trois conventions :

    1. utiliser docker-stack.yml tel qu'il est utilisé dans le manuel officiel Docker for Beginners Ch.3 : Déploiement d'une application dans un essaim .
    2. utiliser docker-cloud.yml tel qu'utilisé dans le Référence YML pour Docker Cloud Stack pour le service Docker Cloud.
    3. utiliser docker-compose.yml -- l'ancien nom par défaut du format de fichier Compose.

3 votes

Belle vue d'ensemble :- ). Je trouve un peu ennuyeux que la documentation de référence du fichier Compose comporte des entrées qui ne fonctionnent pas avec (Docker- ) Compose :- P

1 votes

@KajMagnus Je suis d'accord, il devrait y avoir un filtre pour voir uniquement les options disponibles dans les deux scénarios.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X