Может ли 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 и т.д., Но мне было интересно, возможно ли это все еще.

Спасибо.

Если Oracle Express подходит для вас:

  1. Загрузите Oracle XE 11g rpm.
  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" = "удалить" -o "$1" = "очистить" ] в 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=2g 0 0
  3. rm -f /dev/shm; mkdir /dev/shm; монтировать shm

Запуск Oracle XE: настройка службы oracle-xe

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

  • Уменьшите размер изображения с 3,8 Г до 825 МБ
  • Инициализация базы данных вышла из фазы построения образа
  • Теперь база данных инициализируется при запуске containeer без смонтированных файлов базы данных
  • Поддержка повторного использования носителей за пределами контейнера
  • Добавлено изящное завершение работы при остановке контейнера
  • Удален sshd

Вы можете проверить здесь:
https://registry.hub.docker.com/u/sath89/oracle-xe-11g/
https://github.com/MaksymBilenko/docker-oracle-xe-11g

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

Заставьте его работать с:

 docker pull wnameless/oracle-xe-11g

и

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

Я могу подтвердить, что Oracle XE работает в Docker. единственная проблема заключается в том, что внутри контейнера shm настроен только на 65356ksee https://github.com/dotcloud/docker/issues/2606Единственным обходным путем на данный момент является изменение шаблона lxc и перекомпиляция docker (что несложно).

Это, безусловно, осуществимый подход. Мы используем 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

Вы можете использовать контейнеры OEL 6.5 LXC Linux поверх Ubuntu 14.04, как описано шаг за шагом здесь, в моем блоге:

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

Если вы ожидаете получить какую-либо поддержку от Oracle по этому вопросу, забудьте об этой идее…

Oracle RDMS - это монстр… Это НЕ должно быть просто, установите это здесь и используйте базу данных по своему усмотрению. Это напряженно, и oracle хочет, чтобы вы это знали. Если ваши разработчики действительно привязаны к ubuntu, я бы попытался переоценить вашу потребность в Oracle 11g (если вам не нужен корпоративный дистрибутив, вам, вероятно, не нужна корпоративная RDMS). Это звучит ужасно похоже на то, что вы используете KISS с агентом сборки и забываете абсолютно обо всем остальном.

Я заглянул в docker только сегодня утром, и он совсем не показался мне готовым к производству. tbh.

@Sirex Мне было бы интересно услышать, какие у вас были проблемы с этим. Я проводил бета-тестирование docker с несколькими частями нашего продукта SaaS и пока не столкнулся ни с одной проблемой.

@ EEAA, просматривая их проблемы с github, когда люди просили поддержки RHEL (слон в комнате) и видели, как были комментарии, рассматривающие необходимость отказа от aufs из-за того, что ubuntu отказалась от него. Консенсус состоял в том, чтобы перейти на btrfs, который не выйдет из технического предварительного просмотра до RHEL7. Было также довольно придирчивое отношение к размещению пользовательских ядер 3.10 + в коробках RHEL, чтобы заставить docker работать. В целом мне очень понравилась концепция, но я думаю, что пройдет некоторое время, прежде чем я буду рад ее внедрить. Хотя только быстрый беглый взгляд, так что YMMV.

Чтобы уточнить - я занимаюсь разработкой программного обеспечения в компании, занимающейся разработкой чистого программного обеспечения. Это не для внутреннего использования, а для проверки того, что наши веб-приложения могут взаимодействовать с Oracle. Для этого мы используем Oracle Express и не нуждаемся в поддержке Oracle.