环境准备
Docker环境
安装Docker
新建一台虚拟机,还没有安装Docker环境,执行如下命令进行安装:yum install docker -y
yum update
把机器上能升级的都升到最新版本~
安装完毕后执行docker --version
来查看docker安装版本Docker version 1.13.1, build cccb291/1.13.1
启动Docker
root
用户执行命令:systemctl start docker.service
systemctl enable docker.service
这里可能会出现一个安装成功却启动不了Docker的错误,解决方法参考下方链接:
https://blog.csdn.net/qq_1365...
Oracle镜像安装
这里有2种不同方式的镜像,简单说一下:
第一种:pull下来的镜像是脚本,这种需要自己在本机上上传Oracle安装文件,实际原理是脚本方式静默安装Oracle,只不过指令别人都帮你写好了,装完之后打包到容器里就可以使用了。
第二种:pull下来的是一个完整数据库,包含操作系统等等,相当于别人打好了一个环境供你使用,比如阿里云提供的镜像。
本文选择的是第二种方式,即使用阿里云提供的镜像
镜像拉取
执行命令:docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
等待下载,镜像大小是2.9G,解压后6.7G,需要一些时间。
启动oracle,自动启动镜像
这里要特别说一下,镜像实际上是相当于提供了你一个oracle能够运行起来的环境,也就是软件安装完毕了,但是对于我们的数据库中的数据文件,这个肯定是不能生成在镜像中的,因为如果生成在镜像中,一旦镜像有问题,我们的数据文件就丢失了,会产生不可逆的影响。
我们先用这个命令进到镜像里,做一些基础配置:
1.启动镜像docker run -p 1521:1521 --name oracle_11g -d --restart=always registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2.启动服务docker start oracle_11g
3.进入控制台设置用户信息docker exec -it oracle_11g bash
4.切换到root,因为是阿里云提供的镜像,root要用helowin密码登陆
5.修改配置文件vi /etc/profile
末尾追加export ORACLE\_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome\_2
export ORACLE\_SID=helowin
export PATH=$ORACLE\_HOME/bin:$PATH
6.使配置生效,建立sqlplus软连接source /etc/profile
ln -s $ORACLE\_HOME/bin/sqlplus /usr/bin
7.切换oracle用户,执行sqlplus / as sysdba
可以看到已经能进入到镜像中的数据库了。
用df -h命令观察一下镜像系统
可以看到,跟我们虚拟机的目录结构完全不同,说明这个镜像是连带操作系统一起打包的
一个问题
通过上面的观察,我们会发现一个问题:
镜像中可以看到这个数据库的数据文件在/home/oracle/app/oracle/oradata
下,但是就20G,而且用了14G,马上就没了,如果我基于这个镜像里新增数据文件,磁盘也不够,而且貌似现在还跟我们本身的虚拟机还没建立起来关系,如何能让我的数据文件保存在本地呢?
要达到的效果
我们要达到一个效果,就是软件用镜像的,数据文件用我们存在本地的,也就是数据持久化在本地,不受镜像所影响。
调整上面的启动命令,变为:docker run -p 1521:1521 --name oracle_11g -d -v /opt/ora_data:/home/oracle/app/oracle/oradata/mydata --restart=always registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
这里主要增加了一个-v
参数,说明一下:-v /opt/ora_data:/home/oracle/app/oracle/oradata/mydata
冒号前面,是我们本地虚拟机的真实路径,就是我画出来给数据文件的10G
冒号后面,是镜像里oracle搭建完,保存的数据文件路径,我在下面增加了一个mydata
文件夹,用来存储我们建立出来的新数据文件。
命令的意思就是,将本地的路径映射到镜像里的这个路径中去,实际生成数据文件的时候存到虚拟机的路径下。
停止镜像
更换启动方式涉及到先停掉运行的镜像
执行命令:docker stop oracle_11g
docker rm oracle_11g
执行调整后的启动命令
docker run -p 1521:1521 --name oracle_11g -d -v /opt/ora_data:/home/oracle/app/oracle/oradata/mydata --restart=always registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
查看镜像里数据文件路径
可以看到,镜像里生成了mydata
文件夹
实际测试
和PLSQL连接
修改本机oracle客户端tnsname.ora文件,新增连接:
这里要注意,service_name要填写阿里云给出来的
建立测试账号
登陆镜像oracle用户,执行命令:
create user lijian identified by lijian;
grant dba to lijian; ---DBA
grant create session to lijian; ---登陆权限,这个权限是能让这个用户能被其他程序调用,比如plsql
grant unlimited tablespace to lijian; ---使用表空间的权限
grant create table,create view,create trigger, create sequence,create procedure,create type to lijian; ---创建表,视图,触发器,序列,存储过程,type的权限。
新建立一个表空间
1.先直接输入虚拟机的路径,看看是否可以:create tablespace JLLT_DM logging datafile '/opt/ora_data/jllt_dm01.dbf' size 100M;
发现报错:
2.输入镜像里我们设置的mydata路径:create tablespace JLLT_DM logging datafile '/home/oracle/app/oracle/oradata/mydata/jllt_dm01.dbf' size 100M;
可以看到正常建立了。
3.再来看一下磁盘空间,执行df:
可以看到,mydata
文件下随着建立表空间的命令新增了一个数据文件之后,自动的就划分出来一个文件系统,并没有占用镜像里之前的目录。
4.再看一下虚拟机对应的/ora_data
目录:
可以看到,/opt/ora_data
下已经有了我们建立出来的数据文件,这样就实现了我们想要达到的目的。
比较一下和传统安装方式的差异
虽然篇幅很长,但是仔细看下来,你会发现用docker安装oracle实际非常简单,只需要几步。
- 拉取镜像
- 等待下载
- 修改配置、设定保存数据文件挂载本地磁盘
- 启动,开用。
之前写的很多,包括什么yum安装依赖,Linux系统参数设置,配置监听,建立数据库等等,在这个文章里都没有见到,是因为docker镜像里都把这些东西做好了提供出来,直接用就可以了。
还是要尽可能的拥抱新技术,当然实际生产环境如果没有外网,那就比较悲催了。。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。