1. 程式人生 > >使用Docker安裝oracle 11g

使用Docker安裝oracle 11g

使用Docker安裝oracle 11g

  •  2019-07-30
  •  
  •  0
  •  
  •   0

一,簡介

Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關係資料庫管理系統。

藉助docker,安裝oracle不再困難,只需要幾步即可。

需要注意,在參考本文章之前,需要具備操作docker的基礎,怎麼使用docker,可以參考這裡

二,安裝

2.1、安裝oracle 11g映象到docker

2.1.1、搜尋符合條件的映象

docker search oracle

NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
oraclelinux                           Official Docker builds of Oracle Linux.         573                 [OK]
jaspeen/oracle-11g                    Docker image for Oracle 11g database            99                                      [OK]
oracle/openjdk                        Docker images containing OpenJDK Oracle Linux   55                                      [OK]
……

2.1.2、選擇安裝 jaspeen/oracle-11g,等待下載安裝完成

docker pull jaspeen/oracle-11g

2.1.3、檢視下載好的映象

docker images

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
jaspeen/oracle-11g         latest              0c8711fe4f0f        3 years ago         281MB

注意,這個映象沒有直接安裝好oracle,他幫我們配置好了環境,提供了安裝指令碼,我們只需要按照要求把oracle的安裝目錄配置好,啟動映象,即可

2.2、準備oracle 11g安裝檔案

2.2.1、下載oracle 11g安裝檔案

oracle 官網 下載所需要的安裝包,這裡我們以oracle 11g 為例子,分別下載 linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip兩個壓縮包,下載完成後解壓到home目錄(如下目錄結構)


  home
    └─database
        ├─doc
        ├─install
        ├─response
        ├─rpm
        ├─sshsetup
        ├─stage
        ├─runInstaller
        └─welcome.html

2.3、安裝oracle

2.3.1、注意事項

為什麼要解壓成上面的目錄結構,我們先來看看jaspeen/oracle-11g映象提供的安裝指令碼

#!/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目錄,如果不存在會給出提示Installation files not found. Unzip installation files into mounted(/install) folder

2.3.2、啟動映象(執行安裝oracle)

命令的解釋:

  • docker run 啟動容器的命令
  • privileged 給這個容器特權,安裝oracle可能需要操作需要root許可權的檔案或目錄
  • name 給這個容器名一個名字
  • p 對映埠
  • v 掛在檔案到容器指定目錄 (/home 對應容器 /install/database)
  • jaspeen/oracle-11g 代表啟動指定的容器
docker run --privileged --name oracle11g -p 1521:1521 -v /home:/install jaspeen/oracle-11g

Database is not installed. Installing...
Installing Oracle Database 11g
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 47303 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 1023 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2019-04-17_08-14-23AM. Please wait ...
You can find the log of this install session at:
 /opt/oracle/oraInventory/logs/installActions2019-04-17_08-14-23AM.log
 ……

這個安裝過程會很漫長,日誌也很多,這裡只提供部分。注意到日誌裡有 100% complete 列印,代表oracle安裝成功

2.3.3、安裝完成

再次檢視執行狀態,oracle已經啟動完成

docker ps -a

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS                                                                             NAMES
7f53f07c93e5        jaspeen/oracle-11g   "/assets/entrypoint.…"   About an hour ago   Up About an hour            0.0.0.0:1521->1521/tcp, 8080/tcp                                                  oracle11g

2.3.4、其他需要注意的,如果日誌長時間沒有更新,檢查docker是否已經死掉

檢視docker的狀態

docker ps -a
Error response from daemon: An invalid argument was supplied.

如果出現如上提示,表示docker已經死掉,我們只需要重新執行安裝步驟,讓oracle安裝完成

ps:根據我的猜測,我給docker分配的資源不夠導致的,我重新把docker的記憶體和cpu調高一點後oracle順利安裝完成。

docker rm oracle11g
docker run --privileged --name oracle11g -p 1521:1521 -v oracleinstall:/install jaspeen/oracle-11g

三,配置

預設scott使用者是被鎖定的,我們需要解鎖,通過資料庫工具即可成功連線到oracle

3.1,連線到容器,

docker exec -it oracle11g /bin/bash

3.2,切換到oracle使用者,然後連線到sql控制檯

[root@7f53f07c93e5 /]# su - oracle
Last login: Wed Apr 17 08:29:31 UTC 2019
[oracle@7f53f07c93e5 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 17 09:29:49 2019

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

3.3,解鎖賬戶

SQL> alter user scott account unlock;
User altered.
SQL> commit;
Commit complete.
SQL> conn scott/tiger
ERROR:
ORA-28001: the password has expired
Changing password for scott
New password:
Retype new password:
Password changed
Connected.
SQL> 

3.4,使用dataGrip連線oracle資料庫

datagrid連線oracle

資料庫安裝完成後,使用預設的sid為orcl,埠為1521,scott/tiger即可連線 

Reference:

  • https://zh.wikipedia.org/wiki/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93
  • https://hub.docker.com/r/jaspeen/oracle-11g
  • https://stackoverflow.com/questions/37468788/what-is-the-right-way-to-add-data-to-an-existing-named-volume-in-docker
  • https://hub.docker.com/_/busybox
  • http://blog.grayidea.cn/archives/67
  • https://blog.csdn.net/u013238950/article/de