Skip to main content

Command Palette

Search for a command to run...

docker에 postgreSQL 설치 및 실행

Updated
4 min read
docker에 postgreSQL 설치 및 실행

설치

postgres - Official Image | Docker Hub

  • postgres image 최초 설치
docker pull postgres:[필요한버젼]

docker pull postgres:latest

실행

  • 도커 컨테이너 실행(새롭게 컨테이터를 만들고 시작해야 한다면 여기서부터 진행)
$ docker run --name postgresdb -e POSTGRES_PASSWORD=1234 -d -p 5432:5432 postgres:latest
             --name [컨테이너이름] -e [환경설정,비밀번호] -d [백그라운드실행] -p [포트번호]
  • 컨테이너가 이미 올라가 있는 상태에서 컨테이너 시작만 하려면
docker start [컨테이너 이름]
  • 도커 컨테이너로 직접 접속

    • git 설치할 때 mintty로 설정 안 해서 앞에 winpty 붙여줘야 실행됨.
winpty docker exec -it postgresdb bash
winpty docker exec -it [컨테이너이름] bash
  • 그다음 루트 계정이 나오는데 여기에 -U [유저아이디]에는 postres를 작성한다.
psql -U postgres
  • 순서대로 접속을 하면
// 여기에서
root@47b4afe77e06:/# 

// 여기로 변경
postgres=#
  • CREATE USER
CREATE USER wowssun PASSWORD '12345' SUPERUSER;
CREATE USER [사용할 이름] PASSWORD '[비밀번호]' [권한];
  • 여기서 따로 권한을 줄 수도 있고 권한을 따로 여러 개 설정 가능.

  • 이미 Superuser인 postgres 존재하기 때문에 이 role name으로도 사용 가능.

  • CREATE DATABASE

 CREATE DATABASE test OWNER wowssun;
 CREATE DATABASE [데이터베이스명] OWNER [USER];
  • 데이터베이스에 사용자 연결하기(해당 데이터베이스 사용하기)

    • 데이터베이스 사용(접속) : \c
 \c test wowssun
 \c [데이터베이스명] [USER]]
  • postgreSQL에서 빠져나가고 싶으면
\q
  • winpty docker exec -it postgresdb bash 명령어로 Docker 컨테이너의 bash 셸에 접속한 상태에서 빠져나오려면

    1. exit 명령어를 입력하고 Enter

      • 이 명령어는 현재 셸을 종료 & Docker 컨테이너에서 나가게 해준다.
    2. Ctrl + D를 누르는 것도 같은 결과

      • bash 셸을 닫는 또 다른 방법

docker 컨테이너 종료하기

docker stop [컨테이너명]
💡
위와 같이 run을 해서 docker를 실행하면 컨테이너를 제거하지 않는 이상 docker start로 계속해서 접속하면 된다.

하지만!! container가 제거가 된다면? 그 안에 있는 내 데이터는?!

💡
그래서 제거된 후에도 계속해서 진행했던 data를 이어서 하고 싶다면? ~~ 또한 복수의 컨테이너를 run 명령어로 한 땀 한 땀 작성하기 싫다면?

docker-compose.yml 파일을 생성한 뒤에 폴더를 하나 지정한다면 그 폴더에 쌓이는 데이터와 docker 안에서의 데이터가 동기화된다. 한마디로 로컬 호스트와 컨테이너 간의 데이터를 저장하고 공유하는 역할을 하는 설정이라고 생각하면 된다.

그럼 이제 docker start가 아니라 docker compse up을 한다면 컨테이너를 띄울 수 있다. 그런 다음에 실행되고 있는 컨테이너를 중지하고 삭제하려면 docker compose down 을 명령어를 실행하면 된다.

How Compose works - docker docs

우선 저는 data를 모아놓을 곳에 data/postgres 경로로 폴더 생성 후 해당 폴더를 vscode로 열어서 아래의 파일명으로 파일 생성 뒤 작성했습니다.

  • docker-compose.yml

    • 이전 버전과의 호환성으로 위의 파일을 지원하지만 현재는 compose.yaml을 더 선호.
  • postgres_env

  • 먼저 민감한 데이터인 POSTGRES_PASSWORD는 postgres_env 이란 파일에 작성.(메모장에 작성한 뒤에 다른 이름으로 저장에서 모든 파일로 저장도 가능)

POSTGRES_PASSWORD=1234

  • 공식 문서에 나와있는 예시를 살펴보면서 작성해야 할 정보들에 대해 알아보자.
# Use postgres/example user/password credentials
version: '3.9'

services:

  db:
    image: postgres
    restart: always
    # set shared memory limit when using docker-compose
    shm_size: 128mb
    # or set shared memory limit when deploy via swarm stack
    #volumes:
    #  - type: tmpfs
    #    target: /dev/shm
    #    tmpfs:
    #      size: 134217728 # 128*2^20 bytes = 128Mb
    environment:
      POSTGRES_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  • 아까 위에서 컨테이너를 run 할 때의 정보들을 문서로 작성한다고 생각하면 이해하기 쉽다.
# Docker Compose 파일을 구성하는 데 필요한 파일 형식 버전
version: '3.9'

services:
  # 서비스명 작성.
  postgres:
    # pull로 받은 postgres image명 작성.
    image: postgres
    # 컨테이너 중지되거나 오류로 종료되었을 때 자동으로 재시작하도록 하는 옵션
    restart: always
    # 컨테이너 명 작성.
    container_name: postgresdb
    # 포트번호 작성.
    ports:
      - 5432:5432
    env_file:
      - postgres_env
    # 볼륨 설정
    volumes:
      - ./psqldata/:/var/lib/postgresql/data
  • volumes 설정에서 : 를 기준으로 왼쪽은 내 로컬 폴더 경로를 뜻하고 오른쪽은 컨테이너 내부의 폴더 경로이다. 오른쪽은 공식 문서에 따라 설정하고 왼쪽의 로컬 폴더 경로는 현재 내가 데이터를 작업할 폴더 (나는 여기서 data/postgres/postdata)를 뜻한다.

모든 파일을 작성했다면 이제 두 파일이 들어있는 경로에 가서 실행해 보자.

  • -d 옵션을 사용해서 백그라운드로 실행하자.

  • 실행한 뒤에는 컨테이너에 직접 접속해서 사용하면 됩니다!

  • port 번호가 안 겹치게 주의!

docker compose up -d
  • 컨테이너 중지 및 삭제
docker compose down

Postgres 도움말

postgres=# \?

사용자 목록 확인하기

postgres=# \du

데이터베이스 목록 조회

postgres=# \l

현재 만들어진 테이블 목록 확인하기

postgres=# \dt

실행 순서

  • docker container 접속

  • 사용자 로그인

  • 사용자 생성

  • 데이터베이스 생성

  • (권한 있는)사용자로 데이터베이스 접속

  • 테이블 생성 및 사용

참고 자료

[PostgreSQL] docker 를 이용한 PostgreSQL (psql) 튜토리얼

Docker Postgresql 설치 및 셋팅하기

[Docker] PostgreSQL 도커로 실행하기

More from this blog

[혼공후기] 재밌으면서도 알찼던 6주! 14기 활동 회고

매번 혼공 학습단을 신청해 봐야겠다고 했지만 기간 놓쳐버리기…또는 너무 바쁜 나머지 완주 못할 것 같아서 포기하다가 때마침 공부가 필요한 시기에 시간이 나서 신청하게 되었다. 공부할 새 책도 배송이 오고 완주할 생각에 기대감 상승. (+중간에 간식 먹을 생각) 참고할 수 있는 강의 영상이 있기 때문에 영상강의 보면서 책 필기 및 정리 이해한 내용을 바탕으로 블로그 정리 이런 방식으로 공부를 했다. 사실 하루에 조금씩 공부했으면 적당한 ...

Aug 23, 20252 min read

[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

14-1) 연속 메모리 할당 연속 메모리 할당 : 프로세스에 연속적인 메모리 공간을 할당하는 방식 스와핑 : 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 → 스와핑을 이용하면 프로세스들이 요구하는 메모...

Aug 16, 20259 min read
[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

12-1) 동기화란 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행된다. ⇒ 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기에 반드시 동기화가 필수 프로세스 동기화 : 프로세스들 사이의 수행 시기를 맞추는 것 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기 공유가 불가능한 자원의 동시 사용을 피하...

Aug 9, 20255 min read
[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

09-1) 운영체제를 알아야 하는 이유 운영체제 : 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 (시스템) 자원 : 프로그램 실행에 마땅히 필요한 요소 컴퓨터가 부팅될 때 메모리 내 커널 영역에 적재 사용자 영역 : 사용자가 이용하는 응용 프로그램이 적재되는 영역 ⇒ 메모리 공간에 주소가 겹치지 않게 프로그램 적재해 준 건? 운영체제 실행할 프로그램 메모리에 적재 실행되지 않...

Jul 26, 20257 min read
[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)

06-1) RAM의 특징과 종류 RAM 휘발성 저장 장치 실행할 대상 저장 보조기억장치 비휘발성 저장 장치 보관할 대상 저장 CPU는 보조기억장치에 직접 접근하지 못하고 RAM으로 복사하여 저장한 뒤 실행. RAM 용량이 적으면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어지기 때문에 RAM용량이 충분히 크면 많은 데이터를 가져와 미리 RAM에 저장하여 프로그램들을 동시에 빠르게 실행하는데 유리하다...

Jul 19, 20258 min read
[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)
W

WOW's dev archive

42 posts

언젠가 나에게 힘이 될 차곡차곡 쌓은 기록🥰