使用 Docker 架設 DB2 環境
最近因為想測一下 DB2 對某些欄位型態的行為,例如 boolean 或相近設計在 DB2 上的表現,所以就找了一個最省時間的方式:直接用 Docker 起一套 DB2 環境來玩。
這篇不是正式生產部署指南,比較偏向「快速拉一套可操作的測試環境」,適合拿來驗證 SQL、資料型態、 JDBC 行為或 migration 腳本。
先講適用情境
這種做法適合:
- 想快速建立 DB2 測試環境。
- 要驗證 SQL 語法或資料型態。
- 不想先準備完整虛擬機。
不太適合:
- 直接當正式環境規劃。
- 還沒確認 image 版本與授權條款就拿去公司長期使用。
最快的啟動方式
我當時用的是這條指令:
|
|
幾個重點:
50000:50000:DB2 常見對外 port。DB2INST1_PASSWORD:設定db2inst1使用者密碼。LICENSE=accept:接受授權條款,很多官方或半官方 image 都會要求。
這個方式會先進入 container shell,後續再手動把 DB2 啟起來。
進 container 後的基本操作
|
|
說明如下:
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
例如:
|
|
之後再進去:
|
|
這樣會比較接近平常維運習慣。
3. 測資料型態時,最好順手驗證 driver 與 ORM
如果你這次像我一樣,是為了驗證 DB2 對欄位型態的行為,那最好不要只看 SQL 查詢結果,還要順手確認:
- JDBC / ODBC driver 取值結果
- ORM mapping 是否正常
- migration 工具產出的 DDL 是否一致
因為很多問題不是 DB 本身不支援,而是應用程式層對型態的轉換方式不同。
小結
如果只是想快速玩 DB2、驗證 SQL 或做相容性測試,用 Docker 起一套 sample 環境真的很方便。我自己這次就是為了快速驗證資料型態而用這種方式,省下不少前置安裝時間。
之後如果有更進一步玩到 schema 匯入、資料持久化或 driver 行為,再另外補比較完整的紀錄。
參考來源: