如何建立 Oracle database image
原本 Oracle 有提供 image 在 DockerHub上,現在已經沒有再提供了,那對於習慣用 container 做開發的我來說,非常的不方便,還好 Oracle 也有提供另外的做法可以來建立 image,接下來分享該如何操作。
Oracle 已經將很多的服務寫好 dockerfile 放到 github 上,從 OracleDatabase 目錄進入,有分 SingleInstance 及 RAC 就根據自己需求去選,這邊我是要自己開發用的所以選擇是 SingleInstance,進去以後可以看到從 11g 到 21c 都有提供,就根據自己的需要去選擇,今天會使用 19c 來做為展示。
雖然我的環境是用 windows,在 mac 的環境下是沒有差的。
Sparse checkout
整個 repo 很多內容,我們只需要 SingleInstance 底下的 dockerfiles 資料夾,選擇使用 sparse checkout 的做法,只拿部分的內容。
1 | git clone --depth 1 --sparse https://github.com/oracle/docker-images.git oracle-images |
設定只取得 OracleDatabase/SingleInstance/dockerfiles
。
1 | git sparse-checkout set "OracleDatabase/SingleInstance/dockerfiles" |
下載dbhome
Database Software Downloads | Oracle 接著到 Oracle 官網下載 dbhome,選擇好版本並且點擊 linux x86_64 來下載。
下載後的檔案放到剛剛所 clone 的專案目錄底下對應的版本資料夾中。
產生image
前置作業終於完成,可以來最作後一個步驟,產生 image 啦!
來到 dockerfiles 的資料夾,看到 buildContainerImage.sh
檔案,Oracle 已經寫好指令,讓我們可以更為方便的產生 image。
如果是在 windows 環境下,無法直接執行 bash 的檔案,可以改用 WSL 來執行。
後面加上 -v
指定版本,-t
指定 image tag 名稱。
共有三種模式可以選擇,Enterprise Edition(-e), Standard Edition 2(-s), Express Edition(-x)
1 | ./buildContainerImage.sh -v 19.3.0 -s -t oracle/database:19.3.0s |
執行會有一陣子(我的電腦最後花費 280 秒),最後看到這樣的訊息就代表成功囉。
1 | => => naming to docker.io/oracle/database:19.3.0s 0.0s |
開啟 DockerDesktop 切換到 Images 的頁面,就可以看到所產生的 image 啦!!
執行
最後就是跑起來!! (還慢慢走啊,動作)
如果想要保留檔案,可以使用 volumn 做對應 /opt/oracle/oradata
;使用環境變數指定管理者密碼 ORACLE_PWD
。
如果沒有 volumn 的話,第一次的啟動會花較多時間;有 volumn 就會蠻快的。
1 | docker run --name oracle -d -it --rm -p 1521:1521 -v ${PWD}/data19c:/opt/oracle/oradata -e ORACLE_PWD="p@ssw0rd" oracle/database:19.3.0s |
到了這個步驟,終於可以開始我們的開發啦,也不用擔心重灌系統還要先 dump/import 資料,可以大大的節省時間啦!!