Contents

使用 Docker 架設 DB2 環境

最近因為想測一下 DB2 對某些欄位型態的行為,例如 boolean 或相近設計在 DB2 上的表現,所以就找了一個最省時間的方式:直接用 Docker 起一套 DB2 環境來玩。

這篇不是正式生產部署指南,比較偏向「快速拉一套可操作的測試環境」,適合拿來驗證 SQL、資料型態、 JDBC 行為或 migration 腳本。

先講適用情境

這種做法適合:

  • 想快速建立 DB2 測試環境。
  • 要驗證 SQL 語法或資料型態。
  • 不想先準備完整虛擬機。

不太適合:

  • 直接當正式環境規劃。
  • 還沒確認 image 版本與授權條款就拿去公司長期使用。

最快的啟動方式

我當時用的是這條指令:

1
2
3
4
5
docker run -it \
	-p 50000:50000 \
	-e DB2INST1_PASSWORD=db2inst1-pwd \
	-e LICENSE=accept \
	ibmcom/db2express-c:latest bash

幾個重點:

  • 50000:50000:DB2 常見對外 port。
  • DB2INST1_PASSWORD:設定 db2inst1 使用者密碼。
  • LICENSE=accept:接受授權條款,很多官方或半官方 image 都會要求。

這個方式會先進入 container shell,後續再手動把 DB2 啟起來。

進 container 後的基本操作

1
2
3
4
5
su - db2inst1
db2start
db2sampl
db2 connect to sample
db2 "SELECT * FROM STAFF"

說明如下:

  • su - db2inst1:切到 DB2 instance 使用者。
  • db2start:啟動 DB2 instance。
  • db2sampl:建立 sample database。
  • db2 connect to sample:連到 sample database。
  • db2 "SELECT * FROM STAFF":拿 sample table 測試查詢。

如果最後能正常查到資料,代表這套測試環境基本上已經能用了。

這套流程的實際價值

我當時只是要快速驗證一些 DB2 行為,所以 sample database 已經很夠用。這種方式的好處是:

  • 不用先安裝一整套主機環境。
  • 可以很快做 SQL 測試。
  • 測完就刪 container,不太會污染本機。

尤其當你只是想確認某個型態、函式或 driver 行為,這種「能用就好」的測試環境非常省時間。

我會另外提醒的幾件事

1. image 版本要再確認

這篇用的是 ibmcom/db2express-c:latest。如果你現在是新環境,建議先回頭確認官方目前還維護哪個 image、授權條款怎麼寫,因為 DB2 image 歷史比較長,版本差異也可能影響行為。

2. 不要把測試啟動指令直接當正式部署

docker run -it ... bash 這種方式很適合實驗,但如果要重複使用,通常會想改成:

  • 指定 container 名稱
  • 掛 volume
  • 分離式啟動
  • 補上 restart policy

例如:

1
2
3
4
5
6
docker run -d \
	--name db2-test \
	-p 50000:50000 \
	-e DB2INST1_PASSWORD=db2inst1-pwd \
	-e LICENSE=accept \
	ibmcom/db2express-c:latest

之後再進去:

1
docker exec -it db2-test bash

這樣會比較接近平常維運習慣。

3. 測資料型態時,最好順手驗證 driver 與 ORM

如果你這次像我一樣,是為了驗證 DB2 對欄位型態的行為,那最好不要只看 SQL 查詢結果,還要順手確認:

  • JDBC / ODBC driver 取值結果
  • ORM mapping 是否正常
  • migration 工具產出的 DDL 是否一致

因為很多問題不是 DB 本身不支援,而是應用程式層對型態的轉換方式不同。

小結

如果只是想快速玩 DB2、驗證 SQL 或做相容性測試,用 Docker 起一套 sample 環境真的很方便。我自己這次就是為了快速驗證資料型態而用這種方式,省下不少前置安裝時間。

之後如果有更進一步玩到 schema 匯入、資料持久化或 driver 行為,再另外補比較完整的紀錄。

參考來源: