在Docker中安装配置Oracle12c并实现数据持久化
在ubuntu中按安装Docker Ce
在docker 中获取oracle镜像信息
$ docker search oracle1
选定镜像,并pull到系统中,一定要先配置加速,不然超级慢
eric@userver:~$ docker pull sath89/oracle-12c
Using default tag: latest
latest: Pulling from sath89/oracle-12c
863735b9fd15: Downloading 5.25MB/65.67MB
4fbaa2f403df: Download complete
44be94a95984: Download complete
a3ed95caeb02: Download complete
b8bc6e8767ee: Download complete
c918da326197: Download complete
448e1619a038: Download complete
faadd00cf98e: Downloading 2.625MB/2.768GB
94c8eec9fdf0: Download complete
58e66654f771: Downloading 1.3MB/4.437MB12345678910111213
查看已经下载的镜像
eric@userver:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sath89/oracle-12c latest 17cd1ab9d9a7 12 days ago 5.7GB
hello-world latest f2a91732366c 4 weeks ago 1.85kB1234
列出运行中的容器
#暂时没有运行中的
eric@userver:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
123456
使用oracle12c创建容器
方式一:创建端口并运行,这样每次退出数据不会保留
$ docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c1
方式二:用数据卷实现容器和数据的有效分离,实现数据持久化
$ docker run -d -p 8080:8080 -p 1521:1521 -v /local_dir:/data sath89/oracle-12c
#参数 -d 后台运行容器,并返回容器ID ; -p 指定端口 , -v 指定数据卷位置
1234
数据卷的特点:
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
...
#其实 本地卷中的数据和容器中是同步的
1234567891011121314151617181920212223242526272829303132
删除容器,数据不会一同删除
$ docker stop 7485d22f2fd5
$ docker rm 7485d22f2fd5
$ ls oradata #数据依然存在
audit checkpoints diag oradata test.txt
12345
重新启动一个容器,挂载该数据卷
$ sudo docker run -it --name oracle2 -v /home/eric/oradata:/datatest sath89/oracle-12c
#--name 指定一个名字,不指定会默认随机分配一串字符
$ sudo docker exec oracle2 ls /data_test
$ docker exec oracle2 ls /data_test
... test.txt ...
#可以同样看到数据
123456789101112
运行该容器
eric@userver:~$ docker exec -it 7485d22f2fd5 /bin/bash
root@7485d22f2fd5:/12
连接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
————————————————
|