Comment utiliser l’application Docker pour conteneuriser une pile d’applications entière –
Docker App est une fonctionnalité expérimentale de Docker qui vous permet de créer et de publier des piles d’applications composées de plusieurs conteneurs. Il vise à vous permettre de partager des piles Docker Compose avec la même facilité d’utilisation que les conteneurs Docker classiques.
Sommaire
Pourquoi utiliser l’application Docker?
L’application Docker apporte l’expérience du conteneur Docker à des piles d’applications entières. De nombreux projets logiciels populaires ont désormais des images Docker officielles. Cependant, ils ne fonctionnent pas nécessairement tels quels: WordPress, par exemple, a besoin d’une connexion à une base de données pour fonctionner.
La conteneurisation préconise la séparation de chaque service d’une pile d’applications dans son propre conteneur. Une installation WordPress dockerisée doit être constituée d’un conteneur WordPress exécutant un serveur Web, PHP et WordPress, et un conteneur de base de données MySQL dédié.
En cours docker run -d -p 80:80 wordpress:latest
n’est pas suffisant pour que cela soit opérationnel. Vous aurez WordPress en direct mais pas de connexion à la base de données. Vous pouvez utiliser Docker Compose pour configurer une pile avec un conteneur WordPress et un conteneur MySQL. Il vous incombe de créer et de maintenir le fichier de composition, même si chaque utilisateur devra faire quelque chose de similaire.
L’application Docker tente de résoudre ce problème. Il vous permet de créer et d’exécuter des «packages d’application» de plusieurs conteneurs. Ceux-ci peuvent être envoyés aux registres Docker de la même manière que les conteneurs individuels. Les autres utilisateurs peuvent ensuite extraire et exécuter votre pile d’applications sans avoir à écrire leur propre fichier Docker Compose.
En interne, l’application Docker implémente la spécification CNAB (Cloud Native Application Bundle). Il s’agit d’un effort intersectoriel visant à simplifier la définition, le partage et l’installation d’applications natives cloud multi-conteneurs. Il inclut la prise en charge des ressources périphériques telles que les volumes et les réseaux.
Les clients CNAB comme l’application Docker créent des bundles d’applications CNAB qui peuvent être publiés dans les registres de prise en charge. Un bundle CNAB est une abstraction qui encapsule plusieurs conteneurs mais qui est traitée de la même manière qu’un conteneur unique lorsqu’elle est poussée vers un registre.
L’application Docker est actuellement expérimentale. Il est inclus avec la CLI Docker depuis la version 19.03 mais peut changer ou être supprimé à l’avenir. Le projet a changé de direction dans le passé et son état actuel de développement est incertain. Néanmoins, la version incluse avec Docker aujourd’hui peut déjà être utilisée pour distribuer des piles d’applications multi-conteneurs.
Créer une pile d’applications Docker
Vous pouvez utiliser la CLI Docker pour initialiser une nouvelle pile d’applications.
docker app init --single-file example-app
Cela créera un nouveau fichier appelé example-app.dockerapp
dans votre répertoire de travail. le --single-file
L’argument demandait à l’application Docker de fusionner tous les fichiers du projet en un seul example-app.dockerapp
déposer. Sans cet argument, vous verriez trois fichiers distincts: docker-compose.yml
, metadata.yml
et parameters.yml
.
Chaque fichier constituant est représenté dans le fichier unique fusionné en tant que section YAML. Nous utilisons un seul fichier pour clarifier les extraits de code de cet article; si vous prévoyez une pile d’applications complexe, l’utilisation de plusieurs fichiers facilitera la maintenabilité.
Voici ce que font chacune des trois sections:
docker-compose.yml
– Il s’agit d’un fichier Docker Compose standard définissant les conteneurs qui composent votre application.metadata.yml
– Cela définit les métadonnées de base de votre application, telles que son nom, sa version et sa description. Vous l’utilisez pour décrire l’ensemble de votre pile d’applications, plutôt qu’un seul conteneur.parameters.yml
– Cela configure les paramètres par défaut pour les variables utilisées dans votre fichier Docker Compose. Les paramètres sont définis comme de simples paires clé-valeur. Votre pile utilisera ces paramètres par défaut à moins que l’utilisateur ne les remplace par des valeurs personnalisées.
La seule configuration supplémentaire nécessaire au-delà d’un fichier Docker Compose standard est la section des métadonnées. Si vous disposez déjà d’un fichier Docker Compose, vous pouvez utiliser docker app init
avec le --compose-file
drapeau pour l’importer:
docker app init --compose-file docker-compose.yml example-app
Mettez à jour la section du manifeste avec le nom, la version et la description de votre application. Vous pouvez ensuite procéder à l’exécution et à la publication de votre application!
Si vous n’avez pas de fichier Docker Compose prêt, ajoutez maintenant des définitions de conteneur à la section Compose de la configuration.
# Application services - equivalent to docker-compose.yml. --- services: apache: image: httpd:latest ports: - ${apache_port}:80 mysql: image: mysql:latest ports: - ${mysql_port}:3306 environment: - MYSQL_ROOT_PASSWORD=${mysql_root_password} --- # Default application parameters - equivalent to parameters.yml. apache_port: 80 mysql_port: 3306 mysql_root_password: mysql
Cette pile simple crée des conteneurs Apache et MySQL. Chaque conteneur doit être configuré avec le port hôte auquel se connecter. Le conteneur MySQL a également besoin d’une valeur pour le MYSQL_ROOT_PASSWORD
variable. Ceci est utilisé par MySQL lors de la première exécution pour définir le mot de passe de la première root
utilisateur.
Les valeurs par défaut de ces variables sont fournies dans le parameters
section du fichier de l’application Docker. Ces valeurs seront utilisées à moins que vous ne les remplaciez lors de la rotation de votre pile d’applications.
Création d’images d’application
L’étape suivante consiste à créer votre pile d’applications Docker dans un ensemble compatible CNAB.
docker app build . -f example-app.dockerapp -t example-user/example-app:latest
Cette commande fonctionne de la même manière que docker build
. Cela créera un ensemble d’applications étiqueté comme example-user/example-app:latest
. Vous pouvez maintenant pousser ce bundle vers Docker Hub!
docker app push example-user/example-app:latest
Vous avez publié avec succès votre première pile d’applications multi-conteneurs, sans avoir à partager manuellement un fichier Docker Compose.
Images d’application en cours d’exécution
La dernière pièce est d’exécuter une instance de votre pile:
docker app run example-user/example-app:latest --name my-app
L’application Docker démarrera de nouveaux conteneurs en fonction de la définition de votre bundle d’applications. Le bundle d’applications lui-même sera extrait de Docker Hub s’il n’existe pas déjà sur votre machine.
Si votre fichier Compose comprenait des ressources telles que des volumes et des réseaux, ils seront créés et liés aux conteneurs. L’ensemble de l’opération s’apparente à l’utilisation docker-compose up
sans avoir à télécharger le docker-compose.yml
fichier en premier.
L’application sera lancée avec les variables par défaut définies dans son parameters.yml
déposer. Vous pouvez remplacer toutes les variables dont vous avez besoin avec le --set
drapeau:
docker app run example-user/example-app:latest --name my-app --set mysql_root_password=mysql
Vous pouvez modifier les variables d’une application en cours d’exécution à l’aide de docker app update
:
docker app update my-app --set my_variable=new_value
Une fois qu’une application est en cours d’exécution, vous pouvez utiliser docker app ls
pour inspecter ses détails. Utiliser docker app rm my-app
pour détruire une application spécifique par son nom. Cela supprimera toutes les ressources associées à l’application.
Conclusion
L’application Docker est une approche prometteuse pour définir, partager et exécuter des piles d’applications multi-conteneurs avec la CLI Docker. Le projet met en œuvre la spécification Cloud Native Application Bundle tout en fournissant une interface abstraite conviviale aux utilisateurs.
L’adoption de l’application Docker restera probablement faible jusqu’à ce que son statut dans l’écosystème Docker soit confirmé. Si elle sort de son poste expérimental, Docker App devrait combler le vide entre les registres à conteneur unique et les solutions de déploiement cloud natives complexes telles que Helm.