[PYTHON] [DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django

Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django

Einführung

DynamoDB ist billig und schnell, nicht wahr? Wussten Sie, dass es ein Docker-Image für die lokale Entwicklung einer solchen DynamoDB gibt? Wir werden nach einem Beispiel für die Erstellung einer Entwicklungsumgebung mit einem solchen Docker Image fragen.

Umgebung

Die Version des Bildes, die entsprechend der Produktionsumgebung verwendet werden soll, lautet wie folgt. Verwenden Sie dynamodb-admin für den GUI-Betrieb von DynamoDB. Der Knoten wird beim gemeinsamen Aufbau der Umgebung verwendet.

Umgebung Ausführung
Python 3.7.4
MySQL 5.7
Node 10.16.3-alpine

Umgebung

Django und MySQL

Da wir von Grund auf neu bauen, werden wir zuerst das Django-Projekt starten. Das offizielle Django-Bild ist eine alte Version, also werde ich es selbst machen.

$ django-admin startproject dynamodb_example
$ cd dynamodb_example/
$ touch docker-compose.yml
$ touch Dockerfile
FROM python:3.7.4

RUN apt-get update
RUN apt-get install -y --no-install-recommends apt-utils gettext
RUN mkdir /app; mkdir /app/dynamodb_example

WORKDIR /app
COPY dynamodb_example /app/dynamodb_example
COPY requirements.txt /app/
COPY manage.py /app/

RUN pip install -r requirements.txt

EXPOSE 8080
CMD ["python", "manage.py", "runserver", "0.0.0.0:8080"]

docker-compose.yml


version: "3"
services:
  mysql:
    container_name: example-mysql
    ports:
      - 53306:3306
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./persist/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_USER: example
      MYSQL_PASSWORD: example
      MYSQL_DATABASE: example
      MYSQL_ROOT_PASSWORD: example

  django:
    container_name: example-django
    build: .
    volumes:
      - .:/app
    working_dir: /app
    command: sh -c "./wait-for-it.sh db:3306; python3 manage.py runserver 0.0.0.0:8000"
    env_file: .env
    ports:
      - 58080:8000
    depends_on:
      - mysql

Es gibt 50.000 Ports, weil ich sie definitiv nicht tragen möchte. Es gibt keine besondere Bedeutung. Die Bibliothek zum Herstellen einer Verbindung mit DynamoDB enthält ** boto3 ** und ** pynamodb **, die sie umschließen.

requirements.txt


boto3
pynamodb
Django==2.2.4
djangorestframework==3.10.3
django-filter
mysqlclient==1.3.13

Ich verstehe Umgebungsvariablen nicht wirklich, aber ...

.env


DB_ENGINE=django.db.backends.mysql
DB_HOST=mysql
DB_DATABASE=example
DB_USERNAME=root
DB_PASSWORD=example
DB_PORT=3306

Vorerst möchte ich die Kommunikation zwischen Django und MySQL überprüfen, damit ich Djangos DATENBANKEN neu schreiben kann.

setting.py


DATABASES = {
    'default': {
        'ENGINE': os.getenv('DB_ENGINE'),
        'NAME': os.getenv('DB_DATABASE'),
        'USER': os.getenv('DB_USERNAME'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'HOST': os.getenv('DB_HOST'),
        'OPTIONS': {
            'init_command': 'SET foreign_key_checks = 0;',
            'charset': 'utf8mb4',
        },
    }
}

Wenn Sie an diesem Punkt angelangt sind, prüfen Sie, ob es vorerst beginnt.

$ docker-compose up -d
$ docker-compose exec django bash
$ python manage.py migrate

Wenn alles gut geht, fügen Sie ** DynamoDB Local ** und ** dynamodb-admin ** hinzu.

DynamoDB Local Listen Sie dynamodb in docker-compose.yml auf. Geben Sie am Ende des Befehls dbPath an, um ihn dauerhaft zu machen.

docker-compose.yml


  dynamodb:
    container_name: example-dynamodb
    image: amazon/dynamodb-local
    command: -jar DynamoDBLocal.jar -dbPath /home/dynamodblocal/data
    volumes:
      - ./persist/dynamodb:/home/dynamodblocal/data
    ports:
      - 50706:8000

dynamodb-admin Ich hatte ein offizielles Bild, aber ich habe es gemacht, also werde ich das verwenden.

$ mkdir dynamodb-admin
$ touch dynamodb-admin/Dockerfile
$ touch dynamodb-admin/.env
FROM node:10.16.3-alpine

RUN ["apk", "update"]
RUN ["npm", "install", "dynamodb-admin", "-g"]

EXPOSE 50727
CMD ["dynamodb-admin", "-p", "50727"]

Geben Sie in der Umgebungsvariablen "DYNAMO_ENDPOINT" den Containerservice-Namen von dynamodb und den Port auf der Containerseite an.

.env


DYNAMO_ENDPOINT=http://dynamodb:8000
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=ACCESS_ID
AWS_SECRET_ACCESS_KEY=ACCESS_KEY

Die endgültige Datei docker-compose.yml mit diesem dyanamodb-admin sieht folgendermaßen aus:

docker-compose.yml


version: "3"
services:
  dynamodb:
    container_name: example-dynamodb
    image: amazon/dynamodb-local
    command: -jar DynamoDBLocal.jar -dbPath /home/dynamodblocal/data
    volumes:
      - ./persist/dynamodb:/home/dynamodblocal/data
    ports:
      - 50706:8000
  dynamodb-admin:
    container_name: example-dynamodb-admin
    build: dynamodb-admin/
    command: dynamodb-admin -p 8000
    env_file: dynamodb-admin/.env
    ports:
      - 50727:8000
    depends_on:
      - dynamodb
  mysql:
    container_name: example-mysql
    ports:
      - 53306:3306
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./persist/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_USER: example
      MYSQL_PASSWORD: example
      MYSQL_DATABASE: example
      MYSQL_ROOT_PASSWORD: example
  django:
    container_name: example-django
    build: .
    volumes:
      - .:/app
    working_dir: /app
    command: sh -c "./wait-for-it.sh db:3306; python3 manage.py runserver 0.0.0.0:8000"
    env_file: .env
    ports:
      - 58080:8000
    depends_on:
      - mysql
      - dynamodb

Wenn [http: // localhost: 50727](http: // localhost: 50727) im Browser angezeigt wird und Folgendes angezeigt wird, ist dies erfolgreich. スクリーンショット 2019-09-29 23.11.48.png Mit Create Table etc. können Sie tun, was Sie wollen.

Bestätigung der Persistenz

Ich werde einen Tisch entsprechend machen. スクリーンショット 2019-09-29 23.18.51.png Es wurde kreiert. スクリーンショット 2019-09-29 23.19.02.png

Löschen Sie den Container und starten Sie ihn neu.

$ docker-compose down
$ docker-compose up -d

Wenn Sie [http: // localhost: 50727](http: // localhost: 50727) öffnen und die vorherige Tabelle erhalten bleibt, ist auch die Persistenz erfolgreich.

Schließlich

Dieses Repository wird unten veröffentlicht. Das Tag ist ** 1.0.0 **, da es möglicherweise in Zukunft aktualisiert wird. https://github.com/Cohey0727/example_dynamodb Bitte benutzen Sie es, wenn Sie möchten.

Recommended Posts

[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Erstellen Sie eine lokale Entwicklungsumgebung mit WSL + Docker Desktop für Windows + Docker-Lambda + Python
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Erstellen Sie mit Docker-Compose eine schnelle API-Umgebung
Holen Sie sich mit Docker eine lokale Umgebung für DynamoDB
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Erstellen Sie eine Kubernetes-Umgebung für die Entwicklung unter Ubuntu
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Erstellen Sie eine mruby-Entwicklungsumgebung für ESP32 (Linux Edition)
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Erstellen einer R- und Python Docker-Arbeitsumgebung
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
Starten Sie Django auf einem Docker-Container mit Docker-Compose Up
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Erstellen Sie mit Docker eine einfache Fast API-Entwicklungsumgebung
Erstellen einer numerischen Berechnungsumgebung mit pyenv und miniconda3
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Erstellen Sie eine Docker-Umgebung, die PyTorch und JupyterLab verwenden kann
Erstellen Sie mit VirtualBox und Ubuntu eine Scikit-Lernumgebung für maschinelles Lernen
Erstellen Sie eine Go-Entwicklungsumgebung mit den Remote-Containern von VS Code
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Erstellen Sie eine GPU-Umgebung mit GCP und kaggle offiziellem Image (Docker)
Erstellen Sie mit Docker kostengünstig eine Flask-Entwicklungsumgebung
Erstellen Sie mit Docker eine Go-Umgebung
Erstellen Sie eine Deb-Datei mit Docker
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Stellen Sie die Django-Anwendung mit Docker bereit
Erstellen Sie eine Webanwendung mit Django
Erstellen Sie die Entwicklungsumgebung von Django mit Docker neu! !! !! !!
Erstellen einer Docker-Arbeitsumgebung für R und Python 2: Japanische Unterstützung
Erstellen und testen Sie eine CI-Umgebung für mehrere Versionen von Python
Erstellen Sie eine 64-Bit-Python 2.7-Umgebung mit TDM-GCC und MinGW-w64 unter Windows 7
Erstellen Sie mit dem Serverless Framework eine lokale Entwicklungsumgebung für Lambda + Python
Erstellen Sie mit Anaconda und PyCharm eine Python-Umgebung auf Ihrem Mac