[PYTHON] Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen

Einführung

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.

Ausführungsumgebung

Nutzungsumgebung

- MacOS catalina 10.15.6
- Docker 19.03.8
    (- docker-desktop for Mac 2.2.0.3)
- pyenv 1.2.20

Umgebung zu bauen

- Python 3.7.7
- Django 3.0.8
- MySQL 5.7.31

Inhaltsverzeichnis

  1. ** Virtuelle Umgebung mit venv vorbereiten ** Verwenden Sie venv, um eine bestimmte Version der Python-Umgebung vorzubereiten. Es wird auch ein Django-Projekt erstellt.

  2. ** Beachten Sie die Beschreibung von Dockerfile ** Denken Sie an ** Docker image ** durch die Beschreibung in der Docker-Datei.

  3. ** 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.

  4. ** Konfigurationsdatei bearbeiten und Docker-Compose ausführen ** Nehmen Sie verschiedene Einstellungen auf der Django-Seite vor und führen Sie $ docker-compose up aus.

  5. ** 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.

  6. ** Entwicklungsarbeit ** Alles, was Sie tun müssen, ist sich auf Ihre Entwicklungsarbeit zu konzentrieren und Änderungen vorzunehmen, wie es die Situation erfordert.

Quellcode

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

Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Verwendung von Tensorflow unter Docker-Umgebung
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
Wie man MySQL mit Python benutzt
So löschen Sie einen Docker-Container
So verwenden Sie das Jupyter-Notebook, ohne Ihre Umgebung mit Docker zu verschmutzen
So erstellen Sie eine Sphinx-Übersetzungsumgebung
So erstellen Sie eine NVIDIA Docker-Umgebung
Erfahren Sie anhand eines einfachen Regressionsmodells den Ablauf der Bayes'schen Schätzung und die Verwendung von Pystan
Verwenden Sie WebDAV in einer Portable Docker-Umgebung
Freigeben einer virtuellen Umgebung [Informationen zu den Anforderungen.txt]
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
So entwickeln Sie eine Cart-App mit Django
So reflektieren Sie ImageField in Django + Docker (Kissen)
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Verwendung von pip3 in einer Proxy-Umgebung Hinweis
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
Es kann keine Verbindung zu MySQL über die Docker-Umgebung (Debian) hergestellt werden.
So erstellen Sie eine Rest-API in Django
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Hinweise zur Verwendung von AIST Spacon ABCI
Verwendung von Pandas 2
So richten Sie eine Python-Umgebung mit pyenv ein
Verwendung von Virtualenv
Erstellen einer R- und Python Docker-Arbeitsumgebung
Verwendung von numpy.vectorize
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
Verwendung von pytest_report_header
Eine Geschichte darüber, wie Windows 10-Benutzer eine Umgebung für die Verwendung von OpenCV3 mit Python 3.5 erstellt haben
Ein Memorandum zur Verwendung von Keras 'keras.preprocessing.image
Verwendung von Fixture in Django zur Eingabe von Beispieldaten für das Benutzermodell
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Wie man ein praktisches Seminar mit Jupyter mit Docker abhält
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von Bootstrap in der generischen Klassenansicht von Django
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Erstellen Sie eine virtuelle Python-Umgebung mit venv (Django + MySQL ①)
Verwendung von iptables
Verwendung von TokyoTechFes2015
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
Verwendung der Liste []