[PYTHON] [DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose

Créer un environnement de développement pour DynamoDB et Django avec docker-compose

introduction

DynamoDB est bon marché et rapide, n'est-ce pas? Saviez-vous qu'il existe une image Docker pour développer un tel DynamoDB localement? Nous allons nous renseigner sur un exemple de création d'un environnement de développement à l'aide d'une telle image Docker.

environnement

La version de l'image à utiliser en fonction de l'environnement de production est la suivante. Utilisez dynamodb-admin pour le fonctionnement GUI de DynamoDB. Node est utilisé lors de la construction de l'environnement ensemble.

environnement version
Python 3.7.4
MySQL 5.7
Node 10.16.3-alpine

Environnement

Django et MySQL

Puisque nous construisons à partir de zéro, nous allons d'abord démarrer le projet Django. L'image officielle de Django est une ancienne version, je vais donc la créer moi-même.

$ 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

Il y a 50 000 ports parce que je ne veux certainement pas les porter. Il n'y a pas de signification particulière. La bibliothèque de connexion à DynamoDB contient ** boto3 ** et ** pynamodb ** qui l'encapsule.

requirements.txt


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

Je ne comprends pas vraiment les variables d'environnement, mais ...

.env


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

Pour le moment, je veux vérifier la communication entre Django et MySQL, donc je vais réécrire les BASES DE DONNÉES de Django.

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',
        },
    }
}

Si vous arrivez à ce point, vérifiez si cela commence pour le moment.

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

Si tout se passe bien, ajoutez ** DynamoDB Local ** et ** dynamodb-admin **.

DynamoDB Local Liste dynamodb dans docker-compose.yml. Spécifiez dbPath à la fin de la commande pour le rendre persistant.

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 J'avais une image officielle, mais je l'ai faite, donc je vais l'utiliser.

$ 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"]

Dans la variable d'environnement DYNAMO_ENDPOINT, spécifiez le nom du service conteneur de dynamodb et le port côté conteneur.

.env


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

Le fichier final docker-compose.yml avec ce dyanamodb-admin ressemble à ceci:

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

Si [http: // localhost: 50727](http: // localhost: 50727) s'affiche dans le navigateur et que les éléments suivants s'affichent, l'opération réussit. スクリーンショット 2019-09-29 23.11.48.png Vous pouvez faire ce que vous voulez avec Create Table, etc.

Confirmation de la persistance

Je vais faire un tableau de manière appropriée. スクリーンショット 2019-09-29 23.18.51.png Cela a été créé. スクリーンショット 2019-09-29 23.19.02.png

Supprimez le conteneur et redémarrez-le.

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

Si vous ouvrez [http: // localhost: 50727](http: // localhost: 50727) et que la table précédente reste, la persistance est également réussie.

finalement

Ce référentiel sera publié ci-dessous. La balise est ** 1.0.0 ** car elle pourrait être mise à jour ultérieurement. https://github.com/Cohey0727/example_dynamodb Veuillez l'utiliser si vous le souhaitez.

Recommended Posts

[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
[Python] Créer un environnement de développement Django avec Docker
J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
Créez un environnement de développement avec Poetry Django Docker Pycharm
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Créer un environnement de développement Django à l'aide de Doker Toolbox
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
Créer une application Todo avec Django ① Créer un environnement avec Docker
Créez un environnement d'API rapide avec docker-compose
Obtenez un environnement local pour DynamoDB avec Docker
[Linux] Créer un environnement Jenkins avec Docker
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Créer un environnement de développement de langage C avec un conteneur
Créez un environnement Django avec Vagrant en 5 minutes
Créez un environnement virtuel avec pyenv et venv
Créer un environnement Kubernetes pour le développement sur Ubuntu
Créez rapidement un environnement Python Django avec IntelliJ
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Création d'un environnement de travail Docker R et Python
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Flutter dans Docker - Comment créer et utiliser un environnement de développement Flutter dans un conteneur Docker
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Comment créer un environnement Django (python) sur Docker
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)
Lancer Django sur un conteneur Docker à l'aide de docker-compose up
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Créer un environnement de développement d'API rapide léger à l'aide de Docker
Construire un environnement de calcul numérique avec pyenv et miniconda3
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) à l'aide de VS Code + Remote Containers
Créer un environnement Docker qui peut utiliser PyTorch et JupyterLab
Créez un environnement d'apprentissage automatique scikit-learn avec VirtualBox et Ubuntu
Créez un environnement de développement Go avec les conteneurs distants de VS Code
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créez un environnement GPU avec GCP et l'image officielle de Kaggle (docker)
Créez un environnement de développement Flask à faible coût avec Docker
Créer un environnement go à l'aide de Docker
Créer un fichier deb avec Docker
Construire un environnement Mysql + Python avec docker
Déployer l'application Django avec Docker
Créer une application Web avec Django
Reconstruisez l'environnement de développement de Django avec Docker! !! !! !!
Création de l'environnement de travail Docker R et Python 2: prise en charge du japonais
Créer et tester un environnement CI pour plusieurs versions de Python
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Créer un environnement de développement local pour Lambda + Python à l'aide de Serverless Framework
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm