
Мы боремся с распространенной проблемой, пытаясь предоставить нашим разработчикам экземпляр 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 вам подходит:
- Загрузите Oracle XE 11g об/мин.
- Конвертируйте rpm в deb с помощью alien.
- «Извлеките» deb-пакет с помощью команды dpkg-deb.
- Измените 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.
- Соберите deb-пакет с помощью команды deb.
Теперь у вас есть deb-пакет Oracle XE 11g. Установите его!
Но проблема все еще есть: /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: служба 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. В настоящее время для этого есть два решения:
- Используйте
docker run --privileged ...
и перемонтируйте /dev/shm с большим объемом памяти перед запуском экземпляра - Измените и пересоберите Docker самостоятельно. Для этого случая я собрал Dockerfile для 12c, который позволяет создать образ за один раз:https://github.com/arpagaus/docker-oracle-12c