【Docker】Linux 服務器 Docker安裝Oracle數據庫

寫在前

由於本機mac空間不夠(哈哈,促進我學習),所以想搭建一個雲Oracle環境。

之前寫過windows搭建的,但是之前11g(項目要求)一直安裝不上,索性就把服務器換成linux,準備改用docker的方式來進行搭建。


總體步驟

  1. 阿里雲申請 linux 服務器,這裏我的是 CentOS 7.4 。
  2. 安裝 docker
  3. 下載 Oracle 鏡像並安裝。
  4. 導入數據(通過DMP導入,需創建表空間,用戶等)。

Docker簡介

Docker簡單來說,就是一個虛擬機,你要什麼應用,就直接輸入命令安裝,不用就直接刪掉,沙盒傻瓜式。官方logo就是鯨魚上面載着貨物,這裏我主要是用來安裝 Oraclemysqltomcat什麼的。logo如下圖:

廢話不多說,就讓我們開始吧。


安裝docker

對於 linux 服務器來說,安裝docker非常簡單,不過需要 CentOS 內核版本高於 3.10,使用uname -r 來查看。如下圖:

具體的安裝步驟,可以參考這篇博文 https://blog.csdn.net/qq_36892341/article/details/73918672,寫得很清楚,就不再贅述,如有不懂,可以留言。


下載Oracle鏡像並安裝

使用docker search oracle 來搜索 oracle 的版本,我這裏選用的是 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g ,這是阿里雲的一個 oracle 11g 版本,需要其他版本的小夥伴可以自行選擇。

使用如下命令來進行鏡像的拉取

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

拉取完後,可以使用 docker images 來查看已有鏡像

可以看到,REPOSITORY 就是鏡像名稱,TAG 是版本號,IMAGE ID 是鏡像的編號,後面的見名知意了。

啓動 Oracle 服務,使用如下命令即可,-p 將容器的 8080 端口映射到主機的 8080 端口(-p 主機端口:容器端口)

docker run --name registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g -p 1521:1521

之後使用 docker ps 來看啓動中的容器。

 這裏可以看到,oracle 服務已經啓動(即 ff94a17f84a7)


導入數據、用戶及表空間創建

1,導入 dmp 數據文件

首先,需要從本機拷貝 dmp(從其他庫導出的數據文件,包含數據 + 表結構等) 數據到 Oracle 容器中

格式:docker cp /本地文件地址 容器ID:/容器文件存儲地址,如下:

docker cp /home/oracle/data_20181104.dmp ff94a17f84a7:/home/cloudera

【注:容器ID(這裏我的是ff94a17f84a7)請換成自己的】 

2,創建表空間及用戶

使用如下命令進入 docker 容器內

docker exec -it ff94a17f84a7 bash

使用數據庫管理員方式進行登錄

這裏我使用 sqlplus,提示 command not found ,不用擔心,使用 su - oracle 切換下用戶到 oracle 用戶 ,然後 sqlplus,之後 sys/sys as sysdba 進行登錄,如下圖,登錄成功!

進行表空間的創建:

這裏分爲四小步:

1,創建臨時表空間:

create temporary tablespace TEST_DBF_TEMP tempfile '/home/oracle/data/TEST_DBF_TEMP.dbf' size 50m autoextend on next 50m maxsize 2048m;

 

2,創建正式表空間:

create  tablespace TEST_DBF datafile '/home/oracle/data/TEST_DBF.dbf' size 50M autoextend on next 50m maxsize 2048m;

 3,創建用戶並且指定表空間:

create user TEST identified by "123" default tablespace TEST_DBF temporary tablespace TEST_DBF_TEMP;

4,用戶授權:

grant create session,connect,resource,dba to TEST;

 

 3,導入 dmp 文件:

imp TEST/123 file = /data_20181210.dmp full=y;

靜靜等待導入完成即可。


PS:阿里雲記得去雲服務器控制檯開放數據庫對應的端口即可外網連接。

 配置規則 

 選擇克隆一個,輸入 docker ps oracle 對應的主機端口即可:

配上成功圖:

 Bingo!


常見問題(不定時更新):

Oracle服務無法連接&掛掉重啓

今天起來準備工作,Oracle無法連接了,可能原因:

  1. 連接時使用的sid不正確,進入容器,連接後使用 SELECT name FROM v$database; 查看SID。
  2. dokcer容器中 Oracle 掛了。
  3. 其他未知原因(如電腦沒有連網,磁盤空間滿了,用戶名密碼錯誤等)。

馬上進服務器去docker ps 查詢在線容器,但是發現Oracle還在。

於是,docker exec -it ff94a17f84a7 bash 進入到容器 。

lsnrctl start啓動監聽程序,如下圖,提示已經啓動了。

sqlplus  /nolog進入,conn / as sysdba管理員連接,然後startup ,如下圖,提示啓動成功,數據庫打開。

Bingo! 


重啓容器後,端口變更,設置固定端口

1. 查看需要修改的容器,記住 container id

docker ps -a


2. 停止容器

docker stop xxx

3. 修改容器的端口映射配置文件

vim /var/lib/docker/containers/{container_id}/hostconfig.json

"PortBindings": {
     "80/tcp": [
             {
             "HostIp": "",
             "HostPort": "8080"//宿主機ip
             }
         ]
     },

4.重啓docker服務

service docker restart


5.啓動容器

docker start xxx


Error response from daemon: Cannot XX container

這個錯誤還真的是奇葩,我放個元旦回來,就什麼都操作不了了?

解決方案

重啓 docker 服務

systemctl restart docker

重啓容器成功 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章