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.