Dockeriser une application Django 2 avec docker compose – Partie 1

English English

Ce poste explique comment Dockeriser une application Django 2.0 en utilisant docker compose. C’est un tutoriel pas à pas pour apprendre à utiliser Django avec Docker à partir du zéro.

Tuto sur Youtube

Dockeriser une application Django 2 avec docker compose

Ne perdons pas de temps et allons aux étapes suivantes.

1. Tout d’abord il faut créer un répertoire vide nommé dockerize-django-app et ajouter un autre dossier à l’intérieur nommé web. web devrait contenir le projet Django.

mkdir dockerize-django-app
mkdir dockerize-django-app/web

2. Nous allons maintenant créer un fichier requirements.txt dans le dossier web et d’y écrire cette ligne pour installer Django version 2.0 dans le conteneur Docker:

Django==2.0

3. Passons maintenant à la création du Dockerfile dans le dossier web. Le Dockerfile devrait contenir les lignes suivantes (toutes les lignes sont commentées pour vous aidez à mieux comprendre):

FROM python:3.4

# Permet à Python d'afficher tout ce qui est imprimé dans l'application plutôt que de le mettre en mémoire tampon.
ENV PYTHONUNBUFFERED 1


# Création of the workdir
RUN mkdir /code

WORKDIR /code

# Add requirements.txt file to container
ADD requirements.txt /code/

# Install requirements
RUN pip install --upgrade pip
RUN pip install -r /code/requirements.txt

# Add the current directory(the web folder) to Docker container
ADD . /code/

Nous utilisant l’image Docker officielle pour Python 3.4, ensuite nous copions le dossier contenant nos fichiers requirements.txt dans le conteneur, puis installez Docker avec pip install

4. Créer un fichier appelé docker-compose.yml à la racine du répertoire dockerize-django-app.

Le docker-compose.yml est utilisé pour décrire les services qui font notre application. Ici, nous avons seulement besoin d’un service web (Django).

version: "3"

services:

  web:
    build: ./web/
    ports:
      - "8000:8000"
    volumes:
      - ./web:/code
    command: django-admin startproject mysite .

Ici, nous spécifions que nous utilisons la version 3 de docker-compose et nous avons seulement un service appelé web. Le service Web utilisera le port 8000 à l’intérieur du conteneur Docker et l’exposera pour la machine hôte.

La commande django-admin startproject mysite .est utilisé pour générer un projet Django nommé mysite dans le répertoire courant (/web/).

5. Nous allons effectuer un Build puis un Run pour créer une structure de répertoire de projet Django.

docker-compose up --build

6. Maintenant, nous avons un nouveau répertoire nommé mysite, mais il est protégé en écriture car Docker s’exécute avec le privilège root. Donc, mettons en écriture les fichiers générés.
À la racine du répertoire du projet (dockerize-django-app) tapez:

sudo chown -R $USER:$USER web/mysite/
sudo chown -R $USER:$USER web/manage.py

7. Après avoir généré une application Django vide, nous pouvons enfin l’exécuter. Modifiez simplement la commande docker-composer pour que le service Web lance le serveur Django avec la commande python manage.py runserver 0.0.0.0:8000

version: "3"

services:

  web:
    build: ./web/
    ports:
      - "8000:8000"
    volumes:
      - ./web:/code
    command: python manage.py runserver 0.0.0.0:8000

Maintenant, lancez le conteneur Docker avec la commande: docker-compose up  et ouvrez le navigateur sur http://localhost:8000

Vous devriez voir cette page:

Docker start page
Docker start page

Et cette sortie de la console:

Docker Django start project
Docker Django start project

Conclusion

Dans ce tutoriel, nous avons vu comment installer et exécuter une application Django très basique avec Docker en utilisant docker-composer.

Vous pouvez trouver le code source du projet sur Github: https://github.com/wassim6/dockerize-django-app-part-1/

Dans le prochain tutoriel, nous verrons comment appliquer les migrations Django en utilisant un service Docker, car comme vous pouvez le voir dans la sortie de la console, nous avons un message d’avertissement:

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.

Bonne lecture et j’èspère que ça été utile!!