使用docker安裝部署oracle12.2
1. 步驟
- 在Mac上安裝docker
- 使用oracle的dockerfile,構建image
- 在docker中執行oracle例項
- 啟動,停止oracle docker容器
- 連線資料庫
2. 在Mac上安裝docker
到docker store下載docker-for-mac。
我們需要適當調整一下cpu記憶體分配,如4核CPU,16G記憶體。
點選reveal in finder
可以看到了image
的位置在哪裡;點選move disk image
把映象移到其他的路徑下。
啟動之後,你就可以在終端敲docker info檢查了。
# docker info
其實安裝完docker之後,你可以在docker store中直接搜尋oracle database 12c(12.1.0.2版本)。但是一方面這個版本是oracle 12.1版本,不是最新的12.2版本;另一方面資料庫是包含在container中,如果刪除container,也就一併刪除了database,這不是我們所想要的。我們選擇將container和database的資料檔案分離。
3. 使用oracle的dockerfile,構建image
下載完成後,找個目錄解壓,然後到oracle官網下載oracle 12.2的安裝介質linuxx64_12201_database.zip
下載完成後,將安裝介質放在docker-images-master解壓之後的目錄下:/path/to/docker-images-master/OracleDatabase/dockerfiles/12.2.0.1/,即
接著我們開始構建映象。很簡單,就一條命令:
# cd /path/to/docker-images-master/OracleDatabase/dockerfiles
# ./buildDockerImage.sh -v 12.2.0.1 -e
其中的Parameters意義如下:
-v: version to build, Choose one of: 11.2.0.2 12.1.0.2 12.2.0.1
-e: creates image based on ‘Enterprise Edition’
-s: creates image based on ‘Standard Edition 2’
-x: creates image based on ‘Express Edition’
-i: ignores the MD5 checksums
需要注意的時候,在安裝過程中需要聯網,因為他會下載oraclelinux:7-slim和yum install pre-install的包。附件是完整的安裝log。
安裝完成這一步後,我們就可以用# docker images
命令看我們的安裝情況了,可以看到oracle linux和oracle database軟體已經被裝好。
4. 在docker中部署oracle資料庫
在docker容器中執行資料庫例項,也只需要一條命令:
# docker run --name oracle \
-p 1521:1521 -p 5500:5500 \
-v /path/to/oradata:/opt/oracle/oradata \
oracle/database:12.2.0.1-ee
此時,資料檔案已經map到/path/to/oradata下,就算你刪除了container,這些資料檔案還是會被保留的。對應的log如下:
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: scXX7Cj+1m0=1
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-MAY-2017 14:25:30
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting /opt/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/c9f09116cc83/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
……
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: alter pluggable database ORCLPDB1 open
2017-05-20T14:31:25.862061+00:00
ORCLPDB1(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ORCLPDB1(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ORCLPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORCLPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2017-05-20T14:31:26.657295+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCLCDB/control01.ctl' SCOPE=SPFILE;
ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Completed: ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
如果“DATABASE IS READY TO USE!”字樣已經出現,且後面的log一直停著不動,可以在別的視窗重啟container:注意到了最後,游標會停在那裡,估計run命令最後呼叫類似docker logs -f oracle
這樣的命令,會類似如tail -f
輸出,所以我們可以直接在別的視窗執行docker stop oracle
再docker start oracle
。
5. 啟動,停止oracle docker容器
其實我們在上一步已經操作過啟停docker,即:
# docker stop oracle
# docker start oracle
如果要看alertlog,可以:
# docker logs oracle
# docker logs -f oracle
後者是以tail -f的方式檢視的。
6. 連線資料庫
我們可以通過如下命令來修改oracle密碼:
# docker exec oracle ./setPassword.sh root123*
然後我們可以用Navicat這個Mac上最流行的客戶端,連線oracle資料庫。
如果你想以傳統的方式,進入container管理資料庫,可以這樣:
# docker ps -a # 先查詢出container的container id
# docker exec -it [container id] /bin/bash # 連線oracle