主題:
由於在網上找到的關於基於docker安裝的oracle11R2的相關介紹有些地方不是那么明白,在安裝的時候比較尷尬,因此為了以后方便使用,今日特做了個實際操作, 並把主要步驟進行記錄;
約定:
linux: centos7
docker: 19.03.12
oracle: 11R2
安裝目錄: /oracle/install
工具: yum install -y zip unzip
oracle鏡像:jaspeen/oracle-11g
准備:
1.linux安裝docker ,安裝過程省略;
2.下載oracle11R2
linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
下載鏈接:https://pan.baidu.com/s/196NODEjBvpri6xXo2JAFVw ,提取碼:l5ss
3.復制安裝包
將上面下載的安裝包解壓到/oracle/install/目錄下面,並解壓(默認解壓到database目錄)。
4.鏡像下載
docker pull jaspeen/oracle-11g
5.下載檢測
docker images
至此,我們的鏡像已經成功下載;由於oracle許可限制等原因,當前鏡像並不能直接啟用運行,該鏡像僅僅完成了關於oracle的有關配置,實際安裝還需要用到我們的安裝包(解壓出來的database)
6.鏡像安裝腳本
#!/usr/bin/env bash set -e source /assets/colorecho trap "echo_red '******* ERROR: Something went wrong.'; exit 1" SIGTERM trap "echo_red '******* Caught SIGINT signal. Stopping...'; exit 2" SIGINT if [ ! -d "/install/database" ]; then echo_red "Installation files not found. Unzip installation files into mounted(/install) folder" exit 1 fi echo_yellow "Installing Oracle Database 11g" su oracle -c "/install/database/runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /assets/db_install.rsp" /opt/oracle/oraInventory/orainstRoot.sh /opt/oracle/app/product/11.2.0/dbhome_1/root.sh
通過上面的鏡像安裝腳本可知,在制作鏡像的時候,里面默認回到/install/database/目錄下面去找安裝文件,因此主機里面的Oracle安裝目錄需要映射到容器里面,才能正確的安裝。
安裝:
1.安裝命令
命令解釋:
privileged 給這個容器特權,安裝oracle可能需要操作需要root權限的文件或目錄 name 給這個容器名一個名字 p 映射端口 v 掛在文件到容器指定目錄 (/server/install/database 對應容器 /install/database) jaspeen/oracle-11g 代表啟動指定的容器
安裝命令:
docker run --privileged --name oracle11g -p 1521:1521 -v /server/install:/install jaspeen/oracle-11g
2.開始安裝
根據上面的安裝命令,我們約定主機的1521端口應和到容器的1521端口;8080端口映射到容器的8080端口;此處暫時不映射8080端口,因此執行上面的安裝命令,Oracle將安裝到容器里面,接下來開始安裝:
接下來就是自動安裝的一個過程,由於其按照時間比較久,因此開始安裝后請耐性等待(由於本次是夜間安裝,因此后半夜睡覺了,也不知道什么時候安裝完成,早上起來關機收成果)
3.安裝驗證
經過了一個晚上,接下來該是驗證成果了;
首先檢測容器是否正常啟動 docker ps
通過截圖,我們知道容器已經安裝成功了。
解鎖賬號,修改密碼
進入容器: docker exec -it oracle11g /bin/bash
切換賬號: su oracle
nosql登錄: sqlplus / as sysdba
alter user scott account unlock;
commit;
alter user scott identitfied by 123456;
conn system/manager as sysdba;
alter user system identified by manager;
alter user sys identified by manager;
exit ;(退出sql)
此致已基本驗證了我們的容器是可以正常運行的;
4.提交鏡像
由於我們在工作中根據實際需要需要快速的搭建oracle的環境,但是不能每次都這么搭建,否則太慢了,還費人力、精力,接下來我們把剛才的容器提交為新的鏡像,備份鏡像以供實際需要。
從容器創建鏡像口令:
docker commit [options] 容器ID 鏡像名稱:版本號,具體參數如下:
-a "提交作者"
-c 使用Dockerfile指令創建容器
-m 提交時的說明文字
-p commit時暫停容器
根據容器制作鏡像:
鏡像取名 oracle11g-installed
docker commit -p -a "liwenxue" -m "first oracle11g image" oracle11g-installed:v0
驗證鏡像制作結果:
檢查新鏡像:
查看鏡像信息:
docker image inspect toracle11g-installed:v0
截圖顯示,已經生成了鏡像。
停用原版容器,根據新的鏡像生產新的容器,並做好端口、數據目錄映射
5.安裝結束
至此基本安裝結束。
6.鏡像應用
停止模板容器:docker stop oracle11g
啟動新的容器:
無目錄映射:
docker run --name test-oracle11g -lnt --restart=always -p 15210:1521 -p 15211:8080 -d oracle11g-installed (不帶目錄映射)
有目錄映射:
docker run --name test-oracle11g -lnt --restart=always -p 15210:1521 -p 15211:8080 \ -v /opt/oracle/app/oradata/orcl:/opt/oracle/app/oradata/orcl \ -v /opt/oracle/dpdump:/opt/oracle/dpdump \ -d oracle11g-installed
端口放行15210,15211
連接測試
此時提示一個類似: ora-01033 oracle initialization 這樣的錯誤信息,顯然沒有成功連接,接下來我們就來解決這個問題;
docker exec -it test-oracle11g /bin/bash #進入容器
su oracle #切換oracle賬號
sqlplus nolog #使用命令模式
conn sys/manager as sysdba #連接數據庫
shutdown normal #關閉數據庫oracle例程服務
startup mount #重啟oracle例程服務
alter database open; #打開數據庫(本例中已成功運行)
如果打開數據庫還是失敗,則根據提示繼續找原因(有很多種,比如dbf文件刪除,dbf文件損壞)
(
dbf文件損壞類型:修復口令參考如下(此處以XXX.DBF為例):
alter database datafile 6 offline drop;
drop user XXX cascade;
)
操作截圖:
再次連接測試:
至此,基於Docker Orcle11R2 容器成功安裝.
重新生成鏡像
docker commit -p -a "liwenxue" -m "修正db連接,恢復正常使用" f5addb819024 oracle11g-installed:v1
7.導出鏡像
省略
8.導入鏡像
省略
9.上傳鏡像
省略
10.其他應用
省略