在Docker中安裝配置Oracle12c並實現數據持久化
- 在ubuntu中按安裝Docker Ce
- 在docker 中獲取oracle鏡像信息
$
docker search oracle
- 1
- 選定鏡像,並pull到系統中,一定要先配置加速,不然超級慢
eric@userver:~$ docker pull sath89/oracle-
12
c Using default tag: latest latest: Pulling from sath89/oracle-
12
c
863735
b9fd15: Downloading
5.25
MB/
65.67
MB
4
fbaa2f403df: Download complete
44
be94a95984: Download complete a3ed95caeb02: Download complete b8bc6e8767ee: Download complete c918da326197: Download complete
448e1619
a038: Download complete faadd00cf98e: Downloading
2.625
MB/
2.768
GB
94
c8eec9fdf0: Download complete
58e66654
f771: Downloading
1.3
MB/
4.437
MB
- 查看已經下載的鏡像
eric
@userver
:~
$
docker images
REPOSITORY
TAG
IMAGE
ID
CREATED
SIZE
sath89/oracle-
12
c latest
17
cd1ab9d9a7
12
days ago
5.7
GB hello-world latest f2a91732366c
4
weeks ago
1.85
kB
- 列出運行中的容器
#暫時沒有運行中的
eric
@userver
:~
$
docker ps
CONTAINER
ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
使用oracle12c創建容器
- 方式一:創建端口並運行,這樣每次退出數據不會保留
$ docker run -d -p
8080
:
8080
-p
1521
:
1521
sath89/oracle
-
12
c
- 方式二:用數據卷實現容器和數據的有效分離,實現數據持久化
$ docker run -d -p
8080
:
8080
-p
1521
:
1521
-v /local_dir:/
data
sath89/oracle-12c
#參數 -d 后台運行容器,並返回容器ID ; -p 指定端口 , -v 指定數據卷位置
- 數據卷的特點:
1、可以供多個容器訪問,直接共享或者重用
2、獨立於容器周期,不會在刪除容器時刪除其掛載的數據卷
3、數據卷在容器啟動時初始化,如果容器使用的鏡像在掛載點包含的數據這些數據會復制到新的容器中
4、可以直接對數據卷里的內容進行修改
- 數據持久化
#啟動
eric@userver:~$ docker run -d -p
8080
:
8080
-p
1521
:
1521
-v /home/eric/oradata:/u01/app/oracle sath89/oracle-12c 7485d22f2fd5c5d7023407d280fb68b0251841560c121bb2be5954954aa7a698
#查看運行容器
eric@userver:~$ docker ps CONTAINER ID IMAGE COMMAND 7485d22f2fd5 sath89/oracle-12c
"/entrypoint.sh "
#查看本地目錄,發現有個oradata目錄
#在該目錄下新建測試文件
eric@userver:~/oradata$ sudo touch test.txt
#查看容器中的內容是否新增
$ sudo docker exec 7485d22f2fd5 ls /u01/app/oracle
...
test.txt
...
#其實 本地卷中的數據和容器中是同步的
- 刪除容器,數據不會一同刪除
$
docker stop
7485
d22f2fd5
$
docker rm
7485
d22f2fd5
$
ls oradata
#數據依然存在
audit checkpoints diag oradata test.txt
- 重新啟動一個容器,掛載該數據卷
$ sudo docker run -it --name oracle2 -v /home/eric/oradata:/datatest sath89/oracle-12c
/home/eric/oradata 為本機目錄 /datatest為docker的目錄
#--name 指定一個名字,不指定會默認隨機分配一串字符
$ sudo docker exec oracle2 ls /data_test $ docker exec oracle2 ls /data_test
...
test.txt
...
#可以同樣看到數據
- 運行該容器
eric
@userver
:~
$
docker exec -it
7485
d22f2fd5 /bin/bash root
@7485d22f2fd5
:/
連接oracle12c
--使用此鏡像創建的oracle用戶和密碼: systme/oracle|sys/oracle
hostname:localhost port: 1521 sid: xe service name: xe username: system password: oracle
--sqlplus 連接:
root@7485d22f2fd5:/# sqlplus system/oracle@//localhost:1521/xe SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 20 06:25:21 2017 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit PrSQL SQL>
-- 修改密碼有效期,由180天改成無限制
SQL>
ALTER
PROFILE
DEFAULT
LIMIT PASSWORD_LIFE_TIME UNLIMITED; Profile altered. SQL>
-- 解鎖用戶
alter
user
SYSTEM account unlock
docker run -d -p 8080:8080 -p 1521:1521 -v /u01/app/oracle/oradata/12c:/u01/app/oracle sath89/oracle-12c
docker exec -it f412c945d07f /bin/bash