Может ли Docker помочь мне установить базу данных Oracle 11g на Ubuntu?

Может ли Docker помочь мне установить базу данных Oracle 11g на Ubuntu?

Мы боремся с распространенной проблемой, пытаясь предоставить нашим разработчикам экземпляр Oracle 11g для тестирования. Наши стандартные агенты сборки основаны на Ubuntu 12.04, но Oracle поддерживает только ОС на базе RedHat.

В сети гуляют некоторые советы по установке Oracle на Ubuntu, но они кажутся очень хрупкими и их можно реализовать методом проб и ошибок.

Мы хотим избежать необходимости поддерживать всю конфигурацию сервера сборки Puppet поверх RedHat(/CentOS) только для поддержки Oracle, поэтому я начал задаваться вопросом, можем ли мы использовать Docker для предоставления среды, подобной RedHat, необходимой только для Oracle поверх наших стандартных систем Ubuntu. Идея заключается в том, что Oracle будет работать в своем собственном контейнере, но остальная часть агента сборки будет по-прежнему работать на стандартной Ubuntu, имея возможность общаться с Oracle по TCP.

Я знаю, что такое LXC и чем они отличаются от полноценной виртуализации, такой как KVM/VirtualBox и т. д., но мне было интересно, возможно ли это вообще.

Спасибо.

решение1

Вот моя вилка:

  • Уменьшить размер изображения с 3,8 ГБ до 825 МБ
  • Инициализация базы данных вынесена из фазы построения образа
  • Теперь база данных инициализируется при запуске контейнера без смонтированных файлов базы данных.
  • Поддержка повторного использования медиаданных вне контейнера
  • Добавлено плавное завершение работы при остановке контейнера.
  • Удален 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 об/мин.
  2. Конвертируйте rpm в deb с помощью alien.
  3. «Извлеките» deb-пакет с помощью команды dpkg-deb.
  4. Измените deb-скрипты:
    • Измените [ "$1" != "1" ] на [ "$1" != "install" ] в начале preinst.
    • Измените [ "$1" = "1" -o -z "$2" ] на [ "$1" = "configure" -a -z "$2" ] в начале postint.
    • Измените [ "$1" = "0" ] на [ "$1" = "remove" -o "$1" = "purge" ] в prerm и postrm.
    • Измените команду «chkconfig» на «update-rc.d» в postinst и prerm.
    • В скрипте инициализации: удалить абсолютный путь некоторых системных команд; исправить /etc/sysconfig/oracle-xe на /etc/default/oracle-xe; исправить /var/lock/subsys на /var/lock; и так далее...
    • Добавьте зависимости в файл управления: bc и libaio1.
  5. Соберите deb-пакет с помощью команды deb.

Теперь у вас есть deb-пакет Oracle XE 11g. Установите его!

Но проблема все еще есть: /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

решение3

Я использую следующееобраз докерас хорошим уровнем успеха.

Запустите его с помощью:

 docker pull wnameless/oracle-xe-11g

и

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

решение4

Это определенно осуществимый подход. Мы используем Ubuntu 14.04 для наших хост-машин и запускаем несколько экземпляров Oracle 11g в контейнерах Docker для целей разработки.

В настоящее время (Docker 1.5) для 11g и 12c основной проблемой является жестко заданный предел разделяемой памяти Docker.Выпуск №2606. В настоящее время для этого есть два решения:

  1. Используйте docker run --privileged ...и перемонтируйте /dev/shm с большим объемом памяти перед запуском экземпляра
  2. Измените и пересоберите Docker самостоятельно. Для этого случая я собрал Dockerfile для 12c, который позволяет создать образ за один раз:https://github.com/arpagaus/docker-oracle-12c

Связанный контент