¿Puede Docker ayudarme a instalar la base de datos Oracle 11g en Ubuntu?

Estamos luchando con un problema común de tratar de proporcionar una instancia de Oracle 11g para que nuestros desarrolladores la prueben. Nuestros agentes de compilación estándar se basan en Ubuntu 12.04, pero Oracle solo admite sistemas operativos basados en RedHat.

Hay algunos trucos sobre la instalación de Oracle en Ubuntu flotando en la red, pero parecen ser muy frágiles y una cuestión de aciertos y errores.

Queremos evitar tener que admitir una configuración de Marioneta de servidor de compilación completa en la parte superior de RedHat(/CentOS) solo para admitir Oracle, por lo que estaba empezando a preguntarme si podemos emplear Docker para proporcionar un entorno similar a RedHat requerido solo para Oracle en la parte superior de nuestros sistemas Ubuntu estándar. La idea es que Oracle se ejecute en su propio contenedor, pero el resto del agente de compilación seguirá ejecutándose en Ubuntu estándar, capaz de hablar con Oracle a través de TCP.

Sé qué son los LXC y la diferencia entre ellos y la virtualización completa como KVM/VirtualBox, etc., pero me preguntaba si aún podría ser posible.

Gracias.

Si Oracle Express es adecuado para usted:

  1. Descargar Oracle XE 11g rpm.
  2. Convierta rpm a deb usando alien.
  3. "Extraiga" el paquete deb con el comando dpkg-deb.
  4. Modificar los scripts deb:
    • Cambio [ "$1" != "1"] a [ "$1"!= "install" ] al principio de preinst.
    • Cambio [ "$1" = "1" -o-z "$2"] a ["$1 " = " configure "- a-z" $2"] al principio de postint.
    • Cambio [ "$1" = "0" ] para [ "$1 " = "eliminar" - o "$1 " = "purgar"] en prerm y postrm.
    • Cambie 'chkconfig' a ' update-rc.d ' comando en postinst &erio; prerm.
    • En el script de inicio: elimine la ruta absoluta de algunos comandos del sistema; cambie /etc/sysconfig /oracle-xe a/etc/default /oracle-xe; cambie/var/lock /subsys a/var / lock; y así sucesivamente...
    • Agregue dependencias al archivo de control: bc y libaio1.
  5. Compile el paquete deb con el comando deb.

Ahora tiene un paquete deb de Oracle XE 11g. ¡Instálelo!

Pero todavía hay un problema: /dev / shm. Aquí cómo solucionarlo:

  1. Comente la línea en /etc/init / mounted-dev.conf: [- e / dev / shm] | / ln-s / run /shm/dev / shm.
  2. Agregue una línea en /etc / fstab: shm/dev / shm tmpfs size=2g 0 0
  3. rm-f /dev / shm; mkdir /dev/ shm; montar shm

Inicio de Oracle XE: servicio de configuración de Oracle-xe

Aquí está mi tenedor:

  • Reduzca el tamaño de la imagen de 3,8 G a 825 MB
  • La inicialización de la base de datos se movió fuera de la fase de creación de la imagen
  • Ahora la base de datos se inicializa en el inicio del contenedor sin archivos de base de datos montados
  • Soporte de reutilización de medios fuera del contenedor
  • Añadido cierre del contenedor parada
  • Eliminado sshd

Puedes consultar aquí:
https://registry.hub.docker.com/u/sath89/oracle-xe-11g/
https://github.com/MaksymBilenko/docker-oracle-xe-11g

Estoy usando lo siguiente imagen de docker con un buen nivel de éxito.

Haz que corra con él:

 docker pull wnameless/oracle-xe-11g

y

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

Puedo confirmar que Oracle XE funciona dentro de Docker. el único problema es que dentro del contenedor, el shm está configurado solo para 65356ksee https://github.com/dotcloud/docker/issues/2606La única solución hasta ahora es cambiar la plantilla lxc y volver a compilar docker (lo cual es fácil)

Este es definitivamente un enfoque factible. Usamos Ubuntu 14.04 para nuestras máquinas host y ejecutamos varias instancias de Oracle 11g dentro de contenedores Docker para fines de desarrollo también.

Actualmente (Docker 1.5) para 11g y 12c, el problema principal es el límite de memoria compartida codificada de Docker Número 2606. Actualmente hay dos soluciones para esto:

  1. Utilizar docker run --privileged ... y vuelva a montar /dev / shm con más memoria antes de iniciar la instancia
  2. Modifique y reconstruya Docker usted mismo. Para este caso, he creado un Dockerfile para 12c que permite crear una imagen de una sola vez: https://github.com/arpagaus/docker-oracle-12c

Puede usar contenedores Linux OEL 6.5 LXC sobre Ubuntu 14.04 como se describe paso a paso aquí en mi blog:

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

Si espera obtener algún tipo de soporte de Oracle en esto, olvídese de esta idea…

Oracle RDMS es un monstruo… No está destinado a ser simple, instale esto aquí y use la base de datos a voluntad. Es intenso y Oracle quiere que lo sepas. Si sus desarrolladores están realmente vinculados a Ubuntu, trataría de reevaluar su necesidad de Oracle 11g (si no necesita una distribución empresarial, probablemente no necesite un RDMS empresarial). Suena como si estuvieras empleando KISS con el agente de compilación y olvidándote de absolutamente todo lo demás.

Miré en Docker esta mañana, no me pareció que estuviera listo para la producción, en absoluto. tbh.

@Sirex Me interesaría saber qué problemas tuviste con él. He estado probando la versión beta de docker con varias partes de nuestro producto SaaS y aún no me he encontrado con un solo problema.

@EEAA, navegando por sus problemas de github cuando la gente pedía soporte para RHEL (elephant in the room) y viendo cómo había comentarios que consideraban un alejamiento necesario de aufs debido a que Ubuntu lo abandonaba. El consenso fue pasar a btrfs, que no está fuera de la vista previa técnica hasta RHEL7. También hubo algunas actitudes bastante cautelosas al poner núcleos personalizados 3.10+ en cajas RHEL para hacer que docker funcione. En general, me gustó mucho el concepto, pero creo que pasará algún tiempo antes de que esté feliz de implementarlo. Sin embargo, solo una mirada rápida y superficial, así que YMMV.

Para aclarar , estoy en el negocio de ingeniería de construcción de una empresa de software puro. Esto no es para consumo interno, sino para verificar que nuestras aplicaciones web puedan comunicarse con Oracle. Usamos Oracle Express para eso y no necesitamos el soporte de Oracle.