[PYTHON] Apprenez à utiliser Docker en créant un environnement pour Django + MySQL

introduction

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.

Environnement d'exécution

Environnement d'utilisation

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

Environnement à construire

- Python 3.7.7
- Django 3.0.8
- MySQL 5.7.31

table des matières

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

  2. ** Considérez la description de Dockerfile ** Pensez à ** Image Docker ** à travers la description dans le Dockerfile.

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

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

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

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

Code source

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

Apprenez à utiliser Docker en créant un environnement pour Django + MySQL
Comment créer un environnement Django (python) sur Docker
Comment utiliser Tensorflow dans un environnement Docker
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) à l'aide de VS Code + Remote Containers
Comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement
Comment utiliser Mysql avec python
Comment supprimer un conteneur Docker
Comment utiliser Jupyter Notebook sans polluer votre environnement avec Docker
Comment créer un environnement de traduction sphinx
Comment créer un environnement NVIDIA Docker
Apprenez le flux de l'estimation bayésienne et comment utiliser Pystan grâce à un modèle de régression simple
Utiliser WebDAV dans un environnement Docker portable
Comment partager un environnement virtuel [About requirements.txt]
Construire un environnement Django sur Raspai (MySQL)
Comment développer une application de panier avec Django
Comment refléter ImageField dans Django + Docker (oreiller)
[Python] Créer un environnement de développement Django avec Docker
Comment utiliser pip3 sous un environnement proxy Remarque
[Note] Comment créer un environnement de développement Ruby
Impossible de se connecter à MySQL depuis l'environnement Docker (Debian)
Comment créer une API Rest dans Django
Flutter dans Docker - Comment créer et utiliser un environnement de développement Flutter dans un conteneur Docker
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Remarques sur l'utilisation d'AIST Spacon ABCI
Comment utiliser Pandas 2
Comment configurer un environnement Python à l'aide de pyenv
Comment utiliser Virtualenv
Création d'un environnement de travail Docker R et Python
Comment utiliser numpy.vectorize
Comment déployer une application Django dans le cloud Alibaba
Comment utiliser pytest_report_header
Une histoire sur la façon dont les utilisateurs de Windows 10 ont créé un environnement pour utiliser OpenCV3 avec Python 3.5
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment utiliser fixture dans Django pour saisir des exemples de données associés au modèle utilisateur
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser le bootstrap dans la vue de classe générique Django
Comment utiliser virtualenv
Comment utiliser Matplotlib
Construire un environnement virtuel Python en utilisant venv (Django + MySQL ①)
Comment utiliser iptables
Comment utiliser TokyoTechFes2015
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
Comment utiliser la liste []