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:
- Installez docker et docker-compose . Le processus d'installation est détaillé dans la documentation du docker.
- 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