Creando un Contenedor de Oracle Database desde menos de cero

Esta es una Guia para correr un contenedor con Oracle Database instalado y poder conectarse al contenedor desde un cliente de Oracle. Asumiendo que nunca has hecho algo parecido.

No me detendré mucho en explicaciones, pondré links a la documentación de las herramientas que se necesitan.

Instalar WSL2

Para Instalar docker (en Windows) primero necesitamos WSL2 (Subsistema de Windows para Linux version 2) Instalado. Docker lo necesita.

Link: docs.microsoft.com/en-us/windows/wsl/install

Leer prerequisitos en la documentación en el Link de arriba.

Para Instalar WSL ejecuta desde Powershell el comando (si se instala por primera vez):

 wsl --install

Este comando habilitará los componentes requeridos, descargará el kernel de Linux más reciente, establecerá WSL 2 como predeterminado e instalará una distribución de Linux (Ubuntu de manera predeterminada, -d para especificar la distribución a instalar).

Instalar Windows Terminal

Link: https://www.microsoft.com/store/productId/9N0DX20HK701

Esta es una terminal que te permite utilizar distintas Shells y es mucho mejor que utilizar la terminal por defecto de Windows para la CMD o Powershell.

Además te permite seleccionar entre las distintas lineas de comandos de distribuciones Instaladas por WSL.

Instalar Docker

Link: docs.docker.com/desktop/install/windows-ins..

Para Instalar docker necesitas descargar el Instalador de Docker Desktop, este viene con todo los que necesitas, como Docker compose, el docker deamon, etc.

Hay algunas formas de Instalarlo, te muestro dos.

Desde el instalador

Simplemente descarga el Docker Desktop y ejecuta el instalador

O desde la terminal :)

Abre Powershell y escribe

winget install 'Docker Desktop'

Y comenzará la descarga e instalación

Winget es el servicio de manejo de paquetes de windows

Configurar Docker para correr en distribuciones de WSL

Una vez Docker Desktop esté instalado, necesitas habilitar la integración con WSL, andá a Settings>Resources>WSL Integration

Y habilita la integración de docker con las distribuciones que necesites, en mi caso tengo Ubuntu y Arch

Luego Apply & Restart

Creando contenedor

Una vez tengas Docker debidamente Instalado en tu máquina pasamos a Crear la imágen de Oracle Database.

Para crear un contenedor en docker necesitas una imágen que le diga a docker cómo va a crear ese contenedor, por lo general, puedes bajar las imágenes desde el docker hub con el comando:

docker pull nombreDeLaImagen:tagDeLaImagen

Oracle Database no tiene una imágen en el Docker Hub, pero sí un script de creación en un repostitorio en Github.

Link: https://github.com/oracle/docker-images

Como necesitamos ese script, lo vamos a bajar con Git desde Github

Instalar Git

Link: https://git-scm.com/download/win

Puedes Instalar Git desde ese Link o con el comando desde powershell

winget install --id Git.Git -e --source winget

Desde el instalador se te va a instalar Git Bash. Puedes configurar Git después pero a lo que vamos

Creando la Imágen

Clonando repositorio

Para clonar el repositorio en tu entorno local, ve al link y copia la dirección de HTTPS

Luego desde la terminal, ve a la ruta donde vas a clonar el repositorio y ejecuta el comando:

(para cambiar de directorio utiliza: cd ruta_donde_querés_ir)

Git clone https://github.com/oracle/docker-images.git

Una vez clonado el repositorio, debes navegar hasta la ruta: OracleDatabase/SingleInstance/dockerfiles

En esa carpeta podemos ver las distintas versiones de Oracle para las que podemos crear una imágen y un script con terminación .sh, lo que indica que es un script en bash y no podemos utilizar powershell.

Vamos a ejecutar el script, así que elegimos la distribución que se te instaló con WSL para correr el script.

Click en Ubuntu.

Como te vas a logear por primera vez vas a tener que crear un usuario y contraseña

Una vez hagas eso vas a poder usar tu sistema linux desde windows.

Muevete a la carpeta donde está el script de creación con el comando:

cd /mnt/c/users/TU-USUARIO/RUTA-repositorio/docker-images/OracleDatabase/SingleInstance/dockerfiles

Ahí está el script

Asegurate de que esté corriendo docker (solo abre docker desktop) y que hayas habilitado la integración con WSL en las configuraciones de Docker Desktop

Ejecuta el script con el comando:

./buildContainerImage.sh -v 21.3.0 -x

El numero después de -v es la versión que quieres de Oracle Database de las disponibles en la carpeta.

El script va a empezar a crear la imágen, pesa al rededor de 6 GB

Una vez creada la imágen podés verla desde windows o linux

Creando el contenedor (al fin :) )

Ahora hay que crear el contenedor, puedes usar docker run pero usaremos un docker compose file para obtener las ventajas de docker compose.

Puedes copiarlo de aquí y crear tu archivo "docker-compose.yml"

version: 3.8

services:
  database:
    container_name: oracle-database
    image: oracle/database:21.3.0-xe
    ports:
    # Host to container
      - 52521:1521
      - 55500:5500
    environment:
      - ORACLE_PWD=oracle1234
      - ORACLE_CHARACTERSET=AL32UTF8

    volumes:
      - type: bind
        source: .\oradata
        target: /opt/oracle/oradata

      - type: bind
        source: .\scripts-setup
        target: /opt/oracle/scripts/setup

      - type: bind
        source: .\scripts-startup
        target: /opt/oracle/scripts/startup

El docker compose file debe estar en la carpeta que hayas destinado para trabajar con oracle y debes crear las carpetas oradata, scripts-setup y scripts-startup

Estas son carpetas a las que se hace referencia en el docker compose como parte de bindmounts

Esto te va a permitir acceder a los archivos de Oracle en el contenedor desde tu PC anfitrión, como los tablespaces que hayas creado.

Una vez todo en su lugar hay que usar el docker compose file.

Usa el comando

docker compose up -d

Para levantar los servicios especificados en el dockerfile, en este caso solo la base de datos

Puedes correr el comando de docker compose sin la flag "-d" para ver los logs de ejecución directamente si hay algún error

Puedes ver los logs desde Docker Desktop

Puedes ver si el contenedor está corriendo con el comando docker ps

LISTO!!!

Ahora ya tienes un contenedor con Oracle Database escuchando por el puerto 52521 de tu PC al que podés conectarte, la contraseña es oracle1234 como se especificó en el docker compose file.

Como ejemplo voy a crear una conexión desde sqldeveloper a mi contenedor

Los scripts que crees los vas a guardar en tu windows, porque el cliente no corre en el contenedor.

Ventajas de docker compose

Si quieres remover el contenedor o cambiar algo en él como agregar más contenedores conectados por una red puedes hacerlo facilmente modificando el Docker Compose File.

Comando para quitar el contenedor con compose:

docker compose down

Para que funcione, debés estar en la ruta donde se encuentra el docker compose que usaste para crear el contenedor de Oracle.

Documentación de docker compose: https://docs.docker.com/compose/

Documentación de docker https://docs.docker.com

Esta guía es algo que tenía guardado hace tiempo y decidí compartirla hasta ahora, gracias y si quedó alguna duda no dudes en preguntar. 😉