Cet article correspond à la ** partie 3 ** des articles relatifs à Apprenez à utiliser Docker en construisant l'environnement de Django + MySQL.
Dans cet article, ** afin que vous puissiez créer un conteneur Docker comme vous le souhaitez ** autant que possible à l'avenir ** tout en minimisant l'effort de construction de l'environnement et les commandes à exécuter **, ** Pensons à la description de docker-compose.yml
**.
Quant au conteneur Docker, je le vois comme une réalisation de la ** image Docker ** que j'ai apprise jusqu'à présent, et l'état actuel de la ** "petite machine pour le projet" qui a été déplacée.
Pour le conteneur Django, nous allons procéder au travail basé sur le Dockerfile
créé la dernière fois, tandis que pour le conteneur MySQL, nous utiliserons l'image officielle telle quelle.
Cette fois, ** docker-compose.yml
est également créé dans la même hiérarchie que Dockerfile
**.
La description générale de «docker-compose.yml» est la suivante.
docker-compose.yml
version: "3"
services:
web:
container_name: djst_django
build: .
restart: always
command: >
bash -c "
pip install -r requirements.txt &&
python manage.py runserver 0.0.0.0:8000
"
working_dir: /code
ports:
- 172.0.0.1:8000:8000
volumes:
- .:/code
depends_on:
- db
db:
container_name: djst_mysql
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_TCP_PORT: 3306
TZ: 'Asia/Tokyo'
volumes:
- ./mysql/data:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 3306:3306
version: "3"
La première ligne est la version au format de fichier de docker-compose.
Si la version affichée en exécutant $ docker-compose version
est 1.13.0
ou ultérieure,"3"
, si elle est 1.10.0
ou ultérieure, " 2 "
, si aucune de ces options n'est disponible, `" 1 " "Ce sera".
services:
A partir de la deuxième ligne, nous commencerons à décrire les services gérés par ce fichier.
web:
La ligne 3 commence par le service qui exécute l'application Django. Ici, le nom de l'image (à la fin de) est nommé.
container_name: djst_django
Ligne 4, ** le nom du conteneur généré **. Je vais le nommer ici.
build: .
Sur la 5ème ligne, vu depuis ce docker-compose.yml
, ** spécifiez où générer l'image en fonction du Dockerfile
**. Puisqu'il est placé dans la même couche cette fois, il est décrit comme «.».
La sixième ligne sera considérée plus tard dans la section MySQL.
command: >
bash -c "
pip install -r requirements.txt &&
python manage.py runserver 0.0.0.0:8000
"
Les lignes 7 à 12 décrivent la commande que vous souhaitez exécuter à partir du conteneur lorsque vous exécutez la commande $ docker-compose up
plus tard. Avec $ bash -c" "
, la commande décrite dans " "
sera exécutée.
pip install
pour synchroniser automatiquement les packages utilisés dans l'hôte et le conteneur **Django
sans restrictions d'hôte ( 0.0.0.0
) **Ils sont séparés par «&&» afin qu'ils soient exécutés dans l'ordre.
La limitation de host
se fera plus tard à partir du fichier de configuration de django.
working_dir: /code
À la ligne 13, ** spécifiez le répertoire de travail **. Spécifie le répertoire code
à l'intérieur du conteneur. Ce répertoire est créé sur la base de la description de Dockerfile
décrite dans Dernière fois.
ports:
- 172.0.0.1:8000:8000
Lignes 14-15, ** spécifiez le port à utiliser **. Le côté gauche «172.0.0.1: 8000» est la description de l'hôte et du port côté machine hôte, et le côté droit est la description du port côté conteneur pris en sandwich entre «:». Si vous vous connectez à «127.0.0.1: 8000» du côté de la machine hôte, vous serez connecté au «8000» numéro de «hôte» attribué automatiquement par le côté du conteneur. Concernant le port spécifié, il correspond au port spécifié par runserver
dans la commande
ci-dessus.
volumes:
- .:/code
Lignes 16-17, ** Spécifiez pour le montage des données **. Comme dans la section précédente, le côté gauche avec ** :
est le chemin de l'hôte, et le côté droit est le chemin du côté du conteneur **. Les changements sont synchronisés et les côtés gauche et droit gardent la même gestion. Cet élément semble être Il existe diverses autres façons de le décrire (document officiel), et il semble difficile de l'utiliser librement. ..
depends_on:
- db
Lignes 18-19, ** spécifiez les dépendances de service **. ** Il semble que lorsque vous démarrez web
, db
soit également lancé **.
Problème peut se produire dans l'ordre de démarrage, mais pour le moment, MySQL
peut être utilisé comme base de données de l'application Django
.
Ensuite, considérons la description du service MySQL
.
db:
La ligne 20 commence la description des services exécutés par MySQL. Comme précédemment, ce sera (à la fin de) le nom de l'image.
container_name: djst_mysql
La 21e ligne nomme le conteneur.
image: mysql:5.7
La 22e ligne spécifie ** l'image à créer en fonction de **. Contrairement à l'élément web
mentionné ci-dessus, si vous souhaitez utiliser l'image officiellement préparée telle quelle sans la personnaliser avec le Dockerfile
, elle sera décrite comme ceci.
Bien sûr, si vous créez un autre Dockerfile
dans un répertoire séparé, vous pouvez le spécifier et l'utiliser.
restart: always
Ligne 23, ** Paramètres de redémarrage lorsque le conteneur est arrêté **. Ici, il est réglé sur «toujours» pour qu'il redémarre toujours sauf pour une opération manuelle. La valeur par défaut est «non», et il semble que vous puissiez sélectionner «sans arrêt» et «en cas d'échec» en plus de «toujours».
environment:
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_TCP_PORT: 3306
TZ: 'Asia/Tokyo'
Les lignes 24-30 sont ** définissant les variables d'environnement **. Ceux avec «$» seront décrits dans le fichier «.env» qui sera créé plus tard, au cas où vous voudriez le publier sur «GitHub» etc. Ce sont les informations de base de données pour se connecter à partir de Django
.
MYSQL_TCP_PORT
devrait être cohérent avec l'option ports
que nous verrons plus tard. Ici, j'ai spécifié le numéro par défaut «3306» pour MySQL. «TZ» est un paramètre régional.
volumes:
- ./mysql/data:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
Les lignes 31 à 33 sont des ** paramètres de montage de données **. Comme précédemment, l'hôte est à gauche de ** :
et le chemin à l'intérieur du conteneur est à droite. ** **
La ligne ascendante est ** les paramètres de montage pour la persistance **. Les informations stockées dans la base de données sont synchronisées avec le répertoire . / Mysql / data
sur l'hôte lorsque l'application est utilisée.
La ligne du bas est ** Paramètres de montage dans le fichier de paramètres **. Si vous préparez un fichier . / Mysql / my.cnf
qui décrit les paramètres de langue, etc., il sera reflété dans les paramètres MySQL
du côté du conteneur.
De plus, si vous préparez un fichier SQL etc. sous la forme d'un montage dans le répertoire / docker-entrypoint.init.d
dans le conteneur, il semble que vous puissiez également saisir les données initiales dans la base de données.
ports:
- 3306:3306
Enfin, ** Définissez le port à utiliser **. C'est OK si elle est cohérente avec la variable d'environnement MYSQL_TCP_PORT
décrite précédemment.
Créez un fichier ** .env
** pour décrire les variables d'environnement. Ceci est également placé dans la même hiérarchie.
.env
DB_NAME=********
DB_USER=********
DB_PASSWORD=********
DB_ROOT_PASSWORD=********
La description est la ** définition de variable d'environnement ** correspondant à l'option ʻenvironment décrite plus haut dans
docker-compose.yml. Veuillez décrire comme vous le souhaitez à la place de «*********». Si vous souhaitez le publier sur
GitHub` etc., ** supprimez ce fichier de la gestion **.
Créez un répertoire de montage MySQL . / Mysql
et placez-y le fichier de configuration my.cnf
.
mysql/my.cnf
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
Saisissez ici à l'avance les variables que vous souhaitez modifier depuis le début.
Le . / Mysql / data /
spécifié comme destination de montage des données de base de données est automatiquement généré lorsque $ docker-compose up
est exécuté. Si vous souhaitez publier ceci sur GitHub
etc. **, supprimez-le de la cible de gestion à l'avance **.
django_starter
├── .venv
│ └── (Abréviation)
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── mysql <- New!
│ └── my.cnf
├── .env <- New!
├── docker-compose.yml <- New!
├── Dockerfile
├── manage.py
└── requirements.txt
Vous avez maintenant créé un docker-compose.yml
pour construire un environnement Django
+ MySQL
.
Cette fois, j'ai essayé différentes choses pour comprendre la signification de chaque option, et plus j'approfondissais mes connaissances de Docker
, bien sûr, **" la technologie que je veux gérer "comme" MySQL "et" Django ", plus. J'ai senti une fois de plus que je pouvais faire diverses choses librement **, alors je voulais continuer à apprendre, y compris celles-là.
La prochaine fois, j'envisagerai de ** éditer le fichier de configuration Django ** et d'exécuter la commande ** $ docker-compose up
**.
Cliquez ici pour le prochain article ↓
"4. Modifiez le fichier de configuration et exécutez docker-compose up"
Merci pour votre visite.