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