【DynamoDB】【Docker】docker-compose로 DynamoDB와 Django의 개발 환경을 구축한다
docker-compose로 DynamoDB와 Django 개발 환경 구축
소개
DynamoDB는 싸고 빠르고 좋네요. 그런 DynamoDB를 로컬로 개발하기 위한 DockerImage가 있다는 것을 아십니까? 그런 DockerImage를 이용한 개발 환경 구축의 일례를 조회합니다.
환경
프로덕션 환경에 맞게 사용하는 이미지 버전은 다음과 같습니다.
DynamoDB GUI 작업에 dynamodb-admin 을 사용합니다. Node는 그 환경을 함께 구축할 때에 이용합니다.
환경
버전
파이썬
3.7.4
MySQL
5.7
Node
10.16.3-알핀
환경 구축
장고와 MySQL
완전히 처음부터 빌드하므로 먼저 장고 프로젝트를 시작합니다.
공식 Django 이미지는 버전이 오래되었으므로 스스로 만듭니다.
$ 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.ymlversion: "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
포트가 50000대인 것은 절대 쓰고 싶지 않기 때문입니다. 특히 의미가 없습니다.
DynamoDB와 연결하기위한 라이브러리는 boto3과 그것을 Wrap하고있는 pynamodb를 넣어 둡니다.
requirements.txtboto3
pynamodb
Django==2.2.4
djangorestframework==3.10.3
django-filter
mysqlclient==1.3.13
환경 변수의 의미를 그다지 하지는 않지만 일단…
DB_ENGINE=django.db.backends.mysql
DB_HOST=mysql
DB_DATABASE=example
DB_USERNAME=root
DB_PASSWORD=example
DB_PORT=3306
우선 Django와 MySQL의 소통을 확인하고 싶으므로 Django의 DATABASES를 다시 씁니다.
setting.pyDATABASES = {
'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',
},
}
}
여기까지 오면 우선 기동할지 확인합니다.
$ docker-compose up -d
$ docker-compose exec django bash
$ python manage.py migrate
문제가 없으면 DynamoDB Local과 dynamodb-admin을 넣습니다.
DynamoDB 로컬
docker-compose.yml에 dynamodb를 나열합니다.
영구적으로 명령 끝에 dbPath를 지정합니다.
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
공식 이미지가 있었습니다만, 만들어 버렸으므로 그쪽을 이용합니다.
$ 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"]
환경 변수 DYNAMO_ENDPOINT
는 dynamodb의 컨테이너 서비스 이름과 컨테이너 측 포트를 지정합니다.
DYNAMO_ENDPOINT=http://dynamodb:8000
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=ACCESS_ID
AWS_SECRET_ACCESS_KEY=ACCESS_KEY
이 dyanamodb-admin을 추가한 최종 docker-compose.yml 파일은 다음과 같습니다.
docker-compose.ymlversion: "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
http://localhost:50727 를 브라우저로 표시해 이하와 같이 표시되고 있으면 성공입니다.
Create Table등 하고 싶은 무제한입니다.
지속성 확인
적당히 테이블을 만들어 보겠습니다.
만들어졌습니다.
컨테이너를 삭제하고 다시 시작합니다.
$ docker-compose down
$ docker-compose up -d
http://localhost:50727 을 열고 앞의 테이블이 남아 있으면 영속화 잘 하고 있습니다.
마지막으로
이 리포지토리는 아래에 게시됩니다. 향후 갱신할지도 모르기 때문에 tag는 1.0.0입니다.
htps : // 기주 b. 코 m / 코헤이 y0727 / 에어 mpぇ_dy 나모 db
그렇다면 사용하십시오.
Reference
이 문제에 관하여(【DynamoDB】【Docker】docker-compose로 DynamoDB와 Django의 개발 환경을 구축한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cohey0727/items/fca2cb99533475757747
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ 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"]
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
boto3
pynamodb
Django==2.2.4
djangorestframework==3.10.3
django-filter
mysqlclient==1.3.13
DB_ENGINE=django.db.backends.mysql
DB_HOST=mysql
DB_DATABASE=example
DB_USERNAME=root
DB_PASSWORD=example
DB_PORT=3306
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',
},
}
}
$ docker-compose up -d
$ docker-compose exec django bash
$ python manage.py migrate
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
$ 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"]
DYNAMO_ENDPOINT=http://dynamodb:8000
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=ACCESS_ID
AWS_SECRET_ACCESS_KEY=ACCESS_KEY
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
$ docker-compose down
$ docker-compose up -d
Reference
이 문제에 관하여(【DynamoDB】【Docker】docker-compose로 DynamoDB와 Django의 개발 환경을 구축한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cohey0727/items/fca2cb99533475757747텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)