在 Docker 中建立 Oracle 12c 的測試主機
Oracle 官方有提供 Database Server 12c 的 Docker 映像檔供開發者使用。
利用 Docker 的 Oracle 容器來進行開發測試相當方便。
基本資訊
Oracle Database Server Docker 映像檔包含執行在 Oracle Linux 7 上的 Oracle Database Server 12.2.0.1 Enterprise 版。
範例的執行環境
- Windows 10 Pro
- Docker toolbox 18.06.1-ce
完成使用授權
Docker Store 以商業運作為導向,所有的內容都需經過審核,同時提供開源及商用使用環境。
不同於一般利用公共的 Docker Hub 發佈或取得的映像檔,使用者無需登入即可透過 docker search 命令來查詢映像檔,並利用 docker pull 命令來將它下載到本地。Oracle 將資料庫映像檔發佈在 Docker Store 中,要求必須登入 Docker 帳號並填寫用戶基本資料及同意條款後,才能免費合法使用。
同意條款
Oracle Database 的 Docker Store 頁面
https://store.docker.com/images/oracle-database-enterprise-edition
選擇 Process to Checkout
進入同意頁
完成同意後,會顯示映像檔使用說明及 pull 命令
取得映像檔
由 Docker client 登入 Docker 帳號
1 | $ docker login |
下載映像檔
由於映像檔很大 (3.44GB),雖然第一次執行時也會自動下載,但還是先下載好再執行較好掌握。1
$ docker pull store/oracle/database-enterprise:12.2.0.1
確認映像檔1
2
3
4$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 4ab4c602aa5e 2 weeks ago 1.84kB
store/oracle/database-enterprise 12.2.0.1 12a359cd0528 13 months ago 3.44GB
建立並執行容器
以名稱 OraDevDB 來建立容器1
$ docker run -d -it --name OraDevDB -p 1521:1521 store/oracle/database-enterprise:12.2.0.1
- -p : 將 Oracle 預設的對外 port 1521 開出來。
以 docker ps 看看容器執行狀況1
2
3$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cfa8c6628ef store/oracle/database-enterprise:12.2.0.1 "/bin/sh -c '/bin/ba…" 31 seconds ago Up 3 minutes (healthy) 0.0.0.0:1521->1521/tcp, 5500/tcp OraDevDB
- CONTAINER ID 為 4cfa8c6628ef。
- STATUS 要等到為 healthy 才能正常使用。
執行容器中的 SQL*Plus
建立測試帳號並取得必要資訊
預設連接帳號為 sys 密碼為 Oradoc_db1。
1 | $ docker exec -it OraDevDB bash -c "source /home/oracle/.bashrc; sqlplus /nolog" |
以預設帳號連接後,建立測試帳號 tuser 密碼 tuser,並給定足夠的權限。再找出 service names 備用。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24SQL> connect sys as sysdba;
Enter password:
Connected.
SQL> alter session set "_ORACLE_SCRIPT"=true;
Session altered.
SQL> create user tuser identified by tuser;
User created.
SQL> GRANT CONNECT, RESOURCE, DBA TO tuser;
Grant succeeded.
SQL> select value from v$parameter where name='service_names';
VALUE
--------------------------------------------------------------------------------
ORCLCDB.localdomain
SQL> disconnect;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
- 預設 service names 為 ORCLCDB.localdomain
離開 SQL*Plus
1 | SQL> exit |
用 SQL Developer 測試
Oracle SQL Developer 是 Oracle 提供的免費的 Oracle 資料庫 IDE,利用它來操作 Oracle 除了方便外,更可以確認從外部連接是沒問題的。
下載 SQL Developer
要先登入免費的 Oracle 帳戶才能進行下載,沒帳戶要先註冊加入。
到 SQL Developer Downloads 依作業系統及有無 JDK 選擇要下載的項目,現在最新版本為 18.2。
下載完成後,解壓縮到方便使用的目錄下即可。
找出 docker engine IP
如果是利用 docker toolbox 執行 docker,docker 主機的 IP 就不是 localhost(127.0.0.1) 而是在 VM 上,要下 docker-machine ip
命令取得,或是在開啟 Docker Quickstart Terminal 時會顯示。1
2$ docker-machine ip
192.168.99.100
連接 Oracle
到 sqldeveloper 目錄下,執行 sqldeveloper.exe。如果是未帶 JDK 的版本,第一次執行會要求指到 JDK 目錄,安裝 64 位元版本 Java 就到 C:\Program Files\Java 目錄下找。
進入 “歡迎頁面” 選擇 手動建立連線
,輸入已收集好的資訊,點選 “連線”。
建立測試資料
利用介面功能或 SQL 命令建立資料表 AppUser 並新增 2 筆資料。
可以再回到 SQL*Plus 中,以 tuser 連接後查詢到剛剛新增的表格及資料。1
2
3
4
5
6
7
8
9
10
11SQL> connect tuser
Enter password:
Connected.
SQL> select * from AppUser;
ID NAME
---------- ----------------------------------------------------------------
1 John
2 Mary
SQL>
以上,開工吧!
參考資料及圖片來源
補充