
Django-Docker-Postgres폴더를 만들고, 가상환경 실행 후 실습 진행했다.
django-admin startproject myproject . 명령어로 새 장고실습파일 만들고 진행.
# python 3.9 이미지를 Dockerhub에서 가져온다.
FROM python:3.9
# app이라는 폴더를 컨테이너 안에다가 만들고, 거기로 이동해 줘.
WORKDIR /app
# requirements.txt를 app 폴더 안으로 옮겨줘.
COPY requirements.txt .
# pip install해서 requirements.txt를 설치
RUN pip install --no-cache-dir -r requirements.txt
# 지금 django-docker-postgres 폴더를 컨테이너의 app 폴더로 복사시켜줘.
COPY . .
# python manage.py runserver할 건데, 8000번 포트에 대한 외부 접속을 허용할 거야.
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
version: '3.9'
services: # 내가 띄울 컨테이너 목록
db: # db라는 이름을 가진 컨테이너
image: postgres:13 # postgres 13 버전 이미지를 가져올 거야.
environment: # db 컨테이너의 환경변수
POSTGRES_DB: mydb # 데이터베이스 이름
POSTGRES_USER: myuser # 데이터베이스 소유자(만든 사람)의 ID
POSTGRES_PASSWORD: mypassword # 소유자의 비밀 번호
ports: # 포트포워딩 할거야. (들어온 포트랑 나가는 포트랑 연결한다.)
- "5432:5432" # 5432로 외부에서 접속하면, 컨테이너 안의 5432 포트로 연결해 줘.
volumes: # 컨테이너의 볼륨(하드디스크) 경로를 설정해준다.
- postgres_data:/var/lib/postgresql/data # 이건 정해져 있는 값임
# 다른 컨테이너
web: # web이라는 이름을 가진 컨테이너
build: . # 지금 docker-compose가 있는 경로를 docker build해서 이미지 만들어라.
# command: python manage.py runserver 0.0.0.0:8000 # Dockerfile의 CMD와 동일 Dockerfile에서 CMD 정의했기에 주석처리함
volumes: # web 컨테이너의 볼륨 설정
- .:/app # 지금 docker-compose.yml이 있는 경로는 컨테이너의 app 폴더랑 같다.
ports:
- "8000:8000"
depends_on: # web 컨테이너는 의존해야 한다. 어디에?
- db # db 컨테이너에
volumes: # volum 이름 짓기
postgres_data: # 볼륨 이름
docker-compose build
docker-compose up
compose up한 후 기존 터미널이 아닌 새 터미널에 띄어서 진행
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'db', # Docker Compose에서 정의한 서비스 이름
'PORT': '5432',
}
}

세팅 맞추고 진행
docker-compose exec web python manage.py migrate
마이그레이션 후 DBeaver
새 데이터베이스 연결

PostgreSQL 찾아서 username과 password를 setting에 맞게 설정 후 왼쪽 하단의 Test Connection 클릭


이런식으로 연결을 할 수 있었다.,~!