< DevOps >/Docker

#3. PostgreSQL Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈

Chipmunks 2022. 2. 4.
728x90

안녕하세요, 다람쥐입니다.

오늘 소개할 도커 이미지는 PostgreSQL 입니다.

PostgreSQL(Postgres) 오라클과 더불어 대표적인 객체 관게 데이터베이스 중 하나입니다.

동시성을 잘 처리하고 다양한 자료형들을 제공하고 문서화도 잘 되어 있어 많은 프로젝트에서 백엔드 데이터베이스로 채택되고 있습니다.

주변에 따르면 장고와 잘 어울려서 장고 프로젝트를 할 때 Postgres 를 사용한다고 하네요.

 

바로 PostgreSQL 도커 이미지를 설치해 봅시다!

 

1.  도커 프로그램 설치하기

아래 MySQL Docker 이미지를 설치할 때 소개드렸습니다. 아래 페이지를 참고해주시면 감사하겠습니다.
링크 : https://itchipmunk.tistory.com/450

 

#1. MySQL Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈

안녕하세요. 다람쥐입니다. 매 번 새 환경에서 MySQL 를 설치받는 것은 매우 귀찮은 일이었는데요~ 맥에서는 터미널로 이런저런 명령어를 쳐야하고, 윈도우에서도 설치 마법사로 설치하고 필요하

itchipmunk.tistory.com

 

2. PostgreSQL Docker 이미지 설치하기 

docker pull 명령어로 PostgreSQL 최신 버전의 이미지를 내려받을 수 있습니다.

$ docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
8998bd30e6a1: Pull complete 
8c57ecc00197: Pull complete 
8b1aaa551482: Pull complete 
409382316c26: Pull complete 
3b2a428af099: Pull complete 
e44b8e834aba: Pull complete 
1372eb84c820: Pull complete 
39188dbce14f: Pull complete 
eeae73eec999: Pull complete 
61d82f297b71: Pull complete 
acb97364653f: Pull complete 
5aa874b29d59: Pull complete 
807cdfe79052: Pull complete 
Digest: sha256:3162a6ead070474b27289f09eac4c865e75f93847a2d7098f718ee5a721637c4
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest

특정 버전의 PostgreSQL 도커 이미지는 Postgres 도커 허브 페이지의 Tags 메뉴에서 이미지 목록을 확인할 수 있습니다.

 

Postgres 도커 허브 태그 목록 페이지

만약 애플 실리콘 M1 칩셋을 사용 중이라 오류가 난다면 로제타로 터미널을 실행해주시거나 '--platform linux/amd64' 옵션을 추가로 넣어줍니다.

 

3. 내려 받은 Postgres Docker 이미지 확인

'docker images' 명령어로 내려 받은 Postgres Docker 이미지를 확인할 수 있습니다.

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED        SIZE
postgres                            latest    193e0347e554   8 days ago     354MB

또는 Docker Desktop 애플리케이션의 Images 탭에서 확인할 수 있습니다.

Docker Desktop 애플리케이션의 Images 메뉴에서 확인한 postgres 이미지

 

4. 내려 받은 postgres 이미지를 컨테이너 생성

postgres 이미지를 컨테이너로 만드는 방법은 아래와 같습니다.

# pgdata Volume 생성
$ docker volume create pgdata

$ docker run -it --restart unless-stopped --name some-postgres -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword -d postgres

'--restart unless-stopped' 옵션은 데몬 시작 시에 자동으로 컨테이너를 재시작합니다.

'--restart' 옵션은 다음 네 가지가 있습니다.

  • no : 컨테이너를 재시작하지 않음 (기본값)
  • on-failure[:max-retries] : 정상적으로 종료되지 않은 경우만 재시작. max-retries 값은 최대 시도 횟수를 지정
  • always : 컨테이너를 항상 재시작
  • unless-stopped : 컨테이너를 정지하기 전까지 항상 재시작

'--name 이름' 으로 컨테이너의 이름을 설정합니다.

'-e' 환경 변수 목록으로는 'POSTGRES_PASSWORD=패스워드' 으로 postgres 비밀번호를 설정합니다.

'POSTGRES_USER' 옵션은 슈퍼계정의 이름을 설정합니다. 기본값은 "postgres" 입니다.

다양한 환경변수 옵션은 도커 허브의 Environment Variables 을 참고해주세요!

'-v 볼륨경로' 옵션에서는 컨테이너가 사용할 볼륨을 입력합니다.

 

마찬가지로 M1 칩셋의 경우 '--platform linux/amd64' 옵션을 붙여줍니다.

5. 실행된 postgres 컨테이너 확인

아래 명령어로 postgres 컨테이너를 확인할 수 있습니다.

$ docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS                        PORTS                               NAMES
f8c0f352033c   postgres               "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds                  5432/tcp                            some-postgres

 

6. postgres 컨테이너 시작 & 정지 & 재시작

아래 명령어로 postgres 컨테이너를 시작하고 정지하고 재시작할 수 있습니다.

# Postgres Docker 컨테이너 중지
$ docker stop some-postgres

# Postgres Docker 컨테이너 시작
$ docker start some-postgres

# Postgres Docker 컨테이너 재시작
$ docker restart some-postgres

7. postgres 컨테이너 psql 로 접속

아래 명령어로 postgres 와 psql 을 같은 네트워크상으로 묶고 psql 으로 postgres 데이터베이스에 접속합니다.

$ docker run -it --rm --network some-network postgres psql -h some-postgres -U postgres

 

8. docker-compose.yml 에 postgres 추가

version: "3"
services:

  # postgres database
  postgres:
    image: postgres
    container_name: postgres
    environment:
      - POSTGRES_DB=admin
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=admin
      - POSTGRES_HOST_AUTH_METHOD=trust # allow all connections without a password. This is *not* recommended for prod
    volumes:
      - postgres-volume:/var/lib/postgresql/data/ # persist data even if container shuts down
    ports:
      - "5432:5432"

  # pgadmin for managing postgis db (runs at localhost:5050)
  # To add the above postgres server to pgadmin, use hostname as defined by docker: 'postgres'
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin
      - PGADMIN_DEFAULT_PASSWORD=admin
      - PGADMIN_LISTEN_PORT=5050
    ports:
      - "5050:5050"
  
volumes:
  postgres-volume:

 

다른 시리즈 글 보러 가기

 

#2. Redis Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈

안녕하세요! 다람쥐입니다. 오늘 소개드릴 도커 이미지는 바로 'Redis' 입니다. 레디스(Redis)는 대표적인 인메모리 데이터베이스 중 하나이고 데이터베이스 기능 뿐 아니라 캐싱, 메시지 브로커로

itchipmunk.tistory.com

 

#1. MySQL Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈

안녕하세요. 다람쥐입니다. 매 번 새 환경에서 MySQL 를 설치받는 것은 매우 귀찮은 일이었는데요~ 맥에서는 터미널로 이런저런 명령어를 쳐야하고, 윈도우에서도 설치 마법사로 설치하고 필요하

itchipmunk.tistory.com

 

댓글