
도커에서 직접 컨테이너를 생성하는 것이 아니라
docker-compose.yml 파일을 만든 다음 실행시키면 도커가 알아서 컨테이너를 만들어준다.
docker-compose.yml 파일 만들기프로젝트 루트 폴더에 docker-compose.yml를 작성한다.
version: '3.8'
services:
db:
image: postgres:16
container_name: fintrack-db
restart: always
ports:
- "5434:5432"
environment:
POSTGRES_USER: ***
POSTGRES_PASSWORD: ***
POSTGRES_DB: fintrack_db
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
이 파일이 있는 폴더에서 터미널을 열고
docker-compose up -d 을 입력한다.
up : 서비스 실행-d : 백그라운드(detached) 모드로 실행위의 docker-compose up -d 명령어를 실행하면 도커가 다음과 같은 일을 자동으로 실행한다.
| 단계 | 설명 |
|---|---|
| ① | postgres:16 이미지를 Docker Hub에서 다운로드 (한 번만) |
| ② | fintrack-db라는 이름의 컨테이너 생성 |
| ③ | 5434 포트 열어서 외부 접속 허용 |
| ④ | 환경변수(POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB)로 DB 초기화 |
| ⑤ | pgdata 볼륨에 데이터 저장 (지워도 유지됨) |
나는 다른 프로젝트에서 5433번 포트를 이용하고 있기 때문에 외부 접속 포트를 5434로 지정했다.

터미널에서 docker ps 명령어를 입력하면 실행 중인 컨테이너를 확인할 수 있다.
위와 같이 잘 실행되고 있음을 확인할 수 있다.
DB에 직접 접속하고 싶다면
docker exec -it fintrack-db psql -U fintrack -d fintrack_db
를 입력하면 된다.
그럼 이렇게 데이터베이스로 들어갈 수 있다.
| 부분 | 의미 |
|---|---|
docker exec -it fintrack-db | 이름이 fintrack-db인 컨테이너 안에서 명령어를 실행하겠다는 뜻 |
psql | PostgreSQL의 클라이언트(접속 프로그램) |
-U fintrack | PostgreSQL 접속 사용자 이름 (POSTGRES_USER) |
-d fintrack_db | 접속할 데이터베이스 이름 (POSTGRES_DB) |
1단계. 컨테이너 실행
docker-compose up -d

2단계. 컨테이너 내부 접속 (bash 진입)
docker exec -it fintrack-db bash

컨테이너 안으로 들어와 프롬프트가 root@컨테이너ID:/# 형태로 바뀐다.
exit 명령어를 이용한다.exit 명령어로 컨네이터에서 빠져나오면 동시에 컨테이너도 종료된다는 것이다. exit를 이용하면 서비스가 종료될 수 있으니 주의해야 한다.Ctrl + P, Q를 입력해야 한다.start 명령어를 사용하고, 실행중인 컨테이너에 진입할 때에는 attach 명령어를 사용한다.3단계. PostgreSQL 접속
psql -U fintrack -d fintrack_db
처음 실행하면 비밀번호를 입력하라고 한다.
4단계. DB 내부 확인
성공적으로 들어오면
psql (16.0)
Type "help" for help.
fintrack_db=#
다음과 같이 뜬다.
이제
\l -- 전체 데이터베이스 목록 보기
\dt -- 현재 DB 내의 테이블 목록 보기
\du -- 유저 목록 보기
\q -- 종료
등의 sql 명령어를 입력할 수 있다.

5단계. 컨테이너 밖에서 바로 접속 (선택)
만약 컨테이너 안 들어가지 않고 바로 접속하고 싶다면,
로컬 터미널에서 psql -h localhost -p 5434 -U fintrack -d fintrack_db 라고 해도 된다.