Oracle Express Docker Container

Hola, esta publicación es para  todos aquellos que al igual que yo en ocasiones necesitamos probar alguna tecnología o realizar algún prototipo y necesitamos una base de datos de prueba, por ejemplo Oracle Express Edition con su esquema HR.

Lo primero que hay que comentar es que Oracle tiene un repositorio en Github con los archivos docker necesarios para construir imagenes de sus productos comerciales y proyectos de código libre. En especial, para esta publicación nos interesa el repositorio para bases de datos y mostraremos como construir una imagen de Oracle Database 11g Release 2 (11.2.0.2) Express Edition.

1.  Obviamente la máquina donde se vaya a llevar a cabo este proceso debe tener instalado docker.

2. Crea un directorio donde descargar archivos de instalación y configuración de la imagen, llamemoslo {ORACLE_DOCKER_DIR}.

3. Del repositorio oficial de base de datos, descarga  dockerfiles/buildDockerImage.sh y guardalo en el directorio creado en el paso 2, no olvides asignarle permisos de ejecución.

Como vamos a instalar Oracle Database 11g Release 2 (11.2.0.2) Express Edition, también debemos descargar el directorio dockerfiles/11.2.0.2.

Para poder crear la imagen, necesitamos descargar el instalador oficial de la base de datos (Express Edition Linux x86-64), el cual se puede encontrar en esta página. Almacenarlo en {ORACLE_DOCKER_DIR}/11.2.0.2

La estructura final debería ser parecida a la que se muestra a continuación:

{ORACLE_DOCKER_DIR}
|_ buildDockerImage.sh
|_ 11.2.0.2
  |_ Checksum.xe
  |_ Dockerfile.xe
  |_ checkDBStatus.sh
  |_ runOracle.sh
  |_ setPassword.sh
  |_ xe.rsp
  |_oracle-xe-11.2.0-1.0.x86_64.rpm.zip

4. Ejecuta el archivo que construye la imagen y que se encuentra almacenado en {ORACLE_DOCKER_DIR}. De acuerdo a tu instalación de docker es posible que requieras permisos de superusuario:

./{ORACLE_DOCKER_DIR}/buildDockerImage.sh -v 11.2.0.2 -x

5. Después de un par de minutos, la imagen es creada e instalada localmente. Puedes comprobarlo usando el comando: docker images

A partir de este punto ya puedes crear cuantos contenedores necesites de la imagen que se acaba de construir. Para ello, podemos ejecutar el siguiente comando. Más información acerca de los params usados aquí:

docker run -d --name oraclexe \
--shm-size=1g \
-p 1521:1521 -p 8080:8080 \
-e ORACLE_PWD=password \
-v /u01/app/oracle/oradata \
oracle/database:11.2.0.2-xe

Una vez ejecutado, la creación del contenedor configurará la base de datos de acuerdo a los parámetros establecidos. El proceso puede tomar alrededor de 3-5 minutos, como la ejecución se realizó usando la opción -d (Detached) se debe monitorear los logs del contenedor para saber cuando se puede comenzar a usar: docker container logs -tf oraclexe

Cuando veas el siguiente mensaje en los logs, quiere decir que la base de datos está lista:

#########################
DATABASE IS READY TO USE!
#########################

Ahora, si quieres activar el usuario/esquema HR puedes hacerlo conectándote a sqlplus del contenedor y ejecutando el comando que activa dicha cuenta:

docker exec -ti oraclexe sqlplus sys/password@//localhost:1521/XE as sysdba
ALTER USER hr IDENTIFIED BY password ACCOUNT UNLOCK;

Lo anterior se podría hacer en un script que se ejecute después de que se configura la base de datos, pero esto se deja al lector (Ver ejemplo).

Así como instalamos la base de datos en un contenedor docker podemos hacer lo mismo con otros productos de Oracle.

Hasta pronto.

4 opiniones en “Oracle Express Docker Container”

  1. Hola, he visto tu Blog y tienes temas muy interesantes.
    Ya he realizado el de “Glassfish para ADF Essentials” me ha sido de gran ayuda.
    Te escribo para saber si existe forma de desplegar aplicaciones ADF en JBoss de la misma forma que en Glassfish.
    La versión de JBoss que estoy esando en la EAP7.
    Saludos.

    1. Hola Gracias!

      Respecto a tu pregunta, si, seguramente podrás desplegar aplicaciones ADF en el servidor que me preguntas, pero seguramente tendrás que adaptar algunas cosas manualmente porque JBOSS no está dentro de los servidores de apps que Oracle dice soportar para ADF. Esto significa que Oracle no ha hecho las pruebas suficientes como para decir que sí lo soporta y por eso tendrías que hacerlas tú.

      Qué te puedes encontrar? Que algunas librerías (jar) que tiene tu servidor de apps no sean compatibles y entonces tengas que buscar versiones compatibles. Si tienes el tiempo para investigar esto sería bueno, pero sino, mi recomendación es que uses los servidores de apps soportados.

  2. Hola.
    En mi caso, me provoca error al correr “./{ORACLE_DOCKER_DIR}/buildDockerImage.sh -v 11.2.0.2 -x”, en la terminal en indica que no se encuentra el archivo “./ORACLE_DOCKER_DIR/buildDockerImage.sh: line 147: cd: 11.2.0.2: No such file or directory
    Could not find version directory ‘11.2.0.2’”

    Podrías explicar, porque sucede esto. En la carpeta tengo la version Oracle XE “oracle-xe-11.2.0-1.0.x86_64.rpm.zip”.

    Nota: Actualmente, Oracle ya actualiza su versión XE 18c-1.0-1.x86_64.rpm
    Alguna idea, para esta version. Gracias.

    1. Asegúrate de tener la estructura de directorios como se muestra más arriba.
      Mira que hay un directorio raíz ORACLE_DOCKER_DIR y dentro de éste hay un archivo llamado buildDockerImage.sh y un subdirectorio 11.2.0.2. Es en ese subdirectorio donde se coloca el instalador de Oracle XE y otros archivos.

Comentarios cerrados.