Docker可以帮助我在Ubuntu上安装Oracle 11g数据库吗?

我们正在努力尝试为我们的开发人员提供一个Oracle 11g实例来进行testing。 我们的标准构build代理基于Ubuntu 12.04,但Oracle仅支持基于RedHat的操作系统。

有一些关于在Ubuntu上安装Oracle的Oracle黑客攻击,但他们似乎是非常脆弱和一个问题。

为了支持Oracle,我们希望避免必须在RedHat(/ CentOS)之上支持整个构build服务器Puppetconfiguration,所以我开始怀疑我们是否可以使用Docker来提供仅用于Oracle的RedHat-like环境我们的标准Ubuntu系统的顶部。 这个想法是,甲骨文将运行在自己的容器,但其余的生成代理将仍然在标准的Ubuntu上运行,能够通过TCP与Oracle交谈。

我知道LXC是什么,以及它们与KVM / VirtualBox等全面虚拟化之间的区别,但是我想知道它是否仍然有可能。

谢谢。

这是我的叉子:

  • 将图像的大小从3.8G缩小到825MB
  • 数据库初始化已移出映像构build阶段
  • 现在数据库在容器启动时初始化,没有装入数据库文件
  • 媒体在容器外的重用支持
  • 在容器停止处添加正常closures
  • 删除了sshd

你可以在这里检查:
https://registry.hub.docker.com/u/sath89/oracle-xe-11g/
https://github.com/MaksymBilenko/docker-oracle-xe-11g

如果Oracle Express适合您:

  1. 下载Oracle XE 11g rpm。
  2. 转换成deb使用外星人。
  3. 使用dpkg-deb命令“提取”deb包。
  4. 修改deb脚本:
    • 在preinst开始处将[“$ 1”!=“1”]更改为[“$ 1”!=“install”]。
    • 在postint的开头处将[“$ 1”=“1”-o -z“$ 2”]更改为[“$ 1”=“configure”-a -z“$ 2”]。
    • 在prerm&postrm中将[“$ 1”=“0”]更改为[“$ 1”=“remove”-o“$ 1”=“purge”]。
    • 在postinst&prerm中将'chkconfig'更改为'update-rc.d'命令。
    • 在init脚本中:删除某些系统命令的绝对path; 修复/ etc / sysconfig / oracle-xe到/ etc / default / oracle-xe; 修复/ var / lock / subsys到/ var / lock; 等等…
    • 添加依赖到控制文件:bc&libaio1。
  5. 使用deb命令构builddeb包。

现在你有一个Oracle XE 11g的deb包。 安装它!

但是仍然有一个问题:/ dev / shm。 这里如何解决它:

  1. 注释/etc/init/mounted-dev.conf中的行:[-e / dev / shm] || ln -s / run / shm / dev / shm。
  2. 在/ etc / fstab中添加一行:shm / dev / shm tmpfs size = 2g 0 0
  3. rm -f / dev / shm; mkdir / dev / shm; 安装shm

启动Oracle XE:服务oracle-xe configure

我正在使用以下docker图像,并取得了很好的成功。

让它运行:

docker pull wnameless/oracle-xe-11g 

  docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g 

我可以确认Oracle XE在Docker中工作。 唯一的问题是,容器内的SHMconfiguration为只有65356K请参阅https://github.com/dotcloud/docker/issues/2606到目前为止唯一的解决方法是更改​​lxc模板并重新编译docker(这很容易)

这绝对是一个可行的方法。 我们在主机上使用Ubuntu 14.04,并在Docker容器中运行多个Oracle 11g实例以用于开发。

目前(Docker 1.5)对于11g和12c,主要问题是Docker的硬编码共享内存限制问题#2606 。 目前有两种解决方法:

  1. 使用docker run --privileged ...并在启动实例之前用更多的内存重新装入/ dev / shm
  2. 自己修改和重新构buildDocker。 对于这种情况,我已经为12c放置了一个Dockerfile,它允许一次性创build一个图像: https : //github.com/arpagaus/docker-oracle-12c

您可以在我的博客上逐步使用Ubuntu 14.04上的OEL 6.5 LXC Linux Containers ontop:

https://sites.google.com/site/nandydandyoracle/technologies/lxc/oracle-lxc-vlc