리눅스

도커 컨테이너로 PostgreSQL을 구성하는 방법

변군이글루 2025. 7. 15. 12:53
반응형

도커 컨테이너로 PostgreSQL을 구성하는 방법

컨테이너 작업 디렉토리 생성

mkdir -p /docker-container/docker-postgres
cd /docker-container/docker-postgres

docker-compose.yaml 생성

vim docker-compose.yaml
services:

  postgres:
    image: postgres:17.5
    container_name: postgres
    restart: unless-stopped
    environment:
      TZ: Asia/Seoul
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myuser -d mydatabase --quiet"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  postgres_data:
    name: postgres_data

컨테이너 실행

docker compose up -d

PostgreSQL 접속 예시

docker compose exec postgres psql -U myuser -d mydatabase
psql (17.5 (Debian 17.5-1.pgdg120+1))
Type "help" for help.

mydatabase=#
  • PostgreSQL 버전 확인
SELECT version();

-----------------------------------------------------------------------------------------------------
 PostgreSQL 17.5 (Debian 17.5-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
(1 row)

컨테이너 로그

docker compose logs -f postgres

컨테이너 중지 및 삭제

docker compose down
728x90

PostgreSQL 기본 사용법

사용자 및 데이터베이스 생성

CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE DATABASE mydatabase OWNER myuser;
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;

셸 종료

\q

PostgreSQL 컨테이너

  • DB 데이터 디렉토리를 로컬 디렉토리(./data)로 설정
  • 계정, 비밀번호, DB 이름 등 환경 변수는 .env 파일로 분리

컨테이너 작업 디렉토리 이동

cd /docker-container/docker-postgres

DB 데이터 디렉토리 생성

mkdir -p data

.env 파일 생성

vim .env
POSTGRES_DB=mydatabase
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword

docker-compose.yaml 편집

services:

  postgres:
    image: postgres:17.5
    container_name: postgres
    restart: unless-stopped
    env_file:
      - .env      
    environment:
      TZ: Asia/Seoul      
    volumes:
      - ./data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $POSTGRES_USER -d $POSTGRES_DB --quiet"]
      interval: 10s
      timeout: 5s
      retries: 5
더보기

---

로그 활성화

 

cd /docker-container/docker-postgres
vim docker-compose.yaml
services:

  postgres:
    image: postgres:17.5
    container_name: postgres
    restart: unless-stopped
    env_file:
      - .env      
    environment:
      TZ: Asia/Seoul
    command: postgres -c config_file=/etc/postgresql/postgresql.conf
    volumes:
      - ./data:/var/lib/postgresql/data
      - ./config/postgresql.conf:/etc/postgresql/postgresql.conf
      - ./config/pg_hba.conf:/etc/postgresql/pg_hba.conf
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $POSTGRES_USER -d $POSTGRES_DB --quiet"]
      interval: 10s
      timeout: 5s
      retries: 5
mkdir -p config data/log
vim config/postgresql.conf
# listen settings
listen_addresses = '0.0.0.0'

max_connections = 100
shared_buffers = 128MB
dynamic_shared_memory_type = posix
max_wal_size = 1GB
min_wal_size = 80MB
log_timezone = 'Asia/Seoul'
datestyle = 'iso, mdy'
timezone = 'Asia/Seoul'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'

# config/postgresql.conf
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
log_duration = on
log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '
vim config/pg_hba.conf
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    all             all             all                     scram-sha-256

---

컨테이너 실행

docker compose up -d

 

반응형