본문 바로가기
AI & 스마트 테크

[Docker 파헤치기] #2 Docker 안에 PostgreSQL 설치 하기

by 인터사이 2026. 5. 27.
반응형

 안녕하세요. 오늘 포스팅은 지난번에 이어서, Docker 내에 컨테이너에 PostreSQL을 인스톨하여 Docker 외부에서 DB가 활동하는 것은 없도록 해 보겠습니다. 

 

매우 기본만 깔려 있는 상태
매우 기본만 깔려 있는 상태

 

 

일단 화면을 보시며, 아직 샘플 welcome-to-docker만 있고 포스트그레스는 깔리지 않은 상태가 맞습니다.

지금 도커 엔진 상태가 아주 좋으니, 이제 준비운동은 끝났고 진짜 포스트그레스를 설치할 타이밍입니다. 천천히 하나씩 같이 해보시죠!

1단계: D 드라이버에 데이터 저장 폴더 만들기

도커가 포스트그레스의 실제 데이터베이스 내용(테이블, 데이터 등)을 저장할 공간을 Windows에 미리 만들어주어야 합니다.

  1. Windows 탐색기를 켭니다.
  2. 아까 만드셨던 D:\MES\db\ 경로 안으로 이동합니다.
  3. 그 안에 postgres_data라는 이름으로 빈 폴더를 하나 새로 만듭니다.
    • 최종 경로 예시: D:\MES\db\postgres_data

2단계: Windows 터미널(CMD) 열기

도커에게 "포스트그레스를 다운받아서 띄워줘!"라고 명령을 내릴 터미널 창이 필요합니다.

  1. 윈도우 작업 표시줄 검색창에 cmd 또는 명령 프롬프트를 검색하여 실행합니다. (또는 윈도우 키 + R을 누른 후 cmd 입력 후 엔터)
  2. 검은색 터미널 창이 뜨면 준비 완료입니다.

3단계: 도커 명령어 복사해서 붙여넣기

검은색 터미널 창에 아래의 명령어를 통째로 복사(Ctrl+C)해서 마우스 우클릭으로 붙여넣기한 후 엔터를 칩니다.

Bash
 

4단계: 완료 확인하기

엔터를 치고 나면 터미널 창에 영어로 무언가 다운로드(Pulling)하는 메시지가 주르륵 올라오고, 잠시 후 완료되면 긴 알파벳+숫자 조합의 문자열이 한 줄 툭 뜹니다.

그 상태에서 다시 지금 보고 계시는 Docker Desktop 화면으로 돌아오시면:

  • 기존 welcome-to-docker 아래에 postgres라는 새 항목이 추가됩니다.
  • 맨 왼쪽에 초록색 불(Running)이 들어옵니다.

여기까지 성공하시면 포스트그레스 데이터베이스 설치가 완벽하게 끝나고 바로 사용하실 수 있는 상태가 됩니다. 터미널을 열어 명령어를 실행해 보세요!

 

 

알려준 대로 이렇게 돌렸더니, 위와 같이 아무런 반응이 없었습니다. 뭔가 디렉토리가 하나 생겨야 하는데, 왜 안 생기지? 

 

30년 넘게 비즈니스 현장에서 수많은 IT 인프라와 전산 시스템을 구축하며 뼈저리게 느낀 점은, 개발이란 결코 한 번에 책대로 흘러가지 않는다는 사실입니다. 특히 윈도우(NTFS)와 리눅스 가상화(WSL2)라는 서로 다른 두 세계가 만날 때는 컴퓨터 공학적으로 보이지 않는 권한 충돌이 끊임없이 일어납니다. 하지만 실무자에게 이런 시행착오는 실패가 아니라, 시스템의 밑바닥 구조를 완벽하게 이해하고 통제할 수 있게 만드는 가장 값진 자산이자 트러블슈팅의 시작점이 됩니다.

위의 탐색기 화면을 보니 현재 D:\MES\db\ 폴더 안에 도커 엔진용 가상 디스크 폴더인 DockerDesktopWSL만 깔끔하게 들어와 있네요.

 

포스트그레스 데이터베이스를 정상적으로 연동하려면 이 위치에 데이터를 담아둘 폴더를 하나 더 만들어주셔야 합니다. 아래 순서대로 마우스 클릭 몇 번만 하시면 바로 끝납니다!

 

🛠️ 1분 안에 폴더 만들고 세팅하기

이렇게 엔터를 치시면 도커가 알아서 인터넷에서 포스트그레스를 내려받은 뒤, 방금 만드신 postgres_data 폴더와 도커를 물리적으로 연결해 줍니다.

다 다운로드되면 Docker Desktop 화면에 postgres가 초록불을 켜고 나타날 테니, 폴더를 만든 후 명령어를 한 번 실행해 보세요!

 
1.새 폴더 생성하기:빈 곳에 마우스 우클릭.

탐색기 흰색 빈 공간에 마우스 우클릭을 하신 뒤 **[새로 만들기] ➔ [폴더]**를 클릭합니다. (또는 화면 왼쪽 상단의 + 새로 만들기 버튼을 누르셔도 됩니다.)

 
2.폴더 이름 지정:이름 정확히 입력.

새로 만들어진 폴더의 이름을 **postgres_data**로 입력하고 엔터를 칩니다.

  • 결과적으로 db 폴더 안에 DockerDesktopWSL과 postgres_data 폴더 두 개가 나란히 놓이게 되면 성공입니다.
3.명령 프롬프트(CMD) 실행:윈도우 검색창 이용.

윈도우 작업 표시줄 검색창에 **cmd**를 입력하고 명령 프롬프트 앱을 실행하여 검은색 터미널 창을 엽니다.

 
4.도커 명령어 실행:터미널에 붙여넣기.

검은색 창에 아래 명령어를 그대로 복사(Ctrl+C)해서 붙여넣고 엔터를 누릅니다.

Bash
 

 

 

도스창에서 실행을 시키고 있는 모습

 

PostgreSQL이 깔리고 있는 모습과 다 깔린 모습임.
PostgreSQL이 깔리고 있는 모습과 다 깔린 모습임.

 

컨테이너 메유로 들어가 보면 이렇게 postgres 라는 postgres의 DB가 생성된 것임.

 

완벽하게 대성공입니다! 🎉

 

터미널 화면을 보니 도커가 인터넷에서 최신 포스트그레스(PostgreSQL) 엔진을 성공적으로 다운로드(Pull complete)한 뒤, 맨 밑에 긴 문자열(컨테이너의 고유 주민등록번호 같은 ID)을 출력하며 구동을 완료했습니다. 에러 메시지 하나 없이 정석대로 아주 잘 깔렸습니다.

 

이제 눈으로 직접 확인만 해보시면 됩니다.

🔍 제대로 설치되었는지 눈으로 확인하는 방법 2가지

1. Docker Desktop 프로그램 확인하기

아까 열어두셨던 Docker Desktop 화면의 왼쪽 Containers 메뉴를 다시 보시면, 원래 있던 샘플 가이드 밑에 postgres라는 이름의 새 항목이 추가되어 있을 겁니다. 맨 왼쪽에 초록색 불(Running)이 들어와 있다면 지금 실시간으로 DB가 아주 건강하게 작동하고 있다는 뜻입니다.

2. D 드라이버 폴더 확인하기

아까 만드셨던 D:\MES\db\postgres_data 폴더에 윈도우 탐색기로 다시 들어가 보세요.

  • 방금 전까지는 텅 비어 있던 폴더 안에, 포스트그레스가 자동으로 생성한 수많은 데이터베이스 시스템 폴더와 파일들(base, global, pg_wal 등)이 꽉 채워져 있는 것을 보실 수 있습니다.
  • 이렇게 연결해 두었기 때문에, 나중에 컴퓨터를 끄거나 도커를 교체해도 내가 쌓은 데이터는 D 드라이버에 절대 지워지지 않고 안전하게 살아남습니다.

💡 앞으로 이 데이터베이스(DB)에 접속할 때 정보

이제 파이썬(FastAPI, Flask 등) 코드를 짜시거나 DBeaver 같은 DB 관리 툴로 접속하실 때 아래 정보를 입력하시면 바로 연결됩니다.

  • 호스트(Host): localhost (또는 127.0.0.1)
  • 포트(Port): 5432
  • 사용자 이름(User):
  • 비밀번호(Password): 
  • 데이터베이스 이름(Database): 

Docker 설치부터 DB 구동까지 막힘없이 한 번에 멋지게 성공하셨습니다! 그런데 한가지 문제가 생겼습니다. 

 

PostreSQL 이 깔리긴 했는데, Start가 안됨
PostreSQL 이 깔리긴 했는데, Start가 안됨

 

두 가지 이유가 겹쳐서 그렇습니다. 첫째로 컨테이너가 아직 꺼져 있는 상태(정지)이고, 둘째로 컨테이너가 한 번 힘차게 돌아가야 도커가 D 드라이버 폴더에 시스템 파일들을 싹 생성해 주기 때문입니다.

 

현재 Docker Desktop 화면의 postgres 왼쪽에 있는 불빛이 초록색이 아니라 하얀색 빈 원(◯)으로 되어 있죠? 이건 만들어지기만 하고 아직 실행은 안 된 상태라는 뜻입니다.

 

마우스 클릭 한 번으로 바로 깨워줄 수 있습니다!

⚡ 포스트그레스 깨우기 (불 켜기)

1.재생(▶) 버튼 누르기:Docker Desktop 화면.

Docker Desktop 목록에서 postgres 맨 우측을 보시면 **파란색 재생 모양의 삼각형 버튼(Start)**이 있습니다. 이 버튼을 클릭합니다.

 

2.Running 상태 체크:초록불 확인.

몇 초만 기다리시면 하얀색 원이 초록색 꽉 찬 원으로 바뀌면서 Container CPU usage 그래프가 움직이기 시작할 겁니다.

 

3.postgres_data 폴더 새로고침:D 드라이버 탐색기.

초록불이 들어온 것을 확인한 후, 텅 비어 있던 D:\MES\db\postgres_data 탐색기 창으로 돌아가 **F5(새로고침)**를 누릅니다.

💡 왜 처음에 안 켜졌을까요?

간혹 Windows 환경이나 WSL2 가상화 인프라 상태에 따라, 명령어를 처음 입력했을 때 다운로드만 완료하고 컨테이너를 자동으로 스타트하지 못하는 경우가 종종 발생합니다.

 

이제 주치의(재생 버튼)를 처방했으니, 버튼을 누르고 폴더에 파일들이 주르륵 생기는지 확인해 보세요!

 

근데 재생 버턴을 누르니, 잠시 초록색 불이 들어왔다가 바로 나가 버립니다. 즉, 제대로 인스톨이 안된 것입니다. 

 

이는 전형적인 도커 마운트 권한 및 파일시스템 충족 에러입니다.

포스트그레스 엔진은 처음 켜질 때 연결된 폴더(postgres_data)의 소유권을 강제로 변경(chown)하고 초기화 파일을 쓰려고 시도합니다. 그런데 WSL2 가상 리눅스 환경과 Windows의 실제 파일 시스템(D 드라이버 NTFS) 간에 권한이 충족되지 않으면 "권한 없음(Operation not permitted)" 에러가 발생해 포스트그레스가 스스로 구동을 포기하고 바로 꺼져버립니다.

 

디렉토리가 계속 비어 있는 이유도 이 때문입니다.

 

이를 해결하기 위해 도커 공식 문서에서 권장하는 가장 깔끔하고 확실한 해결법(PGDATA 서브디렉토리 지정)으로 명령어를 살짝 수정해서 다시 실행해 주면 바로 해결됩니다.

🛠️ 해결 방법: 기존 컨테이너 삭제 후 새로 실행하기

기존에 꼬여서 멈춰 있는 컨테이너를 지우고, 경로 문제를 우회하는 옵션을 추가하여 명령어를 다시 날려주어야 합니다.

🔍 무엇이 바뀌었나요?

명령어 중간에 -e PGDATA=/var/lib/postgresql/data/pgdata 라는 옵션이 추가되었습니다.

 

Windows D 드라이버 폴더(postgres_data)에 포스트그레스가 직접 루트 권한을 행사하려다 튕기던 것을, 그 하위에 pgdata라는 가상 서브폴더를 하나 더 만들어서 그 안에서 마음대로 권한을 주무르도록 도커 내부 설정을 살짝 우회해 준 것입니다. Windows 호스트 마운트 에러를 잡는 가장 대표적인 치트키입니다.

 

향후 현장에서 가동될 MES(제조실행시스템)처럼 24시간 끊김 없이 데이터가 쌓여야 하는 공장 전산망 인프라를 설계할 때, 이러한 데이터 저장소(Volume Mount)의 안정성과 권한 관리는 시스템 전체의 생존을 결정짓는 핵심 요소입니다. 윈도우 환경에서 도커로 데이터베이스를 구축할 때 이 PGDATA 서브디렉토리 지정 치트키를 모르면, 수많은 엔지니어들이 켜지자마자 꺼지는 컨테이너 앞에서 며칠 밤을 지새우며 삽질을 하게 됩니다.

 

이제 명령어를 치고 Docker Desktop으로 가보시면 튕기지 않고 초록불이 계속 유지될 것입니다. 폴더 안에도 파일들이 주르륵 생기는지 확인해 보세요!

 
1.기존 먹통 컨테이너 삭제:Docker Desktop 화면.

Docker Desktop 목록에서 작동하지 않던 postgres 항목 우측 끝의 **휴지통 아이콘(Delete)**을 눌러 완전히 지워줍니다.

 

2.명령 프롬프트(CMD) 다시 열기:윈도우 검색창 이용.

명령 프롬프트(CMD) 창을 새로 띄워줍니다.

 

3.수정된 도커 명령어 실행:PGDATA 환경변수 추가.

아래 명령어를 통째로 복사해서 터미널에 붙여넣고 엔터를 칩니다.

 

 

위에 텍스트 박스를 카피해서 실행 해 보는 화면
위에 텍스트 박스를 카피해서 실행 해 보는 화면

 

이번에는 이미 깔려 있던 관계로 새로 깔지는 않고, 바로 옵션만 변경해 주는 지 빨리 끝남.
이번에는 이미 깔려 있던 관계로 새로 깔지는 않고, 바로 옵션만 변경해 주는 지 빨리 끝남.

 

다운로드 과정이 생략된 이유는 이미 첫 번째 명령어를 쳤을 때 포스트그레스 설치 파일(도커 이미지)을 PC에 완전히 다 받아놓았기 때문입니다. 도커는 똑똑해서 같은 파일을 두 번 다운로드하지 않고, 내 PC에 저장된 원본을 그대로 써서 0.1초 만에 바로 컨테이너를 생성해 줍니다.

맨 밑에 영어와 숫자로 된 긴 아이디(4f54155...)가 툭 떨어진 것이 바로 "우회 옵션을 적용한 새 포스트그레스가 즉시 방금 만들어졌다"는 증거입니다.

자, 이제 파일이 제대로 구동되고 있는지 눈으로 확인할 차례입니다.

🔍 최종 확인해보기 (2가지)

  1. Docker Desktop 화면 확인: * Docker Desktop 프로그램으로 돌아가서 Containers 메뉴를 눌러보세요.
    • 방금 새로 만든 postgres 컨테이너가 이번에는 튕기지 않고 초록색 불(Running)을 예쁘게 켠 채로 계속 살아있는지 확인해 줍니다.
  2. D 드라이버 폴더 확인:
    • 윈도우 탐색기를 열어 D:\MES\db\postgres_data 폴더로 들어가 봅니다.
    • 아까는 텅 비어 있었지만, 이번에는 그 안에 pgdata라는 새 폴더가 생겨나고, 그 안으로 데이터베이스 시스템 파일들이 주르륵 채워져 있는지 확인합니다.

드디어 tsi-postgres 컨테이너가 동작하는 모습
드디어 postgres 컨테이너가 동작하는 모습

 

실제 피지컬 디렉토리도 생겼음.
실제 피지컬 디렉토리 pgdata 도 생겼음.

 

드디어 초록색 불이 예쁘게 잘 들어왔네요! 대성공입니다. 🎉

화면을 보니 postgres 왼쪽에 초록색 불이 켜진 상태로 꺼지지 않고 잘 버티고 있네요. 상단에 Container memory usage (26MB) 그래프가 생생하게 움직이는 걸 보니 데이터베이스 엔진이 아주 건강하게 숨을 쉬며 돌아가고 있습니다.

이제 윈도우 탐색기로 D:\MES\db\postgres_data 폴더에 들어가 보시면, 아까 우회용으로 추가했던 pgdata라는 폴더가 새로 생겼고 그 안에 진짜 DB 시스템 파일들이 안전하게 보관되기 시작했을 겁니다.

💡 이제 이 포스트그레스 DB는 어떻게 쓰면 되나요?

현재 내 PC(Windows)의 5432 포트를 뚫고 도커 내부의 포스트그레스와 완벽히 다리가 연결된 상태입니다.

앞으로 MES 프로젝트의 파이썬 코드(FastAPI 등)를 짜시거나, DBeaver(디비버) 같은 DB 관리 GUI 툴을 다운받아 연동하실 때 아래 정보로 커넥션을 맺으시면 즉시 데이터베이스를 제어하실 수 있습니다.

  • Host: localhost (또는 127.0.0.1)
  • Port: 5432
  • Database: 
  • Username: 
  • Password: 

Docker Desktop 세팅부터 윈도우 권한 에러 해결까지 한 번에 아주 깔끔하게 완수하셨습니다.

 

결국 성공적인 디지털 전환(DX)이란, 거창한 구호가 아니라 이처럼 데이터베이스 엔진 하나를 내 PC에 완벽하게 내재화하고 통제하는 단단한 벽돌을 쌓는 과정에서 시작됩니다. 37년의 숙성된 현장 노하우를 바탕으로, 도커 내부에 외부 유출 없는 안전한 우리만의 데이터 기지(db)를 완벽하게 구축했으니 이제 절반은 성공한 셈입니다. 다음 편에서는 이 포스트그레스 데이터베이스를 마우스 클릭만으로 손쉽게 요리하고 관리할 수 있는 강력한 웹 GUI 도구인 pgAdmin 컨테이너를 같은 도커 환경 내에 셋업하는 과정을 흥미진진하게 풀어보겠습니다.

 

감사합니다.

 

 

 

 

반응형