Cloud/Docker

docker compose을 이용하여 django, postgres 연결하기

jheaon 2024. 7. 25. 12:01

 

일단 해당 작업을 하기 전에 현재 나의 폴더 구성을 보여주자면 아래와 같이 되어 있다.  backend 폴더는 django 프로젝트로 되어 있고 이를 이미지로 빌드하기 위해서 backend안에 Dockerfile 생성하여 만들었다. 

 

 

🐳 Dockerfile

FROM python:3.9

WORKDIR /app

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]

 

📄 requirements.txt  

 

...
...
...
psycopg2

 

여기서 psycopg2 라이브러리는 python에서 postgreSQL을 사용하기 위한 어뎁터 라이브러리이다. 중요한 건 현재 psycopg2 라이브러리가 python 버전이 3.6 ~ 3.9까지 밖에 지원하지 않기 때문에 그 밖의 파이썬 버전을 사용하게 되면 psycopg2 라이브러리가 설치되지 않는다. 

 

따라서 도커 이미지를 만들 때도 python 3.9 버전을 기반으로 빌드하여 작업을 진행했다.

 

다음은 docker compose을 이용하여 두 개의 컨테이너를 만들고,  django settings.py 에 데이터베이스 설정을 해준다. 아래는 해당 내용의 코드이다.

 

🐳 docker-compose.yaml

version: "3.9"
services:
  db:
    image: postgres
    ports:
      - "5432"
    volumes:
      - ./data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres

  backend:
    build: backend/.
    ports:
      - "8000:8000"
    volumes:
      - ./backend:/app
    depends_on:
      - db

 

🖥️ settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

 

postgres 이미지를 사용하기 위해서 환경변수로 지정해야 되는 것들이 있는데, 어떤 것을 지정해야 할지 모르겠다면 docker에 있는 postgres을 참고하자.

 

참조 : https://hub.docker.com/_/postgres

 

postgres - Official Image | Docker Hub

Note: the description for this image is longer than the Hub length limit of 25000, so has been trimmed. The full description can be found at https://github.com/docker-library/docs/tree/master/postgres/README.md. See also docker/hub-feedback#238 and docker/

hub.docker.com

 

컨테이너 파기 시 데이터가 모두 날아가게 되는데 이를 방지하기 위해서 따로 볼륨을 설정하여 데이터를 저장한다. 나 같은 경우에는 docker-compose.yaml와 같은 위치 선상에 data라는 폴더를 만들어 둔 뒤,./data:/var/lib/postgresql/data로 연결하여 컨테이너가 파기되어도, data폴더에 내용이 남아 있도록 했다. 

 

 

'Cloud/Docker'의 다른글

  • 현재글 docker compose을 이용하여 django, postgres 연결하기

관련글