Loading...

Instalar Oracle en docker

Pablo Durán
Comparte el post:

Este manual es válido tanto para entornos Windows como Linux. A grandes rasgos, lo que hay que hacer es clonar el repositorio docker-images, generar a partir de él el contenedor de la base de datos en la versión que corresponda y acceder a ella. En los siguientes pasos se describe este proceso.

Las versiones de base de datos Oracle que se pueden instalar mediante este sistema a día de hoy son las siguientes:

  • Oracle Database 21c (21.3.0) Enterprise Edition, Standard Edition 2 and Express Edition (XE)
  • Oracle Database 19c (19.3.0) Enterprise Edition and Standard Edition 2
  • Oracle Database 18c (18.4.0) Express Edition (XE)
  • Oracle Database 18c (18.3.0) Enterprise Edition and Standard Edition 2
  • Oracle Database 12c Release 2 (12.2.0.2) Enterprise Edition and Standard Edition 2
  • Oracle Database 12c Release 1 (12.1.0.2) Enterprise Edition and Standard Edition 2
  • Oracle Database 11g Release 2 (11.2.0.2) Express Edition (XE)

Puedes ver esta lista actualizada dentro del repositorio en la carpeta OracleDatabase/SingleInstance.

Prerrequisitos

Para poder hacer la instalación de una base de datos oracle en docker como se indica en esta guía es necesario cumplir con lo siguiente:

  • Tener instalado docker.
  • Tener instalado git.
  • Tener una cuenta Oracle (Son gratuitas).

Descargar imagen

Oracle tiene una página en la que puedes encontrar todas las versiones de base de datos Oracle. La desventaja que tiene es que hay que tener una cuenta Oracle por lo que si no la tienes hay que creársela, es totalmente gratuito.

  1. El primer paso a realizar es acceder para descargar imagen de Oracle, y en el buscador que aparecerá en pantalla buscamos la versión que queramos instalar. En mi caso voy a instalar la versión 12c EE.
    En la siguiente imagen vemos que hay varias subversiones. Recomiendo instalar siempre la última ya que suelen traer mejoras y correcciones.
  2. Listado de versiones de imágenes
  3. A continuación, clicamos en el botón superior-derecha con nombre Continue.
  4. Dentro de la opción que hemos escogido vienen muchas cosas como son base de datos, cliente, bash, etc. Vamos a deseleccionar todas y quedarnos con la que pone Oracle Database [Versión] a secas. Y seleccionamos el sistema operativo Linux x64 ya que es el que usa docker.
  5. Listado de componentes extra a descargar
  6. Le damos a continuar, aceptamos los términos y ya podemos descargar el zip que contiene nuestra base de datos.

Instalar la imagen Oracle en Docker

Para la instalación de la imagen docker usaremos el repositorio oficial de docker-images para oracle que hemos comentado anteriormente.

  1. Abrimos un termina, nos situamos en la ruta en la que queramos descargar el repositorio y lo clonamos:
  2. git clone https://github.com/oracle/docker-images.git
  3. El zip que hemos descargado antes lo movemos al interior del repositorio a la versión que toque dentro de docker-images/OracleDatabase/SingleInstance/dockerfiles/. En este caso como estamos instalando 12c el archivo tiene que ir dentro de la carpeta 12.2.0.1. No descomprimir el archivo.
  4. Renombremos el archivo zip con la estructura LINUX.X64_[num-versión]_db_home.zip que en nuestro caso será LINUX.X64_12201_db_home.zip.
  5. Para crear la imagen de Oracle hay que tener varias cosas en cuenta al lanzar el script:
    1. Indicar versión de Imagen con el -v.
    2. Indicar tipo de edición:
      • Enterprise Edition -e
      • Standard Edition 2 -s
      • Express Edition -x
    3. En el caso de no querer una validación de MD5 o nos salte un error en este tendremos que añadir -i para saltárnosla.
  6. Nos quedamos en la carpeta dockerfiles del repositorio y ejecutamos el script de la siguiente forma:
  7. ./buildContainerImage.sh -v 12.2.0.1 -i -e

    Si obtenemos un error del tipo “Got permission denied while trying to connect to the Docker daemon socket”, es por un problema de permisos de docker en linux por lo que ejecutamos lo siguiente:

    sudo chmod 666 /var/run/docker.sock
  8. Una vez creado podremos ver la información del contenedor ejecutando docker images. Nos aparece el primero del listado debido a que es el último que ha sido creado.
  9. Para crear el contenedor a partir de la imagen creada anteriormente ejecutamos un docker run con el nombre de la imagen y algunos parámetros extra como son el nombre del contenedor, contraseña y puertos a usar:
  10. docker run --restart always --name oracle12c -p 1521:1521 -p 5500:5500 -e ORACLE_CHARACTERSET=UTF8 -e ORACLE_PWD=admin oracle/database:12.2.0.1-ee

Acceder a la base de datos

Hay muchas formas de acceder a la base de datos. Vamos a mostrar como acceder con sqlplus que viene instalado dentro del contenedor y con un gestor de base de datos externo.

Acceder con sqlplus

  1. Revisar si el contenedor está en marcha:
  2. docker ps

    Nos tiene que aparecer todos los datos del contenedor en el caso de que esté iniciado. Si no lo está podemos ver los contenedores que tenemos y arrancarlos de esta forma:

    docker ps -a
    docker start [nombre del contenedor]
  3. Una vez el contenedor está en marcha se puede acceder a el:
  4. docker exec -it oracle19c /bin/bash
  5. Le damos valor a la variable ORACLE_SID:
  6. export ORACLE_SID=ORCLCDB
  7. Accedemos a la base de datos con sqlplus y el usuario SYSTEM. La contraseña en este caso es admin pero es la que hayas dado a ORACLE_PWD al hacer el docker run:
  8. sqlplus system/admin as SYSDBA

Con esto yaestamos dentro de la consola de sqlplus y podemos ejecutar las sentencias SQL que queramos. Para salir de sqlplus escribimos exit y estaremos en la consola del contenedor, para salir de ésta volvemos a ejecutar exit y ya estaremos en la consola de nuestro terminal.

Acceder con gestor externo

Todos los gestores de base de datos crean la conexión a la base de datos de la misma forma. Los datos para acceder a nuestra base de datos son los siguientes:

  • Host: localhost (Si da error probar con 127.0.0.1)
  • Puerto: 1521
  • SID: ORCLCDB
  • Usuario: SYS as SYSDBA
  • Contraseña: admin (La contraseña es la que hayas dado a ORACLE_PWD al hacer el docker run).