
我們正在努力解決一個常見問題,即嘗試為開發人員提供用於測試的 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 適合您:
- 下載 Oracle XE 11g rpm。
- 使用alien 將 rpm 轉換為 deb。
- 使用 dpkg-deb 指令「提取」deb 套件。
- 修改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。
- 使用 deb 指令建構 deb 套件。
現在您已經有了 Oracle XE 11g 的 deb 套件。安裝它!
但仍然有一個問題:/dev/shm。這裡是如何修復它:
- 註解 /etc/init/mounted-dev.conf 中的行: [ -e /dev/shm ] || ln -s /run/shm /dev/shm。
- 在 /etc/fstab 中新增一行: shm /dev/shm tmpfs size=2g 0 0
- 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。目前有兩種解決方法:
docker run --privileged ...
在啟動實例之前使用並重新掛載/dev/shm以獲取更多內存- 自己修改重建Docker。對於本例,我整理了一個 12c 的 Dockerfile,它允許一次性建立映像:https://github.com/arpagaus/docker-oracle-12c