Après avoir étudié ** Ruby ** et ** Rails ** dans une école de programmation, j'ai commencé à toucher ** Python ** et ** Django ** pour mon intérêt personnel, mais maintenant je m'occupe de ** Django ** La première impression personnelle que j'ai eue lorsque j'ai commencé était que "** (pour implémenter des fonctionnalités) ** la préparation avant de commencer à écrire du code est difficile par rapport à Rails **".
À l'avenir, afin d'améliorer l'efficacité de la création personnelle de diverses applications et des mains mobiles pour mettre en pratique de nouvelles leçons, il est nécessaire de s'habituer aux travaux de construction de l'environnement lui-même, ainsi qu'aux fonctions **. J'ai senti qu'il était nécessaire de me préparer pour pouvoir me concentrer sur la mise en œuvre et la mise en pratique de ce que j'avais appris **, j'ai donc décidé de me renseigner sur la technologie des conteneurs (manutention).
Le but de cet article (groupe) est ** d'apprendre le déroulement de l'utilisation de Docker via la construction d'environnement Django + MySQL **, et ** de créer un modèle de projet Django qui peut être réutilisé pour vous-même * *est.
En suivant le sens de chaque description aussi soigneusement que possible, je voudrais viser à acquérir des connaissances reproductibles même en traitant avec différents langages / cadres. C'est un mémorandum des débutants de Docker, mais veuillez rester en contact si vous le souhaitez.
- MacOS catalina 10.15.6
- Docker 19.03.8
(- docker-desktop for Mac 2.2.0.3)
- pyenv 1.2.20
- Python 3.7.7
- Django 3.0.8
- MySQL 5.7.31
** Préparez un environnement virtuel à l'aide de venv ** Utilisez venv pour préparer une version spécifique de l'environnement Python. Il crée également un projet Django.
** Considérez la description de Dockerfile **
Pensez à ** Image Docker
** à travers la description dans le Dockerfile.
** Considérez la description de docker-compose.yml **
Créez docker-compose.yml et découvrez le ** conteneur Docker
** via Django et les paramètres MySQL qui le connectent.
** Modifiez le fichier de configuration et exécutez docker-compose up **
Faites divers réglages du côté Django
et exécutez $ docker-compose up
.
** Ajuster la synchronisation du démarrage du conteneur entre les services dépendants **
Dans le processus précédent, ** sous certaines conditions, le conteneur MySQL peut ne pas démarrer avant le conteneur Django et la connexion peut échouer **. Nous visons à résoudre le problème en créant un fichier Python
** dédié.
** Travaux de développement ** Tout ce que vous avez à faire est de vous concentrer sur votre travail de développement, en apportant des changements en fonction de la situation.
Le code source des principaux fichiers associés est résumé ici à l'avance. Le contenu de la description de chaque fichier sera expliqué dans ** Articles par processus ** susmentionnés.
Dockerfile
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
docker-compose.yml
version: "3"
services:
web:
container_name: djst_django
build: .
restart: always
command: >
bash -c "
pip install -r requirements.txt &&
python config/wait_for_db.py &&
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
config/wait_for_db.py
import os
import MySQLdb
from time import sleep
from pathlib import Path
os.chdir(Path(__file__).parent)
from local_settings import DB_NAME, DB_USER, DB_PASSWORD
count_to_try = 0
LIMIT_OF_COUNT = 20 #Ajustez la valeur au besoin
def check_connection(count, limit):
"""
docker-Compose up Fonction pour le réglage de l'heure à l'exécution
"""
try:
conn = MySQLdb.connect(
unix_socket = "/var/run/mysqld/mysqld.sock",
user=DB_USER,
passwd=DB_PASSWORD,
host="db",
port=3306,
db=DB_NAME,
)
except MySQLdb._exceptions.OperationalError as e:
count += 1
print("Waiting for MySQL... (", count, "/ 20 )")
sleep(3)
if count < limit:
check_connection(count, limit)
else:
print(e)
print("Failed to connect mySQL.")
else:
print("Connected!\n")
conn.close()
exit()
if __name__ == "__main__":
check_connection(count_to_try, LIMIT_OF_COUNT)
Si vous avez des suggestions, je vous serais reconnaissant de bien vouloir commenter. J'ai hâte de travailler avec vous.
Recommended Posts