jueves, 7 de marzo de 2019

Instalar Oracle Database 18c con Docker en Ubuntu

    El mundo tecnológico en el que vivimos cambia constantemente, es por ello que muchas tareas e instalaciones que antiguamente requerían meticulosas configuraciones y/o workarounds hoy en día han ido mejorando hasta el punto en el que llegan a ser mucho mas sencillas y mucho menos invasivas a nivel sistema operativo.

    Es por ello que este articulo abordará la instalación de una base de datos Oracle en su versión 18c, de manera sencilla y que no sobrecargue el sistema operativo con configuraciones y archivos propios del producto.



¿Qué es Docker?

    La idea detrás de Docker es crear contenedores ligeros y portables para que el software pueda ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.



Instalando base de datos Oracle 18c

    Antes de empezar, si aun no estás familiarizado con docker (aunque no es un requisito excluyente para dar seguimiento a este articulo) y aun así quieres aprender mas sobre docker... se recomienda ver la siguiente playlist de videos que cubren la mayor parte de docker muy bien explicado y en español:


Para mayor claridad, el articulo se dividirá en 2 partes: 1_Instalar Docker y 2_Instalar Base de Datos Oracle 18c.

 Aclaración: puede que los pasos descritos a continuación para instalar Docker con el paso del tiempo queden obsoletos, por lo cual puede guiarse con la documentación oficial:


1_ Instalar Docker

Instalar docker en Ubuntu: para ello, abra la terminal y ejecute los siguientes comandos:

$ sudo apt-get update

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io


Se puede verificar si la instalación de docker se realizó con exito corriendo el siguiente comando:

$ sudo docker run hello-world




2_ Instalar Base de Datos Oracle 18c

1_ Abra la terminal y ejecute los siguientes comandos:

$ sudo docker pull dockerhelp/docker-oracle-ee-18c

sudo docker run -it dockerhelp/docker-oracle-ee-18c -p 1521:1521 bash

# sh post_install.sh

    Luego de que el script anterior concluya con su ejecución, procedemos a conectarnos a la base de datos y crear un usuario de prueba para poder usar la base de datos. Para ello correr los siguientes comandos desde el container (el script nos dejara parado en usuario oracle):

$ sqlplus

user: sys as sysdba
pass: oracle

SQL> alter session set "_ORACLE_SCRIPT"=true;
Session altered.
SQL> create user TEST identified by 1234;
User created.
SQL> grant dba to TEST;
Grant succeeded.




    La IP del container se puede averiguar saliendo del container (sin apagarla) con la combinación de teclas CTRL + P y luego CTRL + Q y ejecutando el siguiente comando:

$ sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [CONTAINER_ID]

    El [CONTAINER_ID] se puede averiguar con el siguiente comando:

$ sudo docker ps





    De esta manera queda demostrado que la instalación y uso de un Docker container con la base de datos Oracle 18c es mucho mas rápida y sencilla (e incluso más practica) que si se hiciera de manera habitual adaptando y aplicando workarounds para un producto que en principio no es compatible con Ubuntu, pero con la portabilidad que brinda Docker es mucho mas manejable y administrable.

Cualquier comentario y/o duda puede ser debatida libremente y con respeto en los comentarios del presente articulo.

15 comentarios:

  1. Respuestas
    1. En el commando `$ sudo docker run -it dockerhelp/docker-oracle-ee-18c -p 1521:1521 bash` tuve que cambiarlo a `sudo docker run -p 1521:1521 -it dockerhelp/docker-oracle-ee-18c bash` debido a este error: `docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"-p\": executable file not found in $PATH": unknown.`...

      Gracias de nuevo!

      Eliminar
    2. Hola @Norman gracias por tomarte el tiempo de comentar tu experiencia. Creo que el dato será de utilidad para muchos en la comunidad. Saludos!

      Eliminar
    3. excelente me funciono con la correccion buen dia

      Eliminar
    4. A mi no me funciono ninguna de las demas opciones, me sale 'Error response from daemon: driver failed programming external connectivity on endpoint clever_montalcini (9f8a877d9c08ec1402f1ad42949387742162ba7c764a250994df1e89ea84a9fc): Bind for 0.0.0.0:1521 failed: port is already allocated.
      '

      Si alguien sabe que debo hacer estaria muy agradecida

      Eliminar
    5. Seguro ya tienes otro contenedor u otra instalación ocupando el puerto 1521 y no puede usarlo porque ya esta tomado... trata de asignarle otro puerto. Por ejemplo: -p 9521:1521 (localmente accederas por puerto 9521). Saludos!

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Buenas tardes, Muchas gracias por el tutorial , funciona sin problema.

    Pero tengo una duda, no sé si solo me pasa... pero cuando apaga la maquina, no me guarda la configuración de la base de datos. tengo que correr nuevamente los pasos de:

    $ sudo docker run -p 1521:1521 -it dockerhelp/docker-oracle-ee-18c bash

    # sh post_install.sh

    y nuevamente crear el usuario, de lo contrario, la conexión siempre me falla. Sera algo que me falta de la configuración o es el normal uso?

    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola Jonathan que bueno que te sirvio el articulo... respondiendo a tu inquietud. Esto sucede porque estas matando el cotainer y recreandolo cada vez con el comando "docker run", para que esto no suceda. Lo mas recomendable seria stopear el container e iniciarlo la proxima vez que lo vuelvas a usar.

      Esto seria, averiguar el HASH del container:
      $ docker container ls

      y luego administrar el container para stopearlo o pararlo:
      $ docker exec -d bash //para startear el container
      $ docker stop //para stopear el container

      Si no te queda claro del todo, intenta buscar algun tutorial de Docker para saber como administrar los container. Me da la senciacion que viene por este lado tu problema de que no se persisten los cambios que haces, creo que tambien deberia revisar el articulo... me parece que deberia incluir algun "volume" al container.

      Saludos!

      Eliminar
  4. Muchas Gracias, no me ayudo me salvo la vida <3

    ResponderEliminar
  5. Hola podes enseñarme como, desbloqueo la base de datos HR para hacer pruebas

    ResponderEliminar
    Respuestas
    1. Podrias intentar acceder al contenedor usando una shell bash:
      $ docker exec -it bash

      Y una vez dentro del contenedor, podrias seguir los pasos que se indican en este articulo:
      https://soajp.blogspot.com/2016/11/tip-como-crear-esquema-hr-en-base-de.html

      Salvo que para descargar el archivo ZIP con los recursos, vas a tener que ayudarte con WGET o CURL. Por ejemplo:
      $ curl -L -o resources.zip "https://drive.google.com/uc?export=download&id=0Bzt6dzPUxURYdXZhbTBia0xvc1E"
      $ wget --no-check-certificate "https://drive.google.com/uc?export=download&id=0Bzt6dzPUxURYdXZhbTBia0xvc1E" -O resources.zip

      Ya con eso deberias poder activar el schema HR.

      Saludos!

      Eliminar
    2. no quedo bien el comando docker, seria asi:
      $ docker exec -it CONTAINER_HASH bash

      Eliminar