Comment lancer des conteneurs avec Docker Compose

Comment lancer des conteneurs avec Docker Compose

Cet article va présenter Docker Compose et montrer comment le mettre au travail pour vos besoins. Nous l'installerons, rédigerons un fichier de composition simple et lancera le conteneur.

Nous verrons alors comment lancer plusieurs conteneurs. Ensuite, nous verrons comment construire des images et ces derniers temps comment utiliser plusieurs fichiers de composition pour lancer des conteneurs dans différents environnements, comme le développement et la production, par exemple.

Dans ce tutoriel, vous apprendrez:

  • Comment installer docker compose
  • Comment rédiger un fichier de composition simple
  • Comment exécuter les commandes Docker-Compose pour démarrer et arrêter les conteneurs
  • Comment lancer plusieurs conteneurs
  • Comment construire des images avec Docker Compose
  • Comment remplacer à l'aide de plusieurs fichiers Docker Compose
Phpmyadmin.

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Ubuntu 18.04
Logiciel Docker
Autre Accès privilégié à votre système Linux en tant que racine ou via le Sudo commande.
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Introduction



Nous avons jusqu'à présent vu comment Docker est idéal pour gérer les images et démarrer des conteneurs. Mais les applications exigent fréquemment que différents conteneurs sont en place et communiquent entre eux. Les connecter via le réseau, les faire partager des volumes de disque et la transmission des variables d'environnement peut facilement se transformer en une séquence de commandes difficiles à documenter et à maintenir au fil du temps. Il entre dans Docker Compose. Commençons à l'installer, puis écrivons le fichier de compose.

Installation de Docker Compose

Dans Ubuntu 18.04 L'installation du compositeur Docker est simple:

# apt installer docker-compose 

Pour le tester est installé, vous pouvez vérifier sa version:

$ docker-compose -v docker-compose version 1.17.1, construire inconnu 

Les versions Docker Engine et Docker Compose sont importantes car leurs versions sont fréquentes et les fonctionnalités sont ajoutées et supprimées. La version indiquée ci-dessus (1.17.1) a été publié en novembre 2017. Si vous avez besoin d'une version plus récente, vous pouvez soit activer le référentiel d'univers d'Ubuntu et obtenir un package plus récent, ou même télécharger et installer la dernière version directement à partir du site Web Docker Compose:

# curl -l "https: // github.com / docker / compose / releases / download / 1.23.2 / docker-compose - $ (uname -s) - $ (uname -m) "-o / usr / local / bin / docker-compose # sudo chmod + x / usr / local / bin / docker-compose 


Le fichier docker compose

Docker Compose lit un fichier yaml, qui est généralement nommé composer docker.YML.

Version: Services "3": Apache: Image: PHP: 7.3-APACHE Container_name: Ports "Apache": - "80:80" Volumes: - ./ www: / var / www / html 
Copie

Au début, la version de syntaxe est informée comme 3. Ensuite, dans la section Services, un seul conteneur est spécifié (Apache) et les balises image, contenant_name, ports, et volumes sont utilisés pour décrire comment il doit être exécuté.

Créez maintenant un répertoire nommé www Et laissez tomber ça indice.html dossier à l'intérieur.

  Bonjour   

Ensuite, pour tester PHP fonctionne, déposez ce fichier à l'intérieur www.

 


Commandes de compose docker

Le en haut La commande s'occupera de tout: téléchargez les images de Docker Hub si elles n'existent pas encore dans le cache local, créez des images personnalisées (ce qui n'est pas le cas; nous couvrirons cette section suivante) et démarrerons les conteneurs.

$ docker-compose up -d 

Le -d Switch Instrute Docker Composer pour exécuter des conteneurs en arrière-plan. Dans le cas où un autre nom de fichier est utilisé, au lieu de composer docker.YML, il peut être informé de -F.

Notez que la commande de lancement est beaucoup plus simple que docker Exécuter un homologue. Il présente deux autres avantages: il ne change pas quel que soit le contenu du fichier de composition, et si le fichier Compose spécifie plus d'un conteneur, tous seront démarrés. Juste à titre de comparaison, la commande Docker Run serait:

$ docker run -d --name = 'apache-alone' -p 80:80 -v $ pwd / www: / var / www / html php: 7.3-APACH 

Parce que la syntaxe du fichier composé est YAML, l'indentation est importante. Si vous obtenez des erreurs de syntaxe, vérifiez la syntaxe YAML avec un analyseur en ligne, comme celui-ci.

Vous pouvez vérifier que le conteneur fonctionne.

$ docker PS Container ID Commande d'image Créé les noms de ports d'état 3937D997E029 PHP: 7.3-apache "docker-php-entrypoi ..." il y a 8 minutes en haut de 8 minutes 0.0.0.0: 80-> 80 / TCP Apache 

Accès maintenant http: // localhost dans votre navigateur préféré et ensuite http: // localhost / phpinfo.php.



Lancement de plusieurs conteneurs

Voyons maintenant un fichier composé plus complexe. Imaginons que nous allons configurer un environnement local pour développer une application de lampe. Nous avons besoin d'un conteneur avec Apache et PHP, un autre conteneur avec MySQL, et peut-être un conteneur PHPMyAdmin pour interagir avec MySQL. Le composer docker.YML sera:

Version: Services "3": Apache: Image: PHP: 7.3-APACHE Container_name: "Apache" Redémarrer: "Always" Ports: - "80:80" - "443: 443" Volumes: - ./ www: / var / www / html - ./ php / php.ini: / usr / local / etc / php / php.ini - ./ sites-compatible: / etc / apache2 / sites-compatible - apache-logs: / var / log / apache2 mysql: image: mariaDB: 10.4 Container_name: 'MySQL' Redémarrer: 'Always' Volumes: - MySql-data: / var / lib / mysql Environnement: mysql_root_password: SomePassword MySQL_DATABASE: DB_SITE.8 CONTERNER_NAME: 'PHPMYADMIN' Environnement: PMA_HOST: MySQL PMA_PORT: 3306 PORTS: - '8080: 80' Volumes: apache-logs: mysql-data: 
Copie

Ce fichier de composition lance trois conteneurs, chacun a une section sous services. Remarquez que nous définissons certaines variables d'environnement sous environnement. Le redémarrer: toujours La définition demande à Docker de démarrer automatiquement les conteneurs lorsque le service Docker est démarré (en cas de redémarrage, par exemple).

La commande pour démarrer les trois conteneurs est la même que dans l'exemple simple précédent. Facile à retenir, à droite?

$ docker-compose up -d 

Vérifier que les conteneurs sont créés.



$ docker ps Container ID Commande d'image Créé les noms de ports d'état F76ECE3508FE PHPMYADMIN / PHPMYADMIN: 4.8 "/ courir.Sh SuperVisord… "Il y a 20 secondes en haut de 4 secondes 9000 / TCP, 0.0.0.0: 8080-> 80 / TCP PHPMYADMIN 69B1B5054F3D MARIADB: 10.4 "Docker-Entrypoint.S… "Il y a 20 secondes en haut de 6 secondes 3306 / TCP MySQL 6747D7580DAC PHP: 7.3-apache "docker-php-entrypoi…" il y a 2 jours en haut de 14 secondes 0.0.0.0: 80-> 80 / TCP, 0.0.0.0: 443-> 443 / TCP Apache 
Copie

Il est intéressant de remarquer que les conteneurs peuvent communiquer via leurs noms et accéder à les ports les uns des autres sans avoir besoin d'exposer leurs ports à l'hôte. Par exemple, nous n'avons pas exposé le port 3306 du service MySQL (comme on peut le voir dans la sortie ci-dessus), mais PhpMyAdmin est capable d'accéder à ce port. Pour accéder à phpmyadmin, allez à http: // localhost: 8080 et connectez-vous avec l'utilisateur et le mot de passe défini dans le service MySQL (utilisateur / mot de passe).

Construire des images avec Docker Compose

Si vous devez créer une image, au lieu d'utiliser une construire étiqueter. Dans l'exemple ci-dessous, nous disons à Docker Composer pour examiner le répertoire actuel d'un Dockerfile. La balise d'image sera utilisée pour nommer la nouvelle image.

Version: Services "3": apache: build: . Image: My-Image-Name Container_name: 'Apache' Restart: 'Always' Ports: - "80:80" 
Copie

Remplacer à l'aide de plusieurs fichiers docker compose

Docker Compose facilite la personnalisation du lancement de conteneurs pour différents environnements. Vous avez juste besoin de créer les fichiers de remplacement appelés et de lancer les conteneurs les spécifiant. Ils écraseront les définitions précédentes faites dans le fichier de base de base.

Par exemple, créons un fichier de remplacement nommé docker-compose-prod.YML et définir un mot de passe différent pour mysql.

Version: Services "3": mysql: environnement: mysql_root_password: somepassword_other mysql_database: db_site_other mysql_user: user_other mysql_password: password_other 
Copie

Vous pouvez utiliser un autre hôte pour démarrer les conteneurs. Si vous utilisez le même hôte, il est nécessaire de supprimer le conteneur MySQL et son volume associé. Sinon, le conteneur existant avec les anciennes références sera utilisé.

$ docker stop mysql $ docker rm mysql $ docker volume ls $ docker volume rm Directory_mysql-data 

Et puis vous pouvez exécuter la commande ci-dessous. Il est important de garder l'ordre des fichiers. Plusieurs fichiers peuvent être utilisés. Dans notre exemple, seul le environnement section de mysql Le service sera remplacé.

$ docker-compose -f docker-compose.yml -f docker-compose-prod.yml up -d 

Une fois la vérification des conteneurs en cours d'exécution, essayez d'accéder à PhpMyAdmin en utilisant les nouvelles informations d'identification.

Conclusion

Cet article a introduit Docker Compose, un outil pratique pour orchestrer le lancement de plusieurs conteneurs dans le même hôte. Il existe de nombreuses possibilités et la lecture du manuel Docker Compose est fortement recommandée. Dans les prochains articles, nous allons explorer des moyens d'orchestrer les conteneurs Docker parmi plusieurs hôtes.

Plus dans cette série d'articles Docker

  • Une introduction pratique aux conteneurs Docker
  • Comment interagir avec les conteneurs Docker
  • Comment personnaliser les images Docker avec Dockerfiles

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Comment créer une pile de lampe basée sur Docker à l'aide de Docker sur…
  • Masterring Bash Script Loops
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Choses à installer sur Ubuntu 22.04
  • Comment installer Debian sur un conteneur Luks existant
  • Comment installer et configurer des CMS fantômes sur Ubuntu
  • Tutoriel de débogage GDB pour les débutants