Compute Engine에 Docker 기반 PostgreSQL 서버 구축하기

곽태욱·2021년 8월 4일
0

이번 글에선 GCP Compute Engine에 Docker 기반 PostgreSQL 서버가 작동하는 인스턴스를 생성하고, 외부에서 접속할 수 있는 환경을 만들어 보려고 합니다. 이 글을 따라하기 전에 우선 GCP 계정을 만들어야 합니다.

GCP

Compute Engine

GCP Compute Engine 콘솔에 들어와서 상단의 인스턴스 만들기 버튼을 클릭합니다.

인스턴스 이름을 설정해줍니다. 저는 PostgreSQL 서버를 실행시킬 인스턴스라서 postgres로 설정했습니다. 그리고 GCP 무료 등급을 사용하려면 리전은 us-west1(오리건)으로 설정하고, 머신 구성은 e2-micro로 설정해줍니다.

30GB 표준 영구 디스크를 선택합니다.

네트워크 태그에 postgres를 입력해주고 만들기 버튼을 클릭합니다.

Compute Engine 인스턴스가 만들어졌습니다.

GCP 무료 등급 사용량 (cloud.google.com)

Postgres Official Image (Docker Hub)

VPC 네트워크

외부 네트워크에서 Compute Engine 인스턴스에 있는 PostgreSQL 서버에 접속할 수 있도록 5432번 포트를 열어줄 꺼에요. GCP VPC 네트워크에 들어와서 방화벽 탭을 클릭하면 위와 같은 화면이 나오는데, 방화벽 규칙 만들기 버튼을 클릭하세요.

방화벽 규칙 이름은 아무거나 정해주세요.

그리고 대상 태그에 postgres를 입력하고, 소스 IP 범위는 모든 IP 주소 접속을 허용하도록 0.0.0.0/0을 입력해주세요.

마지막으로 PostgreSQL 서버가 실행되고 있는 5432번 포트를 열어주고 만들기 버튼을 클릭해주세요.

로컬 컴퓨터

SSH 접속

$ gcloud init
$ gcloud components update
$ gcloud compute ssh {GCP계정이름}@{인스턴스이름}

gcloud를 설치해줍니다. 그리고 GCP 계정 로그인 및 gcloud 업데이트 후 GCP Compute Engine 인스턴스에 SSH 접속을 시도합니다. 첫 SSH 접속 시도 시 비밀번호를 설정하라는 안내 문구가 뜨는데 거기에 매 SSH 접속 시 사용할 비밀번호를 입력합니다.

$ docker ps
$ docker rm -f {컨테이너ID}

docker ps 명령어로 기본적으로 실행 중이던 postgres:alpine 컨테이너 ID를 확인한 후, docker rm 명령어로 해당 컨테이너를 삭제합니다.

컨테이너 생성

$ pwd
/home/{GCP계정이름}
$ mkdir -p postgresql/data
$ docker run \
  -d \
  -e POSTGRES_PASSWORD={DB계정비밀번호} \
  -e POSTGRES_USER={DB계정이름} \
  -p 5432:5432 \
  -v /home/{GCP계정이름}/postgresql/data:/var/lib/postgresql/data \
  --restart=always \
  --name postgres \
  postgres:alpine

기본적으로 실행 중이던 PostgreSQL 컨테이너를 삭제하고 세부 옵션을 설정해서 새로운 컨테이너를 생성합니다. PostgreSQL은 필수적으로 POSTGRES_PASSWORD 환경 변수가 필요한데 -e 옵션으로 컨테이너에 환경 변수를 넘겨줄 수 있습니다. 그리고 포트랑 볼륨도 설정해줍니다.

PostgreSQL 서버 접속

$ psql --host={인스턴스외부IP} --user={DB계정이름}
Password for user {DB계정이름}: {DB계정비밀번호}

로컬 컴퓨터에서 GCP Compute Engine 인스턴스에서 실행 중인 PostgreSQL 서버에 접속해봅니다.

컨테이너 메트릭 보기

$ docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker:/var/lib/docker:ro 
  --publish 9559:8080 \
  --detach \
  --restart=always \
  --name=cadvisor \
  google/cadvisor:latest

Google에서 제공하는 cAdviser를 통해 개별 컨테이너의 실시간 컴퓨터 자원 사용량을 그래프로 볼 수 있습니다. docker.io에서 cAdviser를 도커 이미지로 제공하고 있어서 cAdviser를 컨테이너로 실행할 수 있습니다.

http://{인스턴스외부IP}:9559/containers/docker

docker run 을 통해 cAdviser 컨테이너를 실행한 후 브라우저를 통해 위 주소로 접근하면 각 컨테이너별 메트릭을 확인할 수 있습니다.

profile
이유와 방법을 알려주는 메모장 겸 블로그. 블로그 내용에 대한 토의나 질문은 언제나 환영합니다.

0개의 댓글