PostgreSQL Docker 실행 및 초기 세팅

realBro·2023년 11월 11일
0

Docker 사용

  • PostgreSQL 세팅을 위해 Docker를 사용하면 편하다.
  • Dockerfile로 해도되지만 compose파일로 하면 좀 더 편하기 때문에 compose 파일로 세팅
# docker-compose.yml
version: '3'
services:
  postgres:
    image: postgres:14
    container_name: postgres-server
    environment:
      POSTGRES_PASSWORD: password
    volumes:
      - ./init/:/docker-entrypoint-initdb.d/
      - ./data/:/data/
    ports:
      - "5432:5432"
    networks:
      - docker-network

networks:
  docker-network:
    external: true

이미지

  • image는 14를 계속 쓰고 있어서 14이미지 사용, 현재 16까지 나왔으므로 latest로 하면 16으로 설정이 될 것이다.

Port

  • port에 {host}:{docker} 이렇게 설정하면 되는데, 만약 5432를 지금 사용중이라면 5430:5432 이런식으로 설정 가능

docker network

docker network create docker-network
  • port를 바인딩 시켜놨기 때문에 host pc(docker를 띄운 개인 pc)에서는 localhost:5432로 접속이 가능하지만 다른 docker에서는 불가능하다.
  • 하나의 docker-compose파일로 띄우게 된다면 자동으로 폴더명으로 default network가 생성이되지만 그외의 경우 다른 docker file과 통신을 하려면 network를 생성하고 같은 네트워크에 docker를 설정 해야함
  • 네트워크 및 external: true설정을 해주면 다른 docker에서 postgresql에 접근할때 localhost:5432가 아닌 postgres:5432로 접근이 가능해진다.

그외 설정

  • container_name은 해당 파일로 하나만 띄울예정이면 설정하는게 편함
  • 비밀번호는 root 계정의 비밀번호

실행 시 기본 세팅 하는 법

  • volume 설정으로 원하는 sql들을 미리 작성 후 컨테이너로 바인딩 될 수 있도록 설정

    • ./init/:/docker-entrypoint-initdb.d/
  • init파일 바인딩 되고 docker 컨테이너 실행과 동시에 docker-entrypoint-initdb.d이하의 sql파일들이 이름순으로 순차적으로 실행된다.

  • 하나의 파일로도 가능하지만 의미적으로 다른 부분은 분리를 함.

  • 초기 데이터로 csv를 가지고 있어서, user생성 및 권한 설정, table 생성, data copy 세가지 파일로 분리해서 순차적으로 진행 되도록 설정

  • 파일 명 앞을 숫자로 해놓으면 이름 순으로 실행되기 때문에 순서 정하기가 좋다!

  • csv copy

    COPY target_schema.target_table(cols...)
    FROM '/data/target.csv'
    DELIMITER ','
    CSV HEADER;
    • 필요한 데이터들을 data폴더에 넣고 volume 바인딩을 통해 사용함
  • 바인딩이 아니라 카피로 해도 문제 없을듯.

0개의 댓글