리눅스
도커 컨테이너로 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
반응형