點燈坊

失くすものさえない今が強くなるチャンスよ

使用 Docker 執行 PostgreSQL

Sam Xiao's Avatar 2021-10-16

若要在 macOS 使用 PostgreSQL,最簡單的方式就是使用 Docker。只要在 docker-compose.yml 描述好 PostgreSQL 設定, docker compose up -d 即可快速啟動。

Version

PostgreSQL 14.0

Docker Compose

docker-compose.yml

version: "3"

services:
  postgres:
    image: postgres:latest
    container_name: postgres
    volumes:
      - ${HOST_DIR}:/var/lib/postgresql/data
    ports:
      - ${POSTGRES_PORT}:5432
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

設定 Postgres container:

  • image: postgres:latest:使用 PostgreSQL 官方所提供 image 並使用最新版本
  • container_name: postgres:設定 container 名稱
  • volumns:將 host 目錄對應到 PostgreSQL 內部儲存 data 目錄,避免 container 結束後資料就銷毀
  • ports:設定 container 對外 port 與 PostgreSQL 的 port 對應
  • environment:設定 database 名稱、id 與 password

Environment Variable

.env

HOST_DIR=.data
POSTGRES_PORT=5432
POSTGRES_DB=KnexLab
POSTGRES_USER=admin
POSTGRES_PASSWORD=12345

此為 docker-compose.yml 所設定的環境變數,被獨立在 .env 中,可單獨設定,將來不用修改 docker-compose.yml

  • HOST_DIR:設定 PostgreSQL data 要存到 host 位置
  • POSTGRES_PORT:設定 PostgreSQL 對應到 host 的 port
  • POSTGRES_DB:設定 database 名稱
  • POSTGRES_USER:設定 id
  • POSTGRES_PASSWORD:設定 password

Start PostgreSQL

$ docker compose up -d

使用 docker compose up 啟動 PostgreSQL。

-d : detach,建立 container 後,就脫離目前 process

post000

DataGrip

post001

以 DataGrip 連接 PostgreSQL。

post002

由於 PostgreSQL 是以 Docker 執行,因此 host 填 localhost,port 透過 5432 即可連接。

post003

DataGrip 順利連上 PostgreSQL。

Stop PostgreSQL

$ docker compose down

使用 docker compose down 結束 PostgreSQL,並且刪除 container,但資料仍會留在 host。

post004

Conclusion

  • 要在 macOS 使用 PostgreSQL,最簡單的方式就是使用 Docker
  • 由於 docker compose down 除了將 container 刪除,其資料也會跟著刪除,因此要使用 volumns 將資料存放在 host