Django + MySQL 프로젝트 도커화
이 가이드에서는 하나의 Docker 컨테이너에서 Django 앱을 실행하고 다른 컨테이너에서 MySQL 데이터베이스를 실행하고 서로 통신하도록 하는 방법을 보여줍니다.
Docker Compose을 사용하여 이 두 컨테이너를 관리하고 실행할 것입니다.
👉 Django + Postgres 앱에서 이 작업을 수행하는 방법을 배우려면 this post을 읽으십시오.
로컬 데이터베이스를 사용하는 Django 프로젝트가 로컬에 이미 있고 프로젝트에
requirements.txt
파일이 있다고 가정합니다. 아직 하지 않았다면 install Docker on your machine 해야 합니다.바로 시작하겠습니다.
첫 번째 단계는 프로젝트의 루트에
Dockerfile
를 생성하는 것입니다(여기에 requirements.txt
및 manage.py
파일이 있음).FROM python:3.8
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
한 줄씩 살펴보겠습니다.
FROM python:3.8
는 Docker 이미지가 구축될 기본 이미지입니다. 이는 DockerHub에서 가져옵니다. ENV PYTHONUNBUFFERED 1
Django가 터미널에 쓰는 출력이 어딘가에 버퍼링되지 않고 실시간으로 나오도록 합니다. 이렇게 하면 Docker 로그가 유용하고 완전해집니다. WORKDIR /app
는 컨테이너 내에서 프로젝트의 루트가 될 app
라는 새 폴더를 컨테이너에 만듭니다. 그런 다음 후속 명령이 실행될 작업 디렉토리로 설정합니다. COPY requirements.txt /app/requirements.txt
로컬requirements.txt
파일을 Docker 컨테이너에 복사합니다. RUN pip install -r requirements.txt
는 컨테이너 내부에 모든 프로젝트 종속성이 설치되어 있는지 확인합니다. COPY . /app
마지막으로 프로젝트의 콘텐츠를 Docker 컨테이너에 복사할 차례입니다. 이제 로컬 프로젝트 루트에 새 파일을 만듭니다. 이것은
docker-compose.yml
라고 하며 Docker Compose를 구성하는 데 사용됩니다.version: '3'
services:
db:
image: mysql:8
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE='mydatabase'
- MYSQL_USER='root'
- MYSQL_PASSWORD='some_password'
- MYSQL_ROOT_PASSWORD='some_password'
- MYSQL_HOST=''
volumes:
- /tmp/app/mysqld:/var/run/mysqld
- ./db:/var/lib/mysql
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- .:/app
- /tmp/app/mysqld:/run/mysqld
depends_on:
- db
이것은 db와 web의 두 가지 서비스를 정의합니다.
db는 DockerHub의 공식 MySQL 이미지를 사용합니다. 이 컨테이너의 포트 3306에 로컬 포트 3306을 연결합니다. 그런 다음 MySQL에 필요한 여러 환경 변수를 설정합니다. Django 데이터베이스 설정에서도 이를 설정했는지 확인하십시오. (민감한 정보가 버전 제어에 커밋되지 않도록 이를
.env
파일에 넣을 수 있습니다. 자세한 방법은 here을 참조하십시오.)volume
두 개의 볼륨 매핑을 정의합니다.var/run/mysqld
내용을 시스템의 로컬 폴더에 매핑합니다. 이 파일에는 웹 서비스(Django 앱)가 데이터베이스 서비스와 통신할 수 있도록 하는 소켓 정보가 포함되어 있습니다. ./db:/var/lib/mysql
는 db 서비스를 제거하는 경우 데이터베이스 정보를 저장할 수 있도록 프로젝트 루트에 로컬db
폴더를 생성합니다. 웹은 이전에 만든
Dockerfile
를 사용하여 이미지를 빌드합니다. 그런 다음 Django 서버를 실행하고 컴퓨터에 포트 8000을 노출합니다. 로컬 프로젝트 폴더를 앱 폴더에 매핑하고 소켓 파일을 가져옵니다. 이 서비스가 db 서비스에 종속되어 있음을 Docker Compose에 알립니다.이제 우리가 해야 할 일은 모든 것을 시작하는 것입니다. 프로젝트 루트에서 다음을 실행합니다.
$ docker-compose up
그러면 이미지가 빌드되고 컨테이너가 시작됩니다. 브라우저를 열고
0.0.0.0:8000
로 이동합니다. 앱이 표시되어야 합니다. 이제 새 터미널을 열고 adocker ps
를 실행하면 웹 및 db 컨테이너가 실행 중인 것을 볼 수 있습니다.$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77a320233bf2 my_project_web "python manage.py ru…" 4 minutes ago Up 4 minutes 0.0.0.0:8000->8000/tcp my_project_web_1
66324c20d91e mysql:8 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp my_project_db_1
Docker Compose를 중지하려면 첫 번째 터미널에서 Ctrl+C를 누르거나 다른 터미널의 프로젝트 루트 폴더에서 실행
docker-compose stop
하십시오.Django 컨테이너(웹)에서
manage.py
명령을 실행하려면:$ docker-compose run --rm web python manage.py migrate
Reference
이 문제에 관하여(Django + MySQL 프로젝트 도커화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/foadlind/dockerizing-a-django-mysql-project-g4m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)