1. 程式人生 > >使用docker安裝部署oracle12.2

使用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

,大小約3.2G。

下載完成後,將安裝介質放在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 oracledocker 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

7. 參考文章