Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 25 min Django

Deployer Django avec Docker

Pourquoi Deployer Django avec Docker ?

Deployer Django avec Docker est un processus crucial pour les développeurs qui cherchent à rendre leur application plus portable, sécurisée et facilement déployable. Dans un environnement professionnel, il est fréquent d'avoir besoin de partager son application entre différents développeurs ou même sur différents serveurs. En utilisant Docker, on peut s'assurer que l'environnement de développement est identique à celui du production, réduisant ainsi les risques liés aux différences d'environnements.

Un cas d'usage concret serait le déploiement d'une application Django sur une infrastructure cloud comme AWS ou Azure. En utilisant Docker, vous pouvez créer une image de votre application qui est facilement déployable et scalable. De plus, Docker offre des avantages en matière de sécurité, car il isoler chaque conteneur dans son propre espace mémoire.

Prerequis

Concepts fondamentaux

Concept 1 : Dockerfile

Un Dockerfile est un fichier texte qui contient des instructions pour construire une image Docker. Chaque instruction crée une nouvelle couche dans l'image.

## Dockerfile
FROM python:3.9-slim as base

## Copier le requirements.txt et installer les dépendances
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

## Créer un environnement virtuel et activer-le
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"

## Copier l'application dans le conteneur
COPY . .

## Définir la commande par défaut pour exécuter l'application
CMD ["python", "manage.py", "runserver"]

Concept 2 : docker-compose.yml

Le fichier docker-compose.yml est utilisé pour définir et gérer les services, les réseaux et les volumes Docker.

## docker-compose.yml
version: '3.9'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    volumes:
      - .:/app
      - /app/staticfiles
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Concept 3 : Construire et lancer votre application

Pour construire votre image Docker, utilisez la commande suivante :

docker-compose build

Puis pour lancer votre application :

docker-compose up

Mise en pratique : projet fil rouge

Nous allons créer un petit gestionnaire de tâches appelé "TaskMaster". Il s'agira d'une application Django simple avec une interface web permettant d'afficher, ajouter et supprimer des tâches.

Étape 1 : Créer le projet Django

django-admin startproject taskmaster .

Étape 2 : Créer l'application de tâches

python manage.py startapp tasks

Étape 3 : Configurer les chemins d'URL

Modifier taskmaster/urls.py pour inclure les urls de notre application :

## taskmaster/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('tasks.urls')),
]

Modifier tasks/urls.py pour définir les routes :

## tasks/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.task_list, name='task-list'),
    path('add/', views.add_task, name='add-task'),
    path('delete/<int:task_id>/', views.delete_task, name='delete-task'),
]

Étape 4 : Créer les vues et modèles

Modifier tasks/views.py pour créer les vues :

## tasks/views.py
from django.shortcuts import render, redirect
from .models import Task

def task_list(request):
    tasks = Task.objects.all()
    return render(request, 'tasks/task_list.html', {'tasks': tasks})

def add_task(request):
    if request.method == 'POST':
        content = request.POST.get('content')
        Task.objects.create(content=content)
        return redirect('task-list')
    return render(request, 'tasks/add_task.html')

def delete_task(request, task_id):
    task = Task.objects.get(id=task_id)
    task.delete()
    return redirect('task-list')

Modifier tasks/models.py pour créer le modèle :

## tasks/models.py
from django.db import models

class Task(models.Model):
    content = models.CharField(max_length=255)

    def __str__(self):
        return self.content

Étape 5 : Créer les templates

Créer les fichiers HTML dans tasks/templates/tasks/ :

  • task_list.html
  • add_task.html

Étape 6 : Ajouter des migrations et mettre à jour la base de données

python manage.py makemigrations tasks
python manage.py migrate

Étape 7 : Installer les dépendances et construire l'image Docker

Créer un fichier requirements.txt :

Django==3.2
psycopg2-binary

Ajouter le Dockerfile et docker-compose.yml comme expliqué précédemment.

Étape 8 : Lancer l'application

docker-compose up --build

Erreurs frequentes et debugging

  1. Erreur : Error response from daemon: Ports are not available: listen tcp 0.0.0.0:8000: bind: address already in use

    Code incorrect :

    docker-compose up
    

    Code correct :

    docker-compose down -v && docker-compose up --build
    
  2. Erreur : ModuleNotFoundError: No module named 'django'

    Code incorrect :

    # taskmaster/settings.py
    import os
    
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    

    Code correct :

    # taskmaster/settings.py
    import os
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
  3. Erreur : OperationalError: no such table

    Code incorrect :

    python manage.py migrate
    

    Code correct :

    docker-compose run web python manage.py migrate
    

Pour aller plus loin

  1. Mise en place de Django avec Docker Compose
  2. Optimisation des performances avec Django et Docker
  3. Gestion des environnements avec Docker Swarm

Défi pratique : Créez une application Django complète pour un simple forum en utilisant Docker et Docker Compose.

Besoin d'aide sur Django ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment installer Docker sur mon ordinateur ?
Pour installer Docker sur votre ordinateur, allez sur le site officiel de Docker (docker.com) et téléchargez la version adaptée à votre système d'exploitation. Suivez les instructions d'installation fournies pour configurer Docker correctement.
Quels fichiers sont nécessaires pour déployer un projet Django avec Docker ?
Pour déployer un projet Django avec Docker, vous aurez besoin de plusieurs fichiers : un Dockerfile pour définir l'environnement d'exécution, un docker-compose.yml pour gérer les services (comme le serveur web et la base de données), ainsi que les configurations nécessaires dans votre fichier settings.py pour faciliter le déploiement.
Comment configurer Django pour qu'il utilise une base de données externe avec Docker ?
Pour utiliser une base de données externe comme PostgreSQL ou MySQL avec Django et Docker, vous devez installer l'adaptateur de base de données approprié (comme psycopg2 pour PostgreSQL). Ensuite, configurez les paramètres de la base de données dans votre fichier settings.py en spécifiant le nom du service Docker et les informations d'accès.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.