Docker pour Ruby on Rails dans un environnement de développement local
Mikhail Tereschenko
2 novembre 2022
0 minutes de lectureBonjour les développeurs Ruby ! Si vous cherchez une solution efficace pour configurer Docker pour Ruby on Rails dans votre environnement de développement local, cet article est fait pour vous. Il fait suite à notre précédent article sur l’installation de Ruby sur macOS pour le développement local.
Lorsqu’ils développent un projet Ruby on Rails, les développeurs Ruby doivent souvent prévoir une base de données, ainsi que d’autres prérequis pour l’environnement de développement. Cependant, installer tous ces éléments sur le système d’exploitation de votre machine hôte et utiliser exactement les versions requises peut parfois s’avérer difficile.
Chaque fois que j’essayais de créer un nouveau projet, je me disais qu’il me faudrait un bouton pour créer un environnement propre. J’ai donc décidé de créer une configuration basée sur Docker, que l’on peut facilement démarrer et arrêter à l’aide de docker-compose.yml de Docker.
Qu’est-ce que Docker Compose ?
Docker Compose est un outil d’infrastructure as code (IaC) qui vous permet de configurer et de connecter des applications et des services, tels que des proxys, des bases de données et des montages de volumes, afin de les mettre à disposition de manière réutilisable. Il est installé avec le pack logiciel Docker et sa configuration est définie en YAML.
Cette configuration Docker Compose pour un environnement de développement local peut être utilisée pour différents types de projets ; elle ne se limite pas à Ruby on Rails. Elle peut aussi servir pour des projets personnels ou des projets front-end côté client. Voici les principales raisons pour lesquelles je préfère utiliser des environnements Docker plutôt que de modifier le système d’exploitation de ma machine hôte :
facile à configurer
facile de séparer la logique de l’environnement
facile d’utiliser le même environnement pour différents projets
facile de partager l’environnement avec toute personne qui a besoin d’aide, sans exposer de code sensible
la machine hôte reste propre
Une configuration Docker pour Ruby on Rails
Pour configurer un environnement Docker pour Ruby on Rails destiné au développement local, vous aurez besoin des éléments suivants :
Un système d’exploitation de type Unix (j’utilise macOS, mais vous pouvez utiliser Ubuntu ou toute autre distribution Linux. Windows devrait également fonctionner)
make (version 3.81 ou ultérieure)
Docker (version 19.03.12 ou ultérieure)
docker-compose (version 1.26.0 ou ultérieure)
Votre éditeur de texte préféré (Visual Studio Code dans mon cas)
Une fois que vous avez tout cela, vous pouvez commencer. Si vous préférez passer directement à la pratique, voici le dépôt open source qui contient toutes les instructions nécessaires et le code source complet des extraits que nous allons examiner. Mais puisque vous êtes déjà ici, suivez cet article pour découvrir le processus étape par étape.
Pour commencer, je vais créer un projet Ruby on Rails nommé foo_bar_project, par souci de simplicité.
1) Récupérez la configuration de l’environnement Docker Compose et supprimez le dépôt Git. Si vous souhaitez suivre l’ensemble des modifications dans un dépôt de code source Git, vous pourrez créer le vôtre par la suite.
Les étapes suivantes doivent être exécutées dans le répertoire ./environment. Vérifiez donc que vous exécutez les commandes depuis ce répertoire :
2) Attribuez ensuite un nom de projet à cette configuration d’environnement. Par défaut, il s’agit de test_project. Dans notre exemple, nous devons le remplacer par foo_bar_project, comme indiqué précédemment. Pour cela, modifiez le fichier ./environment/.env.example afin de définir la variable PROJECT_NAME. Il est important d’utiliser le snake_case (mots séparés par des tirets bas) en minuscules pour les valeurs des variables :
3) Vous pouvez maintenant créer votre projet en exécutant la commande suivante :
Comme vous pouvez le constater, un nouveau dossier nommé application contient maintenant le code Ruby on Rails.
4) Vous devez maintenant créer votre environnement de développement local avec Docker Compose. Cette étape est obligatoire après toute modification du Dockerfile ou du Gemfile de votre application.
5) Vous pouvez maintenant démarrer l’environnement de développement Ruby local comme suit :
Notez que cette commande ne démarre pas encore une application Ruby on Rails. Pour cela, nous devons ouvrir un shell dans l’environnement Docker et lui demander de démarrer le processus rails. Voici comment procéder :
Environnement Docker pour Ruby on Rails destiné au développement localEnfin, ouvrez votre navigateur et rendez-vous à cette URL : http://foo_bar_project.localhost/. Vous devriez voir le projet Ruby on Rails que nous venons de créer.
Alors, qu’avons-nous à notre disposition ?
Notre projet contient un répertoire d’environnement qui regroupe tout le nécessaire à son exécution, ainsi qu’un répertoire d’application contenant le code de celle-ci. Ce répertoire est associé au conteneur Docker : vous y avez donc un accès complet depuis l’image Docker Ruby.
Nous avons rapidement accès au shell Ruby. Il n’est donc pas nécessaire d’installer localement un environnement Ruby, comme Rails, Rake, Bundler ou tout autre outil de l’écosystème Ruby.
Les commandes peuvent être exécutées après la commande
make shell.Cette configuration Docker Compose du projet comprend deux environnements préconfigurés. Si vous devez déployer votre application Ruby quelque part, vous pouvez créer votre propre environnement. Rien de plus simple !
Si vous souhaitez comprendre le fonctionnement de l’environnement Docker pour Ruby on Rails présenté ci-dessus, nous allons détailler l’image Docker Ruby, le Makefile et la configuration Docker Compose qui les fait fonctionner ensemble.
Une image Docker Ruby
Tout d’abord, l’image Docker Ruby est un élément essentiel. Il est également important de la créer correctement afin de réutiliser efficacement le cache des couches d’image Docker et de prendre en compte d’autres aspects liés à un environnement de développement local.
Voici le Dockerfile de l’image Docker Ruby :
Comme vous pouvez le voir, cette configuration part du principe que certains paramètres périphériques sont définis pour disposer d’un environnement Ruby on Rails fonctionnel, notamment :
le fichier
database.yml, prérempli avec les détails de connexion à la base de données Ruby on Railsle fichier
development.rb, qui contient la configuration de l’environnement d’exécution Ruby on Rails pour le développement
Ces paramètres sont définis à l’aide du script runners.sh, dans le répertoire ./environment/containers/ruby/initializers :
Ce Dockerfile utilise également les builds Docker multiétapes. Vous pouvez ainsi réutiliser efficacement certaines parties dans différents environnements, si vous souhaitez utiliser la même configuration pour plusieurs workflows (tests, préproduction, etc.).
Docker Compose pour Rails
Le fichier Docker Compose situé dans `./environment/docker-compose.development.yml` rassemble tous les services nécessaires au fonctionnement d’une application Ruby on Rails dans Docker :
un serveur HTTP nginx
une application Ruby
un serveur de base de données PostgreSQL
Voici le fichier Docker Compose pour Rails utilisé dans cette configuration :
Makefile pour Docker
Enfin, pour fournir aux développeurs une interface simple leur permettant d’interagir facilement avec cet environnement de développement local Ruby, nous utilisons un Makefile :
Exécuter efficacement des applications Ruby
J’espère que vous avez désormais acquis une nouvelle compétence : exécuter des applications Ruby, comme Ruby on Rails, dans votre environnement local à l’aide d’une configuration de conteneurs Docker. Une autre façon d’exécuter des applications Ruby en local consiste à utiliser des environnements virtuels Ruby, que nous avons présentés dans notre précédent article sur l’installation de Ruby sur macOS.
Maintenant que votre environnement de développement Ruby est prêt, vous voudrez peut-être aussi apprendre à sécuriser vos applications Ruby. Consultez les articles suivants pour en savoir plus sur la sécurité de Ruby :
La sécurité des conteneurs, pensée pour les développeurs
Snyk détecte et corrige automatiquement les vulnérabilités dans les images de conteneurs et les workloads Kubernetes.



