[PostgreSQL] Docker 컨테이너 생성

TNFUDS·2025년 11월 2일

FinTrack 프로젝트

목록 보기
1/14
post-thumbnail

도커에서 직접 컨테이너를 생성하는 것이 아니라
docker-compose.yml 파일을 만든 다음 실행시키면 도커가 알아서 컨테이너를 만들어준다.

1단계: 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:

2단계: Docker 실행 명령어

이 파일이 있는 폴더에서 터미널을 열고
docker-compose up -d 을 입력한다.

  • up : 서비스 실행
  • -d : 백그라운드(detached) 모드로 실행

3단계: Docker가 자동으로 하는 일

위의 docker-compose up -d 명령어를 실행하면 도커가 다음과 같은 일을 자동으로 실행한다.

단계설명
postgres:16 이미지를 Docker Hub에서 다운로드 (한 번만)
fintrack-db라는 이름의 컨테이너 생성
5434 포트 열어서 외부 접속 허용
환경변수(POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB)로 DB 초기화
pgdata 볼륨에 데이터 저장 (지워도 유지됨)

나는 다른 프로젝트에서 5433번 포트를 이용하고 있기 때문에 외부 접속 포트를 5434로 지정했다.


결과

터미널에서 docker ps 명령어를 입력하면 실행 중인 컨테이너를 확인할 수 있다.

위와 같이 잘 실행되고 있음을 확인할 수 있다.

PostgreSQL 접속

DB에 직접 접속하고 싶다면
docker exec -it fintrack-db psql -U fintrack -d fintrack_db
를 입력하면 된다.

그럼 이렇게 데이터베이스로 들어갈 수 있다.

명령어 설명

부분의미
docker exec -it fintrack-db이름이 fintrack-db컨테이너 안에서 명령어를 실행하겠다는 뜻
psqlPostgreSQL의 클라이언트(접속 프로그램)
-U fintrackPostgreSQL 접속 사용자 이름 (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 라고 해도 된다.

profile
내 세상을 넓혀가는 중

0개의 댓글