Docker 可以幫助我在 Ubuntu 上安裝 Oracle 11g 資料庫嗎?

Docker 可以幫助我在 Ubuntu 上安裝 Oracle 11g 資料庫嗎?

我們正在努力解決一個常見問題,即嘗試為開發人員提供用於測試的 Oracle 11g 實例。我們的標準建置代理程式基於 Ubuntu 12.04,但 Oracle 僅支援基於 RedHat 的作業系統。

網路上有一些關於在 Ubuntu 上安裝 Oracle 的 hack,但它們似乎非常脆弱,而且是偶然的問題。

我們希望避免僅僅為了支援 Oracle 而必須在 RedHat(/CentOS) 之上支援整個建置伺服器 Puppet 配置,所以我開始想知道我們是否可以使用 Docker 來提供 Oracle 所需的類似 RedHat 的環境我們標準Ubuntu 系統的頂部。這個想法是,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”命令。
    • init腳本中:去掉部分系統指令的絕對路徑;將 /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 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

相關內容