프로젝트 컴포넌트 정의
프로젝트를 시작하기위해 Dockerfile
, python dependencies파일
, docker-compoes.yml
파일이 필요하다.
Dockerfile
먼저, 디렉토리에 Dockerfile
을 생성한다.
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code # 작업 디렉토리를 code로 변경
COPY . . # 현재 디렉터리의 모든 파일 이미지를 작업 디렉터리로 복사
RUN pip install -r requirements.txt
COPY . /code/
이 도커 파일은 파이썬3 Parent 이미지를 시작한다. 부모 이미지는 src
라는 새로운 디렉토리를 추가하고, requirements.txt
를 설치한다.
docker-compose.yml
다음은 docker-compose.yml
파일을 생성한다. 이 파일은 어떤 웹서버와 데이터베이스를 사용할건지 등등 우리가 만들 앱의 서비스를 설명한다.
또한, 이 서비스에 사용될 도커 이미지들과 이것들을 연결하는 방법, 컨터이너 내부에 마운트해야할 볼륨, 노출될 포트 등을 설명한다.
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
위와 같이 파일을 작성한 후 닫는다.
db 서비스와 web 서비스를 만드는데 web서비스가 돌아가기전에 db서비스가 먼저 돌아갈 수 있도록 depends_on
을 설정한다.
장고 프로젝트 생성
이제 루트 페이지로 가서 docker-compose run을 한다.
sudo docker-compose run web django-admin startproject myproject .
django-admin 명령어를 실행해서 myproject 라는 프로젝트를 생성한다.
이 명령어를 실행하면 myproject 디렉터리에 django 프로젝트가 생성된다.
ls -l
docker-compose 내용을 확인한다.
DB 연결
# settings.py
import os
[...]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('POSTGRES_NAME'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': 'db',
'PORT': 5432,
}
}
settings.py에 들어가서 DATABASES에 관한 정보를 수정한다.
Run docker-compose up
docker-compose up을 하면 아래와 같이 localhost 8000번 포트에서 장고를 시작페이지를 확인할 수 있다.
docker-compose up
ctrl-c를 하거나
docker-compose down
을 통해 실행을 종료할 수 있다.
reference
'공부기록 > Data Engineering' 카테고리의 다른 글
[opensearch | elasticsearch] maximum shards open 문제 (0) | 2023.05.25 |
---|---|
[elasticsearch] elasticsearch 10000개 이상 데이터 조회 python (0) | 2022.06.15 |
[PostgreSQL] macOS에 PostgreSQL 설치 및 설정 (2) | 2022.05.01 |
[ELK] elastic stack 이란 / 개념 / 구성 요소 / 용도 (0) | 2022.04.23 |
[neo4j] variables 변수 이해하기 (0) | 2021.06.05 |