안녕하세요, 다람쥐입니다.
오늘 소개할 도커 이미지는 PostgreSQL 입니다.
PostgreSQL(Postgres) 오라클과 더불어 대표적인 객체 관게 데이터베이스 중 하나입니다.
동시성을 잘 처리하고 다양한 자료형들을 제공하고 문서화도 잘 되어 있어 많은 프로젝트에서 백엔드 데이터베이스로 채택되고 있습니다.
주변에 따르면 장고와 잘 어울려서 장고 프로젝트를 할 때 Postgres 를 사용한다고 하네요.
바로 PostgreSQL 도커 이미지를 설치해 봅시다!
1. 도커 프로그램 설치하기
아래 MySQL Docker 이미지를 설치할 때 소개드렸습니다. 아래 페이지를 참고해주시면 감사하겠습니다.
링크 : https://itchipmunk.tistory.com/450
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 메뉴에서 이미지 목록을 확인할 수 있습니다.
만약 애플 실리콘 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 탭에서 확인할 수 있습니다.
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:
다른 시리즈 글 보러 가기
'< DevOps > > Docker' 카테고리의 다른 글
#5. MongoDB Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈 (1) | 2022.02.15 |
---|---|
#4. MariaDB Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈 (0) | 2022.02.08 |
#2. Redis Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈 (1) | 2022.01.25 |
#1. MySQL Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈 (0) | 2022.01.18 |
댓글