티스토리 뷰
Django+Mysql를 Docker-Compose하기 & 로컬로 테스트
이 글은 공부한 내용을 정리한 글이므로 잘못된 지식이나 오역이 있을 수 있습니다. 감안하시고 보시길 바랍니다.
1. Django Setting
1. 기본적인 세팅(가상환경 세팅, requirements.txt 생성, project 및 app 생성)
자세한 내용은 깃허브 주소를 마지막 하단에 올릴 예정이니 참고 부탁드립니다.
settings.py - DATABASES 부분
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',
'USER': 'django',
'PASSWORD': 'django',
'HOST': 'db', # 추후에 docker-compose에서 이야기 하겠습니다.
'PORT': '3306'
}
}
Dockerfile
FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN apt-get -y update
RUN apt-get -y install vim
RUN mkdir /srv/code
ADD . /srv/code
WORKDIR /srv/code
ADD requirements.txt /srv/code/
RUN python3 -m pip install --upgrade pip
RUN pip install -r requirements.txt
파이썬 이미지를 기본으로 세팅해놓고
사전에 update 및 파일 편집할 때 쓰일 vim 설치
컨테이너 안에 작업할 폴더 생성 하고
현재 장고파일을 컨테이너 폴더에 복사
작업공간 설정
설치할 라이브러리 설치
docker-compose.yml
version: "3"
services:
db:
image: mysql
container_name: main.mysql
restart: always
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: "0000"
MYSQL_DATABASE: "django"
MYSQL_USER: "django"
MYSQL_PASSWORD: "django"
ports:
- "7001:3306"
web:
build: ./config
container_name: main.django
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./config:/srv/code
ports:
- "7000:8000"
depends_on:
- db
--default-authentication-plugin=mysql_native_password
이 커멘드 라인을 적어준 이유는 오류 중에 비밀번호 플러그인이 다른 것으로 설정되어 있어서 다음과 같이 미리 설정하였다.
environment 부분에서 비밀번호나 유저 이름 같은 것은 독자가 원하는 이름으로 해도 된다. 다만 django의 settings.py과 일치 시켜주기만 하면 된다.
여기서 django 의 settings.py 에 DATABASES의 HOST부분이 왜 'db'로 되어 있느냐 하면 docker-compose 관계에서 컨테이너 db를 쓸 수 있기 때문이다.
web에서 유의할 점
build: 장고 프로젝트의 위치를 표현하면 된다.
ports: 클라이언트가 접속할 포트: 컨테이너에서 내보내는 포트
depends_on: mysql이 먼저 설치되고 django가 깔려야 하므로 depends_on 설정하기
그리고 나서
docker-compose up -d
그리고 나서
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe613bb79155 dockerdjango_web "python manage.py ru…" 4 seconds ago Up 4 seconds 0.0.0.0:7000->8000/tcp main.django
bf967a7974dc mysql "docker-entrypoint.s…" 4 seconds ago Up 4 seconds 33060/tcp, 0.0.0.0:7001->3306/tcp main.mysql
위와 같은 형태로 뜰 것이다.
아직 해결 하지 못한 부분이지만 지금은 수동으로 하고 있는 부분이 있는데 migrate 부분이다.
우선 그 방법을 설명해보겠습니다.
수동으로 migrate 하기
docker exec -it main.django /bin/bash
root@fe613bb79155:/srv/code#
root@fe613bb79155:/srv/code# ls
Dockerfile config manage.py memo requirements.txt templates uwsgi.ini venv
root@fe613bb79155:/srv/code# python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, memo, sessions, sites
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 auth.0012_alter_user_first_name_max_length... OK
Applying memo.0001_initial... OK
Applying sessions.0001_initial... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
root@fe613bb79155:/srv/code# python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
July 17, 2021 - 07:08:33
Django version 3.2.5, using settings 'config.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
위의 사진들을 보면 정상적으로 작동되는 것을 볼 수 있다.
참고로 mysql 상태를 확인하고 싶으면 다음과 같이 커멘드 라인을 작성해보자
mysql -h 127.0.0.1 -P 7001 -u root -p
호스트, 포트번호 순서대로 작성하면 된다.
참고: https://docker-compose.tistory.com/1
'devOps > docker' 카테고리의 다른 글
[DOCKER] volume 에 대하여 (0) | 2021.11.21 |
---|---|
[docker] cannot kill docker container - permission denied (0) | 2021.09.02 |
[docker][django][react][nginx]net::ERR_ABORTED 404 (Not Found) 에러 (0) | 2021.07.29 |
docker-compose 시 env 파일 처리 및 dockerignore 방법 (0) | 2021.07.21 |
- Total
- Today
- Yesterday
- thread
- docker-compose
- Command Line
- django
- 카카오
- env
- ubuntu
- Collections
- 백준
- headers
- 알고리즘
- docker
- Java
- DRF
- 자바
- 프로그래머스
- Linux
- Spring
- dockerignore
- PostgreSQL
- BFS
- 면접
- 2021 KAKAO BLIND RECRUITMENT
- setattr
- Pattern
- 그래프
- 파이썬
- postgres
- Celery
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |