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

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

Estamos luchando con un problema común al intentar 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 al azar.

Queremos evitar tener que admitir una configuración Puppet de servidor de compilación completa sobre RedHat(/CentOS) solo para admitir Oracle, por lo que comencé a preguntarme si podemos emplear Docker para proporcionar un entorno similar a RedHat requerido solo para Oracle en 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 aún se ejecutará en Ubuntu estándar, capaz de comunicarse 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.

Respuesta1

Aquí está mi tenedor:

  • Reducir el tamaño de la imagen de 3,8G a 825MB
  • La inicialización de la base de datos salió de la fase de creación de imágenes.
  • Ahora la base de datos se inicializa al iniciar el contenedor sin archivos de base de datos montados.
  • Soporte de reutilización de medios fuera del contenedor
  • Se agregó un apagado elegante al detener el contenedor.
  • sshd eliminado

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

Respuesta2

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 usando el comando dpkg-deb.
  4. Modifique los scripts deb:
    • Cambie [ "$1" != "1" ] a [ "$1" != "install" ] al comienzo de preinst.
    • Cambie [ "$1" = "1" -o -z "$2" ] a [ "$1" = "configure" -a -z "$2" ] al comienzo de postint.
    • Cambie [ "$1" = "0" ] a [ "$1" = "remove" -o "$1" = "purge" ] en prerm y postrm.
    • Cambie el comando 'chkconfig' al comando 'update-rc.d' en postinst & prerm.
    • En el script de inicio: elimine la ruta absoluta de algunos comandos del sistema; arregle /etc/sysconfig/oracle-xe en /etc/default/oracle-xe; arreglar /var/lock/subsys en /var/lock; etcétera...
    • Agregue dependencias al archivo de control: bc & libaio1.
  5. Construya el paquete deb usando el comando deb.

Ahora tiene un paquete deb de Oracle XE 11g. ¡Instalarlo!

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

Inicie Oracle XE: servicio de configuración de oracle-xe

Respuesta3

Estoy usando lo siguienteimagen acoplablecon un buen nivel de éxito.

Haz que se ejecute con:

 docker pull wnameless/oracle-xe-11g

y

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

Respuesta4

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

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

  1. Utilice 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

información relacionada