본문 바로가기

Devops/Docker

[Docker] Docker로 Postgresql 설치하기

Docker Hub에서 Postgresql latest 이미지를 다운로드 받는다.

root@DESKTOP-GH94F8C:/mnt/c/Users/skkkm# docker pull postgres:latest
latest: Pulling from library/postgres
09f376ebb190: Pull complete
119215dfb3e3: Pull complete
e02bbc8c8252: Pull complete
061f31803c55: Pull complete
accd4903f49a: Pull complete
2016ff8e6e3a: Pull complete
088e651df7e9: Pull complete
ed155773e5e0: Pull complete
ffebb35d2904: Pull complete
293f0bec643a: Pull complete
1655a257a5b5: Pull complete
4ddba458499d: Pull complete
90e48ae03559: Pull complete
822c1a513e6a: Pull complete
Digest: sha256:1bf73ccae25238fa555100080042f0b2f9be08eb757e200fe6afc1fc413a1b3c
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest

 

Docker 이미지를 다운로드 받았으면 Container로 실행 시켜 본다.

 

아래 docker run command 인자의 의미는 다음과 같다.

-d, --detach  Run container in background and print container ID
--name string                       Assign a name to the container
-e, --env Set environment variables

                           

-d 옵션을 주어서 Container를 background로 실행되게 만든다.

-e 옵션을 주면 Container 실행시 환경변수를 넘겨 줄 수 있다. Postgresq DB를 특정 포트로 지정해서 실행시키고 싶으면 -e PGPORT=[portNum] 로 넘겨주면 전달한 Port로 DB Container를 띄우게 된다.

 

-p 7433:7433 은 Docker 외부 Port와 내부 Port를 연결해 주는 옵션으로 내, 외부 모드 7433으로 동일하게 쓰고 있음을 알 수 있다.

docker run -d --name PostgreSQL -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=1234 -e PGPORT=7433 -p 7433:7433 postgres:latest
b7af7d8cdbb3e94818b0f8f43baa236d28aa88eb7d9266a7bfcac78f9515e33b

 

Container를 실행 후 docker ps -a로 확인해 보면 정상적으로 Container가 실행되고 있음을 볼 수 있다.

root@DESKTOP-GH94F8C:/mnt/c/Users/skkkm# docker ps -a
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS                             PORTS
                                                                                     NAMES
b7af7d8cdbb3   postgres:latest                      "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes                       5432/tcp, 0.0.0.0:7433->7433/tcp, :::7433->7433/tcp

 

DBeaver 툴 등에서 Connection을 연결해본다. 아래 등과 같이 설정을 만들고 접속을 시도 해본다.

 

연결이 성공되고 쿼리를 수행해 보면 결과가 나온다.

 

PostgreSql 서버 설정 바꾸기

 

docker 이미지에서 Postgresql DB의 conf 위치는 /var/lib/postgresql/data/postgresql.conf 이다. /var/lib/postgresql/data에서 편집기로 열기위해 vi를 해보면 command가 없다고 나온다.

root@DESKTOP-GH94F8C:/mnt/c/Users/skkkm# docker exec -it PostgreSQL /bin/bash
root@b7af7d8cdbb3:/#
root@b7af7d8cdbb3:/# cd /var/lib/postgresql/data/
root@b7af7d8cdbb3:/var/lib/postgresql/data# vi
bash: vi: command not found

 

apt-get update

apt-get install vim

 

vim 설치 후에 vi /var/lib/postgresql/data/postgresql.conf를 열고 테스트로 max_prepared_transactions 항목을 100으로 늘려본다.

 

저장하고 나와서 exit로 Container 내부 bash쉘에서 나온다. 그리고 docker container restart로 Postgresql DB를 재기동한다.

root@DESKTOP-GH94F8C:/mnt/c/Users/skkkm# docker container restart b7af7d8cdbb3
b7af7d8cdbb3

 

Container를 재기동하면 DB 도 같이 재기동 되어서 기동 후 Tool에서 PG_SETTINGS의 Max Prepared_transactions를 읽어보면 설정한 대로 100으로 나타냄을 볼 수 있다.

 

-- The End --