Vue.js와 Django-Rest-Framework에서 신경 쇠약 앱을 만들어 보자 [그 4] ~ Docker로 MySQL 구축 및 DB 마이그레이션 편 ~
Docker로 MySQL 컨테이너 만들기
프로젝트 바로 아래에 docker 폴더를 만들고 바로 아래에 db_data 폴더 (다른 이름으로도 좋습니다)와 docker-compose.yml을 만듭니다.
concentratio # プロジェクトルートディレクトリ
├── config
│ └── ...
│
├── docker
│ ├── db_data # データ永続化用
│ └── docker-compose.yml
└── ...
docker/docker-compose.ymlversion: '2'
services:
db:
image: mariadb:latest
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
environment:
- MYSQL_ROOT_USER=root
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=concentratio
- MYSQL_USER=user
- MYSQL_PASSWORD=user
volumes:
- db_data:/var/lib/mysql # db_dataフォルダの名前を変更している場合は、変更後のフォルダ名で書き換える
- ./db_data:/docker-entrypoint-initdb.d # db_dataフォルダの名前を変更している場合は、変更後のフォルダ名で書き換える
- ./db_data:/etc/mysql/conf.d # db_dataフォルダの名前を変更している場合は、変更後のフォルダ名で書き換える
ports:
- '3333:3306'
volumes:
db_data:
driver: local
db_data 폴더를/docker-entrypoint-initdb.d에 마운트하고 있으므로 db_data 폴더에 임의의 SQL 파일을 두면 컨테이너 시작시(초기 시작 시?)에 해당 SQL 파일을 실행해 줍니다. .
docker 컨테이너 시작
cd 명령으로 docker
디렉토리로 이동한 후 docker-compose up -d
에서 MySQL 컨테이너 시작.
docker$ docker-compose up -d
Creating docker_db_1 ... done
그건 그렇고
정지는 docker-compose stop
(또는 docker stop コンテナID or コンテナ名
)
삭제는 docker-copose down -v
(또는 docker rm コンテナID or コンテナ名
)
MySQL 컨테이너가 시작되었는지 확인
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03dd318a2ad7 mariadb:latest "docker-entrypoint.s…" 29 seconds ago Up 29 seconds 0.0.0.0:3333->3306/tcp docker_db_1
MySQL workbench로 연결해보기
연결할 수있는 것 같습니다.
DB 마이그레이션
mysqlclient와 django-environ을 pip 설치
pip3 install django-environ mysqlclient
.env 파일 만들기
concentratio # プロジェクトルートディレクトリ
├── config
│ └── ...
│
├── docker
│ └── ...
│
├──.env
│
└── ...
env.defaultDEBUG=True
DATABASE_URL=mysql://user:[email protected]:3333/concentratio
settings.py 수정
config/settings.py.
..
...
import environ # 追加(django-environをインポート)
.
..
...
# 追加
ENV_FILE = os.path.join(BASE_DIR, '.env') # .envファイルのパス
ENV = environ.Env()
ENV.read_env(ENV_FILE) # django-environで.envファイルを読み込む
...
..
.
# 追加
DATABASES = {
'default': ENV.db()
}
DATABASES['default']['ATOMIC_REQUESTS'] = True # ATOMIC_REQUESTSをTrueにするとview全体がトランザクションになる(viewの処理中に例外が発生した場合、それまでのDB操作がロールバックされる)。
...
..
.
DB 마이그레이션
python3 manage.py makemigrations
python3 manage.py migrate
migrate 명령은 여러 가지 OK가 나오면 괜찮습니다.
$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
다시 MySQL workbench로 확인
장고 관리 테이블이 작성되었습니다.
DB 마이그레이션 완료입니다.
수퍼유저 만들기
python3 manage.py createsuperuser
에서 수퍼 유저를 만들 수 있습니다.
$ python3 manage.py createsuperuser
Username : admin # 適当に設定(今回はadminとする)
Email address: [email protected] # 適当に設定(今回は[email protected]とする)
Password: # 適当に設定(今回はadminとする)
Password (again): # 適当に設定(今回はadminとする)
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y # パスワードが簡単だよって警告が出てますが、構わず「y」
Superuser created successfully.
사용자가 생성되었습니다.
이상.
<< 그 3
Reference
이 문제에 관하여(Vue.js와 Django-Rest-Framework에서 신경 쇠약 앱을 만들어 보자 [그 4] ~ Docker로 MySQL 구축 및 DB 마이그레이션 편 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Butterthon/items/535f961aed0b3c3c6d98
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
concentratio # プロジェクトルートディレクトリ
├── config
│ └── ...
│
├── docker
│ ├── db_data # データ永続化用
│ └── docker-compose.yml
└── ...
version: '2'
services:
db:
image: mariadb:latest
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
environment:
- MYSQL_ROOT_USER=root
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=concentratio
- MYSQL_USER=user
- MYSQL_PASSWORD=user
volumes:
- db_data:/var/lib/mysql # db_dataフォルダの名前を変更している場合は、変更後のフォルダ名で書き換える
- ./db_data:/docker-entrypoint-initdb.d # db_dataフォルダの名前を変更している場合は、変更後のフォルダ名で書き換える
- ./db_data:/etc/mysql/conf.d # db_dataフォルダの名前を変更している場合は、変更後のフォルダ名で書き換える
ports:
- '3333:3306'
volumes:
db_data:
driver: local
docker$ docker-compose up -d
Creating docker_db_1 ... done
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03dd318a2ad7 mariadb:latest "docker-entrypoint.s…" 29 seconds ago Up 29 seconds 0.0.0.0:3333->3306/tcp docker_db_1
mysqlclient와 django-environ을 pip 설치
pip3 install django-environ mysqlclient
.env 파일 만들기
concentratio # プロジェクトルートディレクトリ
├── config
│ └── ...
│
├── docker
│ └── ...
│
├──.env
│
└── ...
env.default
DEBUG=True
DATABASE_URL=mysql://user:[email protected]:3333/concentratio
settings.py 수정
config/settings.py
.
..
...
import environ # 追加(django-environをインポート)
.
..
...
# 追加
ENV_FILE = os.path.join(BASE_DIR, '.env') # .envファイルのパス
ENV = environ.Env()
ENV.read_env(ENV_FILE) # django-environで.envファイルを読み込む
...
..
.
# 追加
DATABASES = {
'default': ENV.db()
}
DATABASES['default']['ATOMIC_REQUESTS'] = True # ATOMIC_REQUESTSをTrueにするとview全体がトランザクションになる(viewの処理中に例外が発生した場合、それまでのDB操作がロールバックされる)。
...
..
.
DB 마이그레이션
python3 manage.py makemigrations
python3 manage.py migrate
migrate 명령은 여러 가지 OK가 나오면 괜찮습니다.
$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
다시 MySQL workbench로 확인
장고 관리 테이블이 작성되었습니다.
DB 마이그레이션 완료입니다.
수퍼유저 만들기
python3 manage.py createsuperuser
에서 수퍼 유저를 만들 수 있습니다.$ python3 manage.py createsuperuser
Username : admin # 適当に設定(今回はadminとする)
Email address: [email protected] # 適当に設定(今回は[email protected]とする)
Password: # 適当に設定(今回はadminとする)
Password (again): # 適当に設定(今回はadminとする)
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y # パスワードが簡単だよって警告が出てますが、構わず「y」
Superuser created successfully.
사용자가 생성되었습니다.
이상.
<< 그 3
Reference
이 문제에 관하여(Vue.js와 Django-Rest-Framework에서 신경 쇠약 앱을 만들어 보자 [그 4] ~ Docker로 MySQL 구축 및 DB 마이그레이션 편 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Butterthon/items/535f961aed0b3c3c6d98텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)