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 :
- Docker compose (
docker-compose up
)
- 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 :
- 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 .
- utiliser
docker-cloud.yml
tel qu'utilisé dans le Référence YML pour Docker Cloud Stack pour le service Docker Cloud.
- utiliser
docker-compose.yml
-- l'ancien nom par défaut du format de 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.