[PostgreSQL] Mac에 Docker로 PostgreSQL 설치 및 기본 설정하기

    설치 환경

    • Host PC: Apple Silicon(M1 Pro) MacOS
    • Docker Desktop & CLI
    • DB Image: PostgreSQL 14.6
    • DB Client: DBeaver

    DB와 관련해서 이것 저것 테스트할 게 많은데, 운영중인 DB 서버에다가 직접 테스트 하기는 혹시 모를 에러나 사고가 염려되기도 해서 결국 맥북에 PostgreSQL을 설치하기로 했다.

    일단 목표는 Docker로 PostgreSQL을 설치해서 실제 DB 서버에서 백업한 파일을 복구, 안전하고 가볍게 테스트할 수 있는 환경을 구성하는 것이다.

    참고로 Docker는 설치되어 있다고 가정한다.

    2023.04.08 - [본업/Docker] - [Docker] 맥에 Docker Desktop 설치 - #1 설치까지만

     

    [Docker] 맥에 Docker Desktop 설치 - #1 설치까지만

    지금까지는 회사나 개발 워크스테이션이 모두 Linux 기반이었기 때문에 Docker를 사용할 일이 있다면 터미널을 통한 CLI 환경에서 작업해왔다. 그런데, 문득 당장 내 개인 랩탑에서 Docker를 사용할

    conceptbug.tistory.com

     

    Prepare the Image and Volume

    나는 DB 서버에 설치된 버전과 정확하게 일치하는 14.6버전이 필요하다.

    Docker Desktop에서 바로 다운로드 받으려고 했더니만, 14버전은 목록에 없었다.

    그래서 필요한 버전의 이미지를 직접 다운로드 받았다.

    docker pull postgres:14.6

    이미지가 준비되었으니 하는 김에 볼륨도 만들어 놓는다.

    Docker Desktop을 통해 생성해도 되고 아니면 명령어를 입력해도 된다.

    docker volume create pgdata

     

    Run a Container

    docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 54321:5432 -v pgdata:/var/lib/postgresql/data -d postgres:14.6
    • --name my-postgres : 컨테이너 이름을 지정.
    • -e POSTGRES_PASSWORD : DB서버 패스워드를 입력(환경 변수). Docker Hub 페이지를 보면 더 많은 환경 변수를 입력할 수 있음. POSTGRES_PASSWORD는 필수 입력 사항이고 나머지는 다 옵션임.
    • -p 54321:5432 : 호스트 PC와 컨테이너 내부 PostgreSQL의 포트를 바인딩. 보통은 5432:5432를 입력할텐데, 나는 혹시 2개 이상의 컨테이너를 생성할 수 있어서 54321로 지정함. 두 번째 컨테이너는 54322, 세 번째 컨테이너는 54323 이런 식으로 구분하려고.
    • -v pgdata:/var/lib/postgres/data : 생성해준 볼륨을 pgdata에 바인딩. 보통 /var/lib/postgresql/data 이 경로를 데이터가 저장되는 곳이라고 pgdata라 부름.
    • -d postgres:14.6 : 백그라운드에서 postgresql:14.6 이미지를 사용해 컨테이너를 실행.

     

    Configure the PostgreSQL Server

    보통 PostgreSQL 설치 이후 서버 설정과 클라이언트 인증 설정 등을 진행한다.

    다들 자주 구성하는 파일 중 postgresql.conf와 pg_hba.conf 파일을 열어보니 이미 일부 설정이 되어 있었다.

    가장 많이 변경하는 옵션중 하나가 listen_address일텐데, 해당 옵션의 디폴트 값은 localhost이지만 이미 '*'로 설정되어 있었다.

    아마 도커에서 구동할 이미지다 보니까 이와 같이 설정했지 않았나 싶다.

    이를 통해 미루어 보았을 때, 당연히 다른 옵션들도 일부 변경되어 있을거라 생각되며 각자 필요한 파라미터를 잘 찾아서 바꿔야 할 것이다.

     

    컨테이너 내부에 존재하는 설정 파일에 접근하고 값을 변경하는 방법에는 크게 2가지 방법이 있을 것이다.

    CLI를 이용하거나, 아니면 GUI가 잘 구성된 애플리케이션을 이용하거나.

     

    먼저 애플리케이션은 당연히 Docker Desktop을 말하는 것이고, 아래와 같이 접속하면 컨테이너 내부 파일 시스템에 아주 편리하게 접근할 수 있다.

    컨테이너 이름을 클릭, 그리고 Files 탭을 클릭.

    아니면 우측 Actions의 More 버튼 클릭 후 View Files 클릭.

    그러면 위와 같이 파일 시스템을 자유롭게 이동 가능하다.

     

    CLI상에서도 docker exec 명령어를 사용하면 컨테이너의 bash 명령어를 그대로 이용할 수 있다.

    docker exec -it [CONTAINER_NAME] /bin/bash

    여기서 vim을 쓰던 nano를 쓰던 해서 파일을 수정할 수 있다.

    지금처럼 자기 개인 PC나 회사 PC로 간단한 테스트를 하기 위한 용도라면 GUI 환경을 이용하는게 훨씬 편리하고 빠르다.

    다만, 서버 환경이라면 클라우드에 존재하거나 온프레미스 환경이라도 직접 서버렉 앞에서 작업할 것이 아니라면 분명 ssh쉘로 접속해서 쓸텐데, 이 때는 당연히 GUI 환경을 사용할 수 없으니 CLI 환경을 사용한 Docker 사용법도 알아두어야 할 것이다.

     

    PostgreSQL 서버나 클라이언트 기본 설정은 아래 글을 참조.

    2023.05.16 - [본업/Data] - [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #2-1 postgresql.conf 서버 구성 파일 설정

     

    [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #2-1 postgresql.conf 서버 구성 파일 설정

    이전글 2023.04.23 - [본업/Database] - [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #1 다운로드 및 설치 Server Configuration Files PostgreSQL 서버를 사용하고 운영하는데 필요한 다양한 파라미터들이 있으며 이들을

    conceptbug.tistory.com

    2023.05.30 - [본업/Data] - [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #2-2 pg_hba.conf 클라이언트 인증 파일 설정

     

    [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #2-2 pg_hba.conf 클라이언트 인증 파일 설정

    이전글 2023.05.16 - [본업/Database] - [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #2-1 postgresql.conf 서버 구성 파일 설정 이전 글에서 PostgreSQL을 사용하는데에 있어서 필요한 설정 중, 데이터베이스 서버측 설

    conceptbug.tistory.com

     

    Create Connection witih Client Tool (DBeaver)

    맨 뒤의 Trouble Shooting 부분을 먼저 보는 것이 시간을 절약할 수도 있음.

    psql을 사용해도 되지만, 굳이?

    pgAdmin이나 DBeaver를 사용하면 훨씬 빠르게 작업할 수 있다.

    DBeaver 설정은 이전에 포스팅했던 글로 대체한다.

    2023.07.27 - [본업/Database] - [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #3-2 DBeaver 연결

    다만, 컨테이너를 띄울 때 호스트 PC의 54321 포트와 컨테이너의 내부 5432 포트를 바인딩했기 때문에 호스트 PC측에서 동작하는 DBeaver에서는 54321 포트를 지정해야 한다.

     

    Trouble Shooting

    "Native client is not specified for connection"

    Docker로 구동중인 PostgreSQL을 대상으로 백업, 복구 명령어를 테스트하는데 에러가 발생했다.

    이 포스팅을 작성하는 시점에서는 이미 트러블 슈팅도 모두 끝마친 상태라 에러 내용을 캡쳐해 두는 것을 깜빡한터라 에러 메시지는 없지만...

    약간 흐릿하지만 기억으로는 호스트 PC에 PostgreSQL 서버를 대상으로 실행할 pg_dump, pg_restore 등의 명령어가 없다는 내용이었 던 것 같다.

    (Native client 블라 블라)

    PostgreSQL 서버는 도커에서 돌아가고 있고, 나는 호스트 PC인 맥북에서 DBeaver라는 클라이언트 애플리케이션으로 접속한 것이기 때문에 클라이언트인 내 입장에서는 백업, 복구 명령어를 실행할 툴이 없는 것이다.

    이때는 PostgreSQL Client Utility를 설치하면 된다.

     

    방법은 두 가지다.

    • 서버, 클라이언트 모두 설치 → PostgreSQL 설치
    • 클라이언트만 설치 → libpq 설치

    첫 번째 방법은 내가 docker로 postgresql을 돌리는 이유가 필요 없어지므로 나는 두 번째 방법을 사용해 명령어만 설치해서 DBeaver 경로에 지정했다.

    참고로 'macos dbeaver libpq'라고 검색하면 homebrew를 사용해 설치하는 방법 등의 방법이 쉽게 나오고, 설치 이후 DBeaver의 기존 커넥션을 수정하면 됨.

    Disk용량 초과

    말 그대로 컨테이너에 할당 가능한 호스트 OS의 파일 시스템 용량이 초과되면 컨테이너가 멈춰버린다.

    시계열 데이터를 테스트하다 보니 테이블 하나가 20GB를 넘어가버리는데

    이를 까먹고 테스트용 테이블을 카피하다가 멈춰버림.

    도커의 설정에서 [Resources] -> [Advanced] -> [Virtual disk limit]을 본인이 원하는 만큼 늘리면 됨.

    댓글

    Designed by JB FACTORY