Configurer Docker pour Django sur MySQL

Il y a beaucoup d'articles non pertinents sur Internet, j'ai donc préparé cette publication. En gros, lors de la rédaction de l'article, je me suis appuyé sur l'exemple de configuration de docker pour django dans la documentation de docker.



Ici, nous allons décrire la configuration du docker pour le framework django et la base de données mysql, qui seront stockées en dehors du conteneur, afin que vous n'ayez pas à vous soucier de quelque chose qui se passe dans notre conteneur.



Lors de la rédaction de ce guide, les éléments suivants ont été utilisés:



  • ubuntu 20.04
  • docker 19/03/12
  • docker-compose 1.26.2
  • python 3.8
  • mysql 5.7
  • django 3.1.1
  • mysqlclient 2.0.1
  • django-mysql 3.8.1


Configuration de l'espace de travail



Avant de commencer l'installation, vous devez préparer l'espace de travail:



  1. Installez docker et docker-compose . Le processus d'installation est détaillé dans la documentation du docker.
  2. Créez un répertoire où sera situé notre projet (dans cet exemple, project). Dans ce répertoire, créez-en un autre, qui stockera la configuration pour exécuter l'image python (dans cet exemple, web).


./project
      /web


Ceci termine la préparation et vous pouvez commencer à mettre en place notre petit projet.



requirements.txt



Dans le répertoire Web, créez un fichier appelé requirements.txt.

Dans ce fichier, nous déclarons des packages pour que notre application django fonctionne.



/project/web/requirements.txt



Django==3.1.1
mysqlclient==2.0.1
django-mysql==3.8.1


Comme vous pouvez le voir, django lui-même est enregistré ici, ainsi que les packages pour communiquer avec la base de données mysql.



.



Dockerfile



web Dockerfile.

Dockerfile . .



:



/project/web/Dockerfile



FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /web_django
WORKDIR /web_django
COPY requirements.txt /web_django/
RUN pip install --upgrade pip && pip install -r requirements.txt
ADD . /web_django/ 


python , , . web_django .

pip (--upgrade pip), .. , .



docker-compose.yml



docker-compose.yml.



. - . compose , Docker , , . , .



.



/project/docker-compose.yml



version: '3'

services:
  web:
    build: ./web
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/web_django
    ports:
      - '8000:8000'
    depends_on:
      - db
  db:
    image: mysql:5.7
    ports:
      - '3306:3306'
    environment:
      MYSQL_DATABASE: 'db_django'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    restart: always
    volumes:
      - ./db_django:/var/lib/mysql


web/Dockerfile . django 8000 . mysql.



mysql. : , , , ( , , ) , . , , , , mysql .



. django .



django



(project/) . django web_django.



sudo docker-compose run web django-admin startproject web_django .


:



drwxr-xr-x   6 root  root   4,0K   16 21:49 db_django
-rw-rw-r--   1 kafka kafka  466    16 21:31 docker-compose.yml
-rwxr-xr-x   1 root  root   666    16 21:34 manage.py
drwxrwxr-x   2 kafka kafka  4,0K   16 21:31 web
drwxr-xr-x   3 root  root   4,0K   16 21:34 web_django


, .. root .



sudo chown -R $USER:$USER web_django




Ouvrez le fichier de paramètres django du projet le long du chemin web_django / settings.py

Dans ce fichier, nous remplacerons les paramètres de connexion à la base de données que nous avons spécifiés dans docker-compose.yml.



/project/web_django/settings.py



DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_django',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': '3306',
    }
}


Maintenant, tout est prêt et vous pouvez exécuter docker-compose.



Lancement du projet



Pour démarrer les conteneurs, exécutez simplement cette commande



docker-compose up


Pour exécuter des conteneurs en arrière-plan, vous devez spécifier un argument supplémentaire



docker-compose up -d


Afin de reconstruire des images, vous pouvez exécuter la commande



docker-compose build


Migration de base de données



Afin de migrer la base de données, exécutez les commandes:



docker-compose run web python manage.py makemigrations


docker-compose run web python manage.py migrate



All Articles