Docker

PostgreSQL과 pgAdmin을 위한 Docker Compose 설정

_HelloWorld_ 2024. 12. 18. 17:33
기본적인 Docker & Docker-Compoes 설치 생략

Docker Compose 기본 설정

 

version: '3.8'

services:
  postgres:
    image: postgres:15
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data

  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: jhkim@docker.co.kr
      PGADMIN_DEFAULT_PASSWORD: 123456
    ports:
      - "5431:80"

volumes:
  postgres-data:

docker-compose.yml 파일을 사용하면 여러 서비스를 정의할 수 있습니다.

여기서는 postgres와 pgadmin 두 가지 서비스를 설정합니다.

 

1. PostgreSQL 서비스

먼저 postgres 서비스는 PostgreSQL 데이터베이스를 설정합니다. 주요 설정 사항은 다음과 같습니다:

  • 이미지: postgres:15 이미지를 사용합니다. 이는 PostgreSQL 15 버전의 공식 Docker 이미지입니다.
  • 컨테이너 이름: postgres로 설정하여 컨테이너 이름을 명확히 지정합니다.
  • 환경 변수: POSTGRES_USER와 POSTGRES_PASSWORD를 설정하여 데이터베이스의 기본 사용자와 비밀번호를 지정합니다.
  • 포트: 5432:5432로 설정하여 로컬에서 PostgreSQL에 접근할 수 있게 합니다. 기본적으로 PostgreSQL은 5432 포트를 사용합니다.
  • 볼륨: postgres-data라는 볼륨을 마운트하여 데이터베이스의 데이터를 컨테이너 외부에 저장합니다. 이 볼륨은 Docker Compose의 volumes 항목에서 정의됩니다.

2. pgAdmin 서비스

pgAdmin은 PostgreSQL 데이터베이스를 관리할 수 있는 웹 기반 도구입니다. 이 서비스는 다음과 같이 설정됩니다:

  • 이미지: dpage/pgadmin4 이미지를 사용하여 pgAdmin을 실행합니다.
  • 컨테이너 이름: pgadmin으로 설정합니다.
  • 환경 변수: PGADMIN_DEFAULT_EMAIL과 PGADMIN_DEFAULT_PASSWORD를 설정하여 pgAdmin의 기본 로그인 정보를 지정합니다.
  • 포트: 5431:80으로 설정하여 로컬에서 pgAdmin 웹 UI에 접근할 수 있도록 합니다. 포트 80은 pgAdmin이 기본적으로 사용하는 포트이며, 로컬에서는 5431로 접근할 수 있습니다.

3. Docker Volumes

  • postgres-data: PostgreSQL 데이터베이스의 데이터를 외부에서 지속적으로 저장하기 위해 볼륨을 사용합니다. 이 볼륨은 컨테이너를 재시작하거나 삭제해도 데이터가 유지됩니다.

 


실행 방법

  1. 위의 docker-compose.yml 파일을 작성합니다.
  2. 터미널에서 docker-compose up 명령을 실행하여 PostgreSQL과 pgAdmin 서비스를 시작합니다.
  3. pgAdmin은 localhost:5431에서 웹 브라우저를 통해 접근할 수 있습니다.
  4. pgAdmin에 로그인한 후, PostgreSQL 데이터베이스에 연결하고 SQL 쿼리 등을 실행할 수 있습니다.

멀쩡히 생성 되어 데이터베이스 서버까지 잘 만들어지는 모습


  1. Host name / address : 컨테이너 이름
  2. Port : 컨테이너 포트
  3. 데이터베이스 이름 
  4. Username : compose에 작성한 내용
  5. Password : compose에 작성한 내용