Dans le monde du développement logiciel, Docker est devenu un outil incontournable, offrant aux développeurs la possibilité de créer et reproduire des images sur n'importe quel hôte. Cela élimine les incohérences des environnements de développement, réduisant considérablement les délais d'intégration.
Construction d'une API Todo avec Python, Django, et PostgreSQL
Pour illustrer l'intégration de Docker dans le développement, nous allons explorer la création d'une API Todo simple avec Python, Django REST Framework, et PostgreSQL en utilisant Docker Compose pour le développement, les tests, et éventuellement dans notre pipeline CI/CD.
Prérequis pour ce Tutoriel
Avant de commencer, assurez-vous de disposer de Docker Community Edition, Docker Compose, et téléchargez l'exemple d'application Todo.
Création du Dockerfile
Au cœur de toute application Dockerisée, se trouve le Dockerfile. Celui-ci contient toutes les instructions nécessaires à la construction de l'image de l'application. Dans notre cas, nous utilisons l'image préconstruite Python:3.6.1-alpine disponible dans le référentiel Docker.
FROM python:3.6.1-alpine
RUN apk update \
&& apk add \
build-base \
postgresql \
postgresql-dev \
libpq
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY ./requirements.txt .
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1
COPY . .
Ces instructions font notamment la mise à jour des packages apk, installent les dépendances nécessaires, créent un répertoire pour l'application, copient les fichiers nécessaires, installent les dépendances Python, et définissent des variables d'environnement.
Services avec Docker Compose
Maintenant que nous savons comment construire une image avec un Dockerfile, passons à la création d'un service d'application connecté à une base de données PostgreSQL à l'aide de Docker Compose.
Service Web
version: '3'
services:
web:
build: .
command: gunicorn -b 0.0.0.0:8000 todosapp.wsgi:application
depends_on:
- postgres
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
environment:
DATABASE_URL: postgres://todoapp@postgres/todos
postgres:
image: postgres:9.6.2-alpine
environment:
POSTGRES_USER: todoapp
POSTGRES_DB: todos
Dans ce fichier docker-compose.yml, nous définissons un service Web qui utilise l'image construite précédemment. Ce service dépend du service PostgreSQL, monte les volumes nécessaires, expose le port 8000, et configure les variables d'environnement.
Exécution de l'Application
Avec nos services définis, exécutez l'application avec la commande docker-compose up
. Cela construira les images et démarrera les conteneurs. Vous pouvez accéder à l'application à l'adresse localhost:8000/todos
sur la machine hôte.
Migration du Schéma de la Base de Données
N'oublions pas la migration du schéma de la base de données avec la commande:
docker-compose exec web python manage.py migrate
Tests de l'Application
Exécutez les tests d'intégration avec Docker Compose en utilisant un projet distinct pour isoler les tests. Utilisez la commande suivante:
docker-compose -p tests run -p 8000 --rm web python manage.py test
Cela garantit que vos tests s'exécutent dans un environnement propre.
Conclusion
Avec Docker Compose, le développement d'applications Python devient plus fluide. Cette approche offre une gestion efficace des dépendances, une isolation des services, et une reproductibilité des environnements de développement. Dans la prochaine partie de cette série, nous explorerons l'intégration continue et le déploiement de cette application à l'aide de Codeship.