Utiliser des conteneurs pour le développement R
Prérequis
Terminez Conteneuriser une application R.
Aperçu
Dans cette section, vous apprendrez à mettre en place un environnement de développement pour votre application conteneurisée. Cela inclut :
- L'ajout d'une base de données locale et la persistance des données
- La configuration de Compose pour mettre à jour automatiquement vos services Compose en cours d'exécution lorsque vous modifiez et enregistrez votre code
Obtenir l'application exemple
Vous devrez cloner un nouveau dépôt pour obtenir une application exemple qui inclut la logique de connexion à la base de données.
Placez-vous dans un répertoire où vous souhaitez cloner le dépôt et exécutez la commande suivante.
$ git clone https://github.com/mfranzon/r-docker-dev.git
Configurer l'application pour utiliser la base de données
Pour essayer la connexion entre l'application Shiny et la base de données locale, vous devez modifier le Dockerfile
en changeant l'instruction COPY
:
-COPY src/ .
+COPY src_db/ .
Ajouter une base de données locale et persister les données
Vous pouvez utiliser des conteneurs pour mettre en place des services locaux, comme une base de données. Dans cette section, vous mettrez à jour le fichier compose.yaml
pour définir un service de base de données et un volume pour persister les données.
Dans le répertoire du dépôt cloné, ouvrez le fichier compose.yaml
dans un IDE ou un éditeur de texte.
Dans le fichier compose.yaml
, vous devez dé-commenter les propriétés pour configurer la base de données. Vous devez également monter le fichier de mot de passe de la base de données et définir une variable d'environnement sur le service shiny-app
pointant vers l'emplacement du fichier dans le conteneur.
Voici le fichier compose.yaml
mis à jour.
services:
shiny-app:
build:
context: .
dockerfile: Dockerfile
ports:
- 3838:3838
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
depends_on:
db:
condition: service_healthy
secrets:
- db-password
db:
image: postgres
restart: always
user: postgres
secrets:
- db-password
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=example
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
expose:
- 5432
healthcheck:
test: ["CMD", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:
secrets:
db-password:
file: db/password.txt
NotePour en savoir plus sur les instructions du fichier Compose, consultez la référence du fichier Compose.
Avant d'exécuter l'application à l'aide de Compose, notez que ce fichier Compose spécifie un fichier password.txt
pour contenir le mot de passe de la base de données. Vous devez créer ce fichier car il n'est pas inclus dans le dépôt source.
Dans le répertoire du dépôt cloné, créez un nouveau répertoire nommé db
et à l'intérieur de ce répertoire, créez un fichier nommé password.txt
qui contient le mot de passe de la base de données. À l'aide de votre IDE ou éditeur de texte préféré, ajoutez le contenu suivant au fichier password.txt
.
mysecretpassword
Enregistrez et fermez le fichier password.txt
.
Vous devriez maintenant avoir le contenu suivant dans votre répertoire r-docker-dev
.
├── r-docker-dev/
│ ├── db/
│ │ └── password.txt
│ ├── src/
│ │ └── app.R
│ ├── src_db/
│ │ └── app_db.R
│ ├── requirements.txt
│ ├── .dockerignore
│ ├── compose.yaml
│ ├── Dockerfile
│ ├── README.Docker.md
│ └── README.md
Maintenant, exécutez la commande docker compose up
suivante pour démarrer votre application.
$ docker compose up --build
Testez maintenant votre connexion à la base de données en ouvrant un navigateur à l'adresse :
http://localhost:3838
Vous devriez voir un message contextuel :
DB CONNECTED
Appuyez sur ctrl+c
dans le terminal pour arrêter votre application.
Mettre à jour automatiquement les services
Utilisez Compose Watch pour mettre à jour automatiquement vos services Compose en cours d'exécution lorsque vous modifiez et enregistrez votre code. Pour plus de détails sur Compose Watch, consultez Utiliser Compose Watch.
Les lignes 15 à 18 du fichier compose.yaml
contiennent des propriétés qui déclenchent Docker
pour reconstruire l'image lorsqu'un fichier dans le répertoire de travail actuel est modifié :
|
|
Exécutez la commande suivante pour exécuter votre application avec Compose Watch.
$ docker compose watch
Maintenant, si vous modifiez votre app.R
, vous verrez les changements en temps réel sans reconstruire l'image !
Appuyez sur ctrl+c
dans le terminal pour arrêter votre application.
Résumé
Dans cette section, vous avez vu comment configurer votre fichier Compose pour ajouter une base de données locale et persister les données. Vous avez également appris à utiliser Compose Watch pour reconstruire et exécuter automatiquement votre conteneur lorsque vous mettez à jour votre code.
Informations connexes :
Prochaines étapes
Dans la section suivante, vous verrez comment configurer un pipeline CI/CD en utilisant GitHub Actions.