Nachdem ich an einer Programmierschule ** Ruby ** und ** Rails ** studiert hatte, fing ich an, ** Python ** und ** Django ** aus persönlichem Interesse zu berühren, aber jetzt beschäftige ich mich mit ** Django ** Der erste persönliche Eindruck, den ich hatte, als ich anfing, war, dass "** (für die Implementierung von Funktionen) ** die Vorbereitung vor dem Schreiben von Code im Vergleich zu Rails ** schwierig ist".
Um die Effizienz beim persönlichen Erstellen verschiedener Apps und beim Bewegen von Händen zu verbessern, um neue Lektionen in die Praxis umzusetzen, ist es in Zukunft erforderlich, sich an die Bauarbeiten selbst sowie an die ** Funktionen zu gewöhnen. Ich hielt es für notwendig, mich darauf vorzubereiten, dass ich mich darauf konzentrieren konnte, das Gelernte umzusetzen und zu üben **, und beschloss, etwas über Containertechnologie (Handling) zu lernen.
Der Zweck dieses Artikels (Gruppe) besteht darin, ** den Ablauf der Verwendung von Docker durch die Erstellung einer Django + MySQL-Umgebung zu lernen ** und ** eine Vorlage für ein Django-Projekt zu erstellen, die für sich selbst wiederverwendet werden kann * * ist.
Indem ich die Bedeutung jeder Beschreibung so sorgfältig wie möglich verfolge, möchte ich reproduzierbares Wissen erwerben, auch wenn ich mich mit verschiedenen Sprachen / Frameworks befasse. Es ist ein Memorandum von Docker-Anfängern, aber bitte bleiben Sie in Kontakt, wenn Sie möchten.
- 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
** Virtuelle Umgebung mit venv vorbereiten ** Verwenden Sie venv, um eine bestimmte Version der Python-Umgebung vorzubereiten. Es wird auch ein Django-Projekt erstellt.
** Beachten Sie die Beschreibung von Dockerfile **
Denken Sie an ** Docker image
** durch die Beschreibung in der Docker-Datei.
** Beachten Sie die Beschreibung von docker-compose.yml **
Erstellen Sie docker-compose.yml und erfahren Sie mehr über ** Docker container
** über Django und die MySQL-Einstellungen, die es verbinden.
** Konfigurationsdatei bearbeiten und Docker-Compose ausführen ** Nehmen Sie verschiedene Einstellungen auf der Django-Seite vor und führen Sie $ docker-compose up aus.
** Passen Sie den Zeitpunkt des Container-Starts zwischen abhängigen Diensten an ** Im vorherigen Prozess ** wird der MySQL-Container unter bestimmten Bedingungen möglicherweise nicht vor dem Django-Container gestartet, und die Verbindung schlägt möglicherweise fehl **. Wir möchten das Problem lösen, indem wir eine dedizierte Python-Datei ** erstellen.
** Entwicklungsarbeit ** Alles, was Sie tun müssen, ist sich auf Ihre Entwicklungsarbeit zu konzentrieren und Änderungen vorzunehmen, wie es die Situation erfordert.
Der Quellcode der wichtigsten zugehörigen Dateien wird hier vorab zusammengefasst. Der Beschreibungsinhalt jeder Datei wird in den oben genannten ** Artikeln nach Verfahren ** erläutert.
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 #Passen Sie den Wert nach Bedarf an
def check_connection(count, limit):
"""
docker-Compose up Funktion zur Zeitanpassung zur Laufzeit.
"""
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)
Wenn Sie Vorschläge haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten. Ich freue mich darauf, mit Dir zu arbeiten.
Recommended Posts