Docker Compose est un outil qui s'intègre nativement à Docker et facilite la gestion des applications multi-conteneurs.
Les avantages offerts par Docker Compose sont nombreux, dont certains incluent :
- Gérez facilement les réseaux de conteneurs : Connecter deux conteneurs via un réseau Docker est très simple dans Docker Compose, étant aussi simple que de définir un réseau et de dire aux conteneurs de s'y connecter. De plus, Docker Compose peut automatiquement créer et détruire des réseaux lorsque vous créez et détruisez les conteneurs eux-mêmes.
- Dépendances du conteneur : Vous avez un conteneur Docker qui a besoin d'un autre conteneur Docker pour être opérationnel, par exemple une base de données. Docker Compose vous permet de définir des dépendances pour un conteneur, en exigeant que les dépendances soient opérationnelles avant que quoi que ce soit d'autre ne démarre.
- Configurations reproductibles : Étant donné que la configuration du conteneur sera définie avant même que quoi que ce soit ne soit créé, cela permet la reproductibilité des configurations, ce qui facilite leur transfert vers d'autres systèmes. Bien que vous puissiez théoriquement le faire dans quelque chose comme Bash, cela peut rendre les choses moins flexibles et plus difficiles à adapter au changement.
Installation de Docker Compose sur Linux
Docker Compose est facilement disponible dans la plupart des référentiels de distributions.
Vous pouvez installer Docker Compose sur les distributions basées sur Ubuntu et Debian à l'aide de la commande suivante :
sudo apt install docker-compose
Sur Arch et Manjaro, vous pouvez utiliser :
sudo pacman -S docker-compose
Sur Fedora, vous pouvez utiliser la commande dnf :
sudo dnf install docker-compose
Vous devrez peut-être faire un peu plus d'efforts pour installer Docker Compose sur CentOS.
Pour toutes les autres distributions, vous pouvez toujours consulter les documents d'installation pour obtenir des informations sur l'obtention des packages nécessaires.
Création de notre premier fichier Docker Compose
Ce guide suppose que vous êtes déjà familiarisé et à l'aise avec l'outil Docker CLI. Si ce n'est pas le cas, envisagez de le faire, car vous rencontrerez probablement un tas de hoquets simples autrement.
Les fichiers Docker Compose sont stockés sous le nom docker-compose.yml
, et sont automatiquement trouvés lorsque vous exécutez docker-compose
commandes dans le même répertoire. Sa syntaxe prend la forme, vous l'aurez deviné, de YAML.
Nous avons un didacticiel dédié sur les bases de YAML si vous souhaitez en savoir plus.
Les bases de YAML que tout ingénieur DevOps doit connaîtreEn tant qu'ingénieur DevOps, vous traiterez beaucoup de fichiers YAML. C'est toujours une bonne idée de comprendre la syntaxe de base de YAML. Manuel LinuxRakesh JainNous allons commencer avec un fichier qui crée une instance Nextcloud, puis passer en revue comment il a réellement fait ce qu'il a fait.
Tout d'abord, vous devez créer le fichier de composition. Créez un répertoire vide sur votre système et créez le docker-compose.yml
fichier.
Ensuite, remplissez le fichier avec le contenu suivant :
version: '3.5'
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
networks:
nextcloud:
name: nextcloud_docker_network
Maintenant, tout ce que vous avez à exécuter est docker-compose up -d
, et vous auriez déployé avec succès Nextcloud avec Docker.
Voici la page de connexion de Nextcloud.
Comprendre notre fichier Docker Compose
Maintenant que vous avez vu que le fichier fonctionne réellement, passons en revue le contenu du fichier afin que vous puissiez réellement comprendre ce qu'il fait exactement.
La balise 'version'
version: '3.5'
Tout d'abord, la version
étiqueter. Il s'agit simplement de spécifier la version du format de fichier Docker Compose, car différentes versions auront une syntaxe différente. Vous souhaitez généralement conserver la dernière version, mais ce n'est pas obligatoire, ce qui peut être utile si vous avez des fichiers hérités.
La balise 'services'
services:
nextcloud_app:
container_name: nextcloud_app
image: nextcloud
restart: unless-stopped
networks:
- nextcloud
ports:
- 80:80
volumes:
- ./data/app:/var/www/html
depends_on:
- nextcloud_mariadb
nextcloud_mariadb:
container_name: nextcloud_mariadb
image: mariadb
restart: unless-stopped
networks:
- nextcloud
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: 'mariadb'
Ensuite, vous voyez les services
étiqueter. Cela démarre la liste de toutes les applications créées lorsque docker-compose up -d
est exécuté.
Ensuite, nous commençons la liste de notre premier conteneur, nextcloud_app
. Cela sert d'identifiant pour l'application, qui peut être utilisé par d'autres commandes Docker Compose. Notez que cela n'est pas le nom du conteneur lui-même - qui est spécifié dans la partie suivante.
Maintenant, vous commencez à tout définir sur votre conteneur. Voici un aperçu de la signification de tous les champs, bien que la plupart devraient s'expliquer d'eux-mêmes si vous connaissez déjà Docker :
container_name
- Définit le nom du conteneur. Équivalent au--name
option.image
- Définit l'image à extraire pour le conteneur.restart
- Définit la politique de redémarrage du conteneur. Équivalent à--restart
.networks
- Définit un réseau auquel le conteneur se connecte. Ce réseau peut être créé ou peut déjà exister. Cette valeur sert d'identifiant pourdocker-compose
et n'est pas le nom réel du réseau (qui est défini dans lenetworks
section balise).ports
- Définit les ports hôtes auxquels le conteneur peut se connecter. Équivalent à--publish
.volumes
- Définit les volumes pour le conteneur. Équivalent à--volume
.environment
- Définit les variables d'environnement pour le conteneur. Équivalent à--env
. Cette option prend en charge deux types de syntaxe. La première estvariable: value
, c'est ce qui est utilisé ici. L'autre option, qui peut être plus familière si vous êtes habitué audocker
La syntaxe CLI est- variable=value
.depends_on
- Spécifie les dépendances du conteneur. Ceci est utilisé pour exiger qu'un conteneur ne démarre pas tant que ses dépendances ne l'ont pas été. Cela accepte les valeurs des listes de conteneurs. (Pascontainer_name
!)
La balise 'networks'
networks:
nextcloud:
name: nextcloud_docker_network
Vous accédez maintenant aux networks
étiqueter. Ceci est utilisé pour définir les réseaux que nous avons répertoriés sous networks
pour nos conteneurs.
À l'intérieur des networks
section, vous listez d'abord l'identifiant que vous avez donné au réseau sous services
. Ici, c'était nextcloud
.
Ensuite, vous définissez le nom du réseau qui peut être vu avec docker network ls
. Ici, nous l'avons nommé nextcloud_docker_network
.
Si vous vouliez que les conteneurs rejoignent un réseau qui existait déjà, vous utiliseriez la syntaxe suivante, en remplaçant network_name
avec le nom du réseau Docker :
networks:
nextcloud:
external: true
name: network_name
Et voilà. Cela résume tout le dossier !
Vous pouvez nommer le fichier yml n'importe quoi, mais vous devrez alors spécifier le nom du fichier lors de l'utilisation des commandes docker-compose. Garder la tradition et le nommer docker-compose.yml garde les commandes courtes.Fermeture
Vous connaissez maintenant les bases de l'utilisation de Docker Compose et les avantages que vous pouvez en tirer. Vous êtes également sur la bonne voie pour comprendre ce que font les gens lorsqu'ils distribuent leurs conteneurs via des fichiers Compose.
Quelque chose ne fonctionne pas ou vous avez des questions persistantes ? Vous êtes invités à les laisser dans la section des commentaires ci-dessous.