[Docker] 於 Windows 中運行 PostgreSQL Container 來提供本機 DB 開發環境

於 Windows 中運行 PostgreSQL Container 來提供本機 DB 開發環境

前言


最近專案有可能會使用到 PostgreSQL 資料庫,因此環境先給他準備起來並順道練習一下 Docker 手感,讓 PostgreSQL 可以好好在 container 中運作,感受一下瞬間招喚 DB 測試環境的建置感受。

 

 

取得映像檔 (Image)


可以從 Docker Hub 取得 postgres image 後存放於本機中。由於目前只有 Linux 版本,因此需要於 Docker Desktop 中將 Docker ContainerWindows 切換成 Linux 才能使用喔!

docker pull postgres

 

確認一下 image 已經存在於本機了

docker images

 

 

啟動容器 (container)


由於需要設定的東西有點多,所以可以使用 docker-compose 方式啟動 container。首先在目前資料夾中新增 docker-compose.yml 檔案( 為 YAML 檔案格式,以縮排作為區塊階層 ),內容如下:

version: '3.6'   # Docker Engine release 18.02.0+

services:

  postgres:
    image: postgres
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=example   # Change this password!
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:

  postgres-data:

 

其中 postgres-data 作為本機 volume,可讓容器 (container) 跟本機 (host) 的資料互通,藉此達到持久化資料的功能,因此 DB 資料就不會因 container 移除後就消失了。

 

 

輸入以下指令來依據 docker-compose.yml 設置啟動 container

docker-compose up

 

 

驗證 PostgreSQL 連線


使用 pgAdmin 連線至 container 中的 PostgreSQL DB server 來驗證一下是否正常運作。

 

在確定可以連線後,我們新增 Role 資料表,並加入幾筆測試資料,等等驗證一下資料是否可以在 container 被關閉移除後仍然保存著。

 

 

查看 volume


資料為什麼可以被保留著是因為我們建立了一個本地 postgres-data volumn 並且映射到 container/var/lib/postgresql/data 資料存放位置,我們可以使用以下指令查詢目前有定義的 volume 清單。

docker volume ls

 

想要查看細部資訊可以使用 inspect 指令。由於此例是在 linux 環境中,因隔了一層 docker 自己的  VM 所以不會直接映射在實體 Windows 資料夾路徑中。

docker volume inspect {volume-name}

 

若是使用 WSL2 (Windows Subsystem for Linux) 來執行 Docker 時,可在以下路徑找到所有 volume 資料。

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

 

開啟該路徑後就可以發現名為 postgres-datavolume 資料,而這些資料可在容器跟本機中互通保存。

 

 

移除容器 (container)


當 container 被中斷執行後,我們可以透過 -a 指令找出所有存在的 container 清單。

docker ps -a

 

為了測試所以先把剛建立的 container 移除,下次執行 image 時會在產生一個全新的 container 來使用,藉此測試資料是否正常保留在本機 volume 中。

docker container rm {container-id}

 

 

重新啟動容器 (container)


重新輸入以下指令來執行 docker-compose.yml 檔案後,並透過 pgAdmin 連入 DB 查看資料。

docker-compose up

 

資料確實仍然存在,此時我們的 PostgreSQL DB 開發環境就已經就緒囉!

 

 

參考資訊


Running PostgreSql in a Container on Windows 10

Locating data volumes in Docker Desktop (Windows)

Where are Docker volumes located when running Windows and WSL?

Compose file version 3 reference

 

 


希望此篇文章可以幫助到需要的人

若內容有誤或有其他建議請不吝留言給筆者喔 !