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 進入同意頁
Checkout

完成同意後,會顯示映像檔使用說明及 pull 命令
Accepted

取得映像檔

由 Docker client 登入 Docker 帳號

1
2
3
4
5
6
7
8
9
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: username
Password:
WARNING! Your password will be stored unencrypted in C:\Users\winname\.docker\config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

下載映像檔

由於映像檔很大 (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
2
3
4
5
6
7
$ docker exec -it OraDevDB bash -c "source /home/oracle/.bashrc; sqlplus /nolog"

SQL*Plus: Release 12.2.0.1.0 Production on Fri Sep 28 16:27:39 2018

Copyright (c) 1982, 2016, Oracle. All rights reserved.

SQL>

以預設帳號連接後,建立測試帳號 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
24
SQL> 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
2
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

用 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 目錄下找。

進入 “歡迎頁面” 選擇 手動建立連線,輸入已收集好的資訊,點選 “連線”。
連線 OrdDevDB

建立測試資料

利用介面功能或 SQL 命令建立資料表 AppUser 並新增 2 筆資料。
AppUser 資料2筆

可以再回到 SQL*Plus 中,以 tuser 連接後查詢到剛剛新增的表格及資料。

1
2
3
4
5
6
7
8
9
10
11
SQL> connect tuser
Enter password:
Connected.
SQL> select * from AppUser;

ID NAME
---------- ----------------------------------------------------------------
1 John
2 Mary

SQL>

以上,開工吧!

參考資料及圖片來源

  1. Oracle Database Enterprise Edition
  2. 技巧:Docker中的Oracle 12c鏡像安裝
  3. oracle 12c 建立測試環境 #1:創建表空間

補充

  1. Oracle Database in Docker - Gerald Venzl