일단 해당 작업을 하기 전에 현재 나의 폴더 구성을 보여주자면 아래와 같이 되어 있다. 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' 카테고리의 다른 글
도커 허브에 push, pull을 이용하여 도커 이미지 버전 관리하기 (1) | 2024.06.12 |
---|---|
docker compose로 django, nginx 연결하기 (0) | 2023.08.24 |
docker compose로 컨테이너 관리하기 (0) | 2023.08.19 |
맥 M1, M2 에서 linux/amd64로 docker 빌드하기 (0) | 2023.08.18 |
도커 컨테이너에 접속하여 파일 수정하기 (0) | 2023.08.18 |