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붙여줘야 실행됨.
- git 설치할 때 mintty로 설정 안 해서 앞에
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 셸에 접속한 상태에서 빠져나오려면exit명령어를 입력하고 Enter- 이 명령어는 현재 셸을 종료 & Docker 컨테이너에서 나가게 해준다.
Ctrl + D를 누르는 것도 같은 결과
- bash 셸을 닫는 또 다른 방법
docker 컨테이너 종료하기
docker stop [컨테이너명]
하지만!! container가 제거가 된다면? 그 안에 있는 내 데이터는?!
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 명령어 모음
![[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1755441066842%2F4d3a042e-e395-4e14-84c2-725aeabc56ed.png&w=3840&q=75)
![[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1754833767926%2F85ea771d-0416-409a-82d9-bcc62b92cf17.png&w=3840&q=75)
![[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1753626546414%2F943e9f66-8c81-4bac-83b6-5797bd83293c.png&w=3840&q=75)
![[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1753020566648%2Fc2832934-e4d5-45c1-87c8-a1d5f27b2169.png&w=3840&q=75)