티스토리 뷰

devOps/docker

[Docker-compose] [Django] [Mysql] [Dockerfile]

글을 쓰는 개발자 2021. 7. 17. 16:14
반응형

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

 

docker-compose로 django, mysql 개발환경 구축하기

안녕하세요 안진용입니다 이번 포스팅에서는 docker-compose를 이용한 django, mysql 개발환경 구축하기에 대해 알아보도록 하겠습니다 django에 mysql을 사용할 경우 개발환경 배포가 굉장히 어렵다는 단

docker-compose.tistory.com

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함