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

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

我们正努力解决一个常见问题,即尝试为开发人员提供 Oracle 11g 实例以供测试。我们的标准构建代理基于 Ubuntu 12.04,但 Oracle 仅支持基于 RedHat 的操作系统。

网络上流传着一些关于在 Ubuntu 上安装 Oracle 的技巧,但它们似乎非常脆弱,而且很不可靠。

我们希望避免为了支持 Oracle 而不得不在 RedHat(/CentOS)上支持整个构建服务器 Puppet 配置,因此我开始怀疑我们是否可以使用 Docker 在我们的标准 Ubuntu 系统上提供 Oracle 所需的类似 RedHat 的环境。我们的想法是 Oracle 将在其自己的容器中运行,但其余的构建代理仍将在标准 Ubuntu 上运行,能够通过 TCP 与 Oracle 通信。

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

谢谢。

答案1

这是我的叉子:

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

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

答案2

如果 Oracle Express 适合您:

  1. 下载 Oracle XE 11g rpm。
  2. 使用 alien 将 rpm 转换为 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”命令。
    • 在初始化脚本中:删除一些系统命令的绝对路径;将 /etc/sysconfig/oracle-xe 修复为 /etc/default/oracle-xe;将 /var/lock/subsys 修复为 /var/lock;等等...
    • 向控制文件添加依赖项:bc & libaio1。
  5. 使用 deb 命令构建 deb 包。

现在您有了一个 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:service oracle-xe configure

答案3

我正在使用以下docker 镜像并取得良好的成功。

让它运行:

 docker pull wnameless/oracle-xe-11g

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

答案4

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

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

  1. docker run --privileged ...在启动实例之前,使用更多内存重新挂载 /dev/shm
  2. 自己修改并重建 Docker。对于这种情况,我整理了一个适用于 12c 的 Dockerfile,允许一次性创建映像:https://github.com/arpagaus/docker-oracle-12c

相关内容