Article original : How to Standardize Your Development Environment with devcontainer.json
Par Hrittik Roy
Les flux de travail modernes de développement logiciel sont complexes, impliquant de nombreux outils et dépendances.
Lorsqu'on travaille en équipe, il n'est pas rare d'utiliser plusieurs programmes différents, chacun avec ses propres dépendances. Cela peut rapidement devenir confus, chaque logiciel nécessitant des configurations et une gestion différentes.
Une solution consiste à utiliser des environnements virtuels pour isoler les dépendances. Cela peut encore nécessiter d'installer et de gérer l'installation et la configuration.
Mais il existe une autre option meilleure : tout empaqueter – y compris la base de données et la version du langage de codage – dans un seul conteneur que vous pouvez utiliser chaque fois que vous en avez besoin. En fait, la plupart des entreprises déploient leur logique et leurs applications dans des conteneurs de production.
Pour le développement, vous pouvez utiliser un conteneur Docker comme environnement de développement complet. Il est similaire à votre environnement de production, mais avec tous les compilateurs, débogueurs, outils de construction, SDK, outils de productivité, et autres. Ce serait votre conteneur de développement ou dev container.
Ici, devcontainer.json intervient comme la norme qui rationalise et standardise votre environnement de développement. Il vous permet de vous concentrer sur la livraison des changements plutôt que de vous soucier des dépendances et des installations.
Dans ce tutoriel, vous apprendrez à propos de la norme devcontainer.json, son but, comment la configurer et comment l'adopter pour un usage personnel ou professionnel. Cela vous aidera à augmenter votre productivité en tant qu'ingénieur.
Qu'est-ce qu'un Dev Container ?
Les dev containers, également connus sous le nom de conteneurs de développement, fournissent un environnement de développement complet empaqueté dans un conteneur qui peut être facilement accessible via votre IDE préféré via Secured Shell (SSH). Cette configuration élimine tous les obstacles qui entravent votre flux de travail, allant des performances faibles à la faible bande passante.
Votre conteneur peut fonctionner sur diverses infrastructures, y compris des clouds privés et publics, des clusters ou des machines locales, et vous pouvez exploiter le matériel qui serait difficile à reproduire par vous-même.
L'aspect isolation garantit également que vos dépendances ne se chevauchent pas et ne perturbent pas votre environnement local. Toute la configuration du conteneur est stockée dans un fichier standard .devcontainer.json, de Microsoft, qui sert d'instructions d'empaquetage pour votre environnement.
Structure du Dev Container. De : containers.dev
Le fichier utilise un format de métadonnées JSON structuré avec commentaires (jsonc) que vous pouvez adapter à vos besoins spécifiques. Par exemple, vous pouvez ajouter des outils de développement comme git, un débogueur, et d'autres configurations comme diverses extensions.
Où pouvez-vous l'utiliser ?
La configuration la plus simple peut être de créer un environnement de conteneur de base avec un langage pour expérimenter différentes fonctionnalités. Par exemple, si vous souhaitez tester une nouvelle édition d'un langage de programmation, vous pouvez utiliser l'image de base de ce langage particulier et générer un nouvel environnement de développement avec facilité.
Il existe également quelques cas d'utilisation pour des configurations compliquées. Par exemple, l'une des tâches les plus difficiles est souvent de créer et de configurer une base de données pour qu'elle fonctionne de manière transparente avec votre projet tout en configurant votre environnement de développement.
En créant un fichier Docker compose, vous pouvez facilement configurer la création de la base de données et exposer des variables d'environnement pour créer un environnement autonome. Ces configurations multi-conteneurs orchestrés (avec à la fois la base de données et le langage de programmation) sont installées dans une relation parent-enfant et peuvent servir des cas d'utilisation complexes.
Regardez la configuration ci-dessous comme exemple qui utilise Compose pour connecter l'espace de construction :
{
"name": "Python 3 & PostgreSQL",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}"
}
Dans cet exemple, votre Dev Container utilise un fichier Docker Compose et référence les instructions pour construire un espace de travail intégré Python et PostgreSQL. La structure peut aider à développer des applications CRUD sans essayer de configurer votre base de données et votre configuration système pour la supporter sur chaque développeur.
Les problèmes que les Dev Containers résolvent
Maintenant, avec des fonctionnalités comme celles-ci, les dev containers gagnent en popularité dans les contextes personnels et professionnels car ils offrent la reproductibilité et l'isolation. Examinons tous les avantages :
Résolution des problèmes de configuration de l'installation
Maintenir et gérer des environnements locaux peut être beaucoup de travail. Cela implique souvent l'utilisation de divers outils et configurations, rendant le processus fastidieux. Avoir quelque chose qui standardise ce processus peut faire gagner beaucoup de temps.
Standardisation des instructions de construction du projet
Écrire de la documentation pour les mises à jour et les changements de dépendances peut être difficile. Une meilleure approche serait d'utiliser du code pour simplifier le processus, permettant à chacun de livrer sans être ralentis par la documentation ou "ça marche sur ma machine".
Assurer l'isolation des environnements de développement
Un développeur logiciel peut travailler simultanément sur différents projets avec de nombreuses parties mobiles. Et si vous pouvez isoler les environnements, empêchant les conflits avec d'autres logiciels sur le système hôte et fournissant un environnement propre et contrôlé pour le développement ? C'est maintenant possible :)
Permettre la cohérence entre les équipes de développement
Atteindre la portabilité entre plusieurs équipes et individus est compliqué avec des technologies et configurations variées. Un environnement de développement standardisé peut garantir que tous les membres de l'équipe ont une configuration uniforme tout en réduisant les incohérences causées par les variations individuelles des machines.
Simplifier les processus d'intégration et de formation
Apprendre de nouvelles choses est important, mais peut être difficile. Alors, quelle meilleure façon d'apprendre qu'en pratiquant un nouveau langage ou framework ? Lancer des environnements rapidement en isolation peut aider à garder les machines propres.
Cela est particulièrement vrai lors de la présentation de conférences ou de l'exécution d'ateliers. En commençant avec une ardoise propre, tout le monde peut suivre sans être ralenti par des outils manquants ou une confusion à mi-parcours.
Comment créer votre premier Devcontainer
Maintenant que vous connaissez tous les avantages, je vais vous aider à créer votre premier conteneur de développement. Comme il s'agit d'un tutoriel d'introduction, vous apprendrez à le faire pour un environnement Go de base.
Une fois que vous aurez compris les bases, vous pourrez étendre votre configuration pour inclure des configurations plus complexes impliquant des bases de données, des outils de développement supplémentaires et des personnalisations. Commençons par en créer un !
Prérequis
Voici les prérequis pour créer le modèle :
- Outils pour exécuter Dev Container : Docker ou tout autre moteur de conteneur
- Outils pour créer des modèles et se connecter à Dev Container : Visual Studio Code
- Outils pour gérer la connexion et la logique de création : Extension Visual Studio Code Dev Containers
Note : Après avoir créé le modèle, vous pouvez passer à votre IDE préféré avec différents backends, comme nous le verrons dans les sections à venir. Considérez simplement le fichier .devcontainer.json comme une source de vérité pour l'environnement et qui peut être facilement partagé.
Comment construire un simple dev container
Vous pouvez soit créer le dev container à partir de zéro, soit utiliser l'utilitaire VSCode. Commencer avec l'utilitaire est simple. Pour configurer votre dev container, utilisez simplement l'option Dev Containers: Add Dev Container Configuration Files… depuis la Palette de Commandes (Ctrl+Shift+P) :
Configuration d'exemple pour les Dev Containers depuis la Palette de Commandes VSCode
Maintenant, passons à l'étape suivante, qui consiste à sélectionner l'image de base. Vous pouvez choisir n'importe quelle image de base que vous souhaitez. Dans ce cas, nous utilisons l'image de base Go.
Configuration de base du Dev Container
Cependant, il peut y avoir de nombreuses versions de Go – donc l'étape suivante consiste à choisir celle que vous voulez. La dernière version disponible est 1.21, donc je recommande d'utiliser celle-ci. Mais si vous préférez, vous pouvez également construire une image à partir de zéro ou même sélectionner parmi des versions plus anciennes.
Faites simplement défiler et choisissez.
Version du fichier de configuration de base sélectionné
L'étape suivante consiste à importer des "Fonctionnalités", qui sont des unités autonomes de code d'installation qui aident à induire des outils ou des conteneurs spécifiques dans votre configuration de dev container. Ces fonctionnalités peuvent aller de nouveaux outils à des personnalisations spécifiques que vous pouvez découvrir ici.
Mais pour un environnement Go simple et basique, nous allons sauter cette étape.
Fonctionnalités complémentaires qui peuvent booster votre espace de travail
Cliquez sur Ok pour générer un fichier .devcontainer.json Go basique dans le répertoire .devcontainer :
~/Code/devcontainer-new main +4 !4 \u276f tree -a
.
\u251c\u2500\u2500 .devcontainer
\u2502 \u2514\u2500\u2500 devcontainer.json
Félicitations ! Vous avez maintenant un environnement qui est isolé et peut être partagé avec n'importe qui.
Comment utiliser VSCode pour la configuration du dev container
Pour exécuter cette configuration, vous pouvez cliquer sur Reopen in Container comme méthode la plus simple comme vu ci-dessous :
Un exemple de fichier Dev Container avec Go 1.21
L'extension va récupérer l'image "mcr.microsoft.com/devcontainers/go:1-1.21-bullseye" puis créer un serveur SSH dedans.
Démarrage du Dev Container
Après avoir construit avec succès la version Go, vous pouvez vous connecter en toute confiance à l'environnement et exécuter vos opérations. Vous verrez que la version Go est la même que celle que vous avez construite et que la connexion provient de votre Dev Container, ce qui rend la connexion réussie :
Dev Container en cours d'exécution localement
Dev Container CLI
Devcontainers CLI est une interface de ligne de commande qui vous aide à exécuter, construire et lancer le conteneur à partir de votre configuration devcontainer.
Avec l'aide de cet outil, vous pouvez configurer un environnement sans utiliser VSCode et vous y connecter manuellement via SSH, vous offrant plus de liberté.
Bien que l'outil soit intéressant, de nombreuses fonctionnalités n'ont pas encore été lancées comme listé ici :
Feature Roadmap
Comment utiliser les Dev Containers à leur plein potentiel
Une fois que vous distribuez le devcontainer.json à vos coéquipiers, ils peuvent facilement l'utiliser pour lancer des environnements locaux avec les avantages discutés. Mais que faire si vous devez les aider à lancer l'environnement sur le Cloud pour exploiter son matériel puissant ?
Il existe quelques options qui peuvent vous aider. La première est GitHub Codespaces, qui vous aide à lancer sur une infrastructure gérée par GitHub sur Azure.
Mais il peut y avoir une exigence d'utiliser du matériel dédié depuis votre cluster Kubernetes, ou un cloud privé ou public. Comment faire ? Vous pouvez utiliser des outils open source côté client comme DevPod, qui vous aide à déployer sur l'infrastructure souhaitée.
Interface utilisateur de DevPod
Actuellement, l'outil a plus de [4.4k étoiles](https://www.freecodecamp.org/news/p/43b21e57-00ca-4850-9a0f-95ebce575227/(%E2%80%8B%E2%80%8Bhttps://github.com/loft-sh/devpod) et se développe rapidement avec plus d'adhésions chaque jour avec une devise de _Donner le pouvoir à l'utilisateur. N'importe quelle infra, n'importe quel IDE, et sans opinion_ :
Historique de croissance GitHub - DevPod
L'outil est sans opinion, ce qui signifie que vous pouvez l'utiliser de manière transparente sur diverses infrastructures, IDE et langages de programmation.
Par exemple, si vous voulez un backend spécifique sur un fournisseur de cloud, vous pouvez le faire avec des fournisseurs déjà disponibles, ou vous pouvez créer le vôtre comme les 7 fournisseurs communautaires :
Fournisseurs DevPod
L'outil permet également un environnement de développement cohérent qui peut être utilisé de manière répétée où vous le souhaitez et connecté à n'importe quel éditeur de code/IDE allant de JetBrains, Jupyter, ou VSCode.
Comment lancer votre environnement de développement en utilisant DevPod
Cet outil offre à la fois une version desktop et CLI, vous pouvez donc utiliser celle qui vous convient le mieux. Lorsque vous utilisez DevPod Desktop pour créer un environnement, le processus est le suivant :
Étape 1 : Installez DevPod à partir des instructions officielles.
Étape 2 : Ajoutez un fournisseur via 'Providers' > '+ Add'. Sélectionnez un fournisseur et cliquez sur 'Continue'.
Fournisseur AWS DevPod
Étape 3 : Enter Workspace Source avec votre chemin devcontainer.json qui peut être un dépôt distant ou local ou l'exemple :
Sélection de l'IDE et du fournisseur
Étape 4 : Sélectionnez votre IDE par défaut et cliquez sur Create Workspace :
Créer un espace de travail
Maintenant, vous pouvez construire et configurer votre application sur votre instance en cours d'exécution :
Dev Container en cours d'exécution sur votre machine locale
Félicitations ! Vous avez configuré avec succès votre premier Dev Container \ud83c\udf89
Si vous vous sentez aventureux et souhaitez explorer la CLI, vous pouvez en savoir plus sur son utilisation ici.
Réflexions finales
Les normes comme les dev containers vous aident à améliorer votre productivité et votre écosystème de développement global. Cela réduit les coûts pour les entreprises car le matériel le plus récent peut être provisionné sans nécessiter que toute l'équipe mette à niveau leurs machines locales tous les deux ans.
Cela vous aide également à intégrer sans effort de nouveaux membres d'équipe et à maintenir une expérience utilisateur cohérente.
Les outils de conteneurs de développement comme DevPod peuvent améliorer la sécurité et la personnalisation pour répondre à divers besoins sur toute infrastructure que vous souhaitez tout en maintenant une expérience DevEx cohérente. Cela permet une construction et des tests plus rapides en utilisant le matériel le plus récent et remplace le temps d'intégration par du temps de codage.
Vous pouvez rejoindre le Slack de DevPod pour en savoir plus.