最近bug很多而且每个bug所在的版本和所依赖的环境都不同,每次fix bug都需要花费很多的时间在卸载安装配置环境上,效率及其低下,而且重复劳动 很多,想到了可以将我的本地开发环境docker化,这样可以重复利用而且可以解开服务之间的依赖,版本化,同时可以建立私有的registry, 来分享给同事使用,可以很完美的解决我遇到的问题, 下面就介绍下Docker container中安装Oracle 11gR2数据库.
Clone 我的dockerfile, 并进入工程dockerfiles/oracle11gr2目录, 记得把你的oracle安装文件也解压到这个目录下!
$ git clone https://github.com/tim-tang/dockerfiles.git
$ docker pull oraclelinux:6.6 # 下载 Oracle Linux 6.6 image
注意在开始安装前你需要修改下 set_root_pw.sh和db_install.rsp文件, 把你自己的container和数据库密码填上!
$ docker build -t localhost:5000/orcl11g . # build 你自己的image
$ df -h # 查看下你的tempfs mount的文件大小不能低于db_install.rsp中的oracle.install.db.config.starterdb.memoryLimit=512, 安装时会检查
$ sudo docker run --privileged -h orcl11g.cn.oracle.com -d -p 0.0.0.0:2222:22 -p 11521:1521 -v /dev/shm:/dev/shm -v /dockerfiles:/dockerfiles -t localhost:5000/orcl11g # 启动容器
$ ssh -p 2222 root@localhost #登陆container使用你之前设置的root用户密码
下面我们cd到/dockerfiles/oracle11gr2目录来安装oracle db.
$ su - oracle
$ cd /dockerfiles/oracle11gr2/database
$ ./runInstaller -debug -silent -force -waitforcompletion -ignorePrereq -responseFile /dockerfiles/oracle11gr2/response/db_install.rsp
等待安装完成, 使用root用户执行如下oracle自带配置脚本
$ su root
$ sh /opt/app/oraInventory/orainstRoot.sh
$ sh /opt/app/oracle/product/11.2.0/db_1/root.sh
$ sqlplus sys/rootme99@orcl as sysdba #测试安装
顺带提一下如果你是通过boot2docker来安装,那就需要配置virtualbox的端口映射了, 否则Host主机是访问不到11521端口的.
$ docker commit -m='bla bla bla' <CONTAINER_ID> localhost:5000/orcl11g
$ boot2docker stop # 这里注意一定要commit你的container再stop,
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port11521,tcp,,11521,,1521”
$ boot2docker ip # 取得docker2docker的ip 地址, 一般情况是:192.168.59.103
这里需要重启boot2docker和oracle container
$ boot2docker start
$ sudo docker run --privileged -h orcl11g.cn.oracle.com -d -p 2222:22 -p 11521:1521 -v /dev/shm:/dev/shm --name orcl -t localhost:5000/orcl11
$ ssh -p 2222 root@localhost
$ service dbora start ## 启动oracle 服务使用upstart.
$ sqlplus sys/<Your Pass>@192.168.59.103:11521/orcl # 在主机测试的时候需要使用boot2docker ip.
这里如果你有Registry repository可以直接push到registry上让别人也可以使用!
最后还要修改下__/etc/oratab__ 文件方便下次重启,修改如下:
orcl:/opt/app/oracle/product/11.2.0/db_1:Y
把N改成Y, 以后直接用dbstart起服务的时候比较方便!
23 January 2015 Suzhou, ChinaCheers!