Optimiser le Développement Python avec Docker Compose (2023)

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.

Top Articles
Latest Posts
Article information

Author: Lidia Grady

Last Updated: 08/09/2023

Views: 5969

Rating: 4.4 / 5 (45 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Lidia Grady

Birthday: 1992-01-22

Address: Suite 493 356 Dale Fall, New Wanda, RI 52485

Phone: +29914464387516

Job: Customer Engineer

Hobby: Cryptography, Writing, Dowsing, Stand-up comedy, Calligraphy, Web surfing, Ghost hunting

Introduction: My name is Lidia Grady, I am a thankful, fine, glamorous, lucky, lively, pleasant, shiny person who loves writing and wants to share my knowledge and understanding with you.