Usando Oracle 12c en Docker sobre Windows 10

Por Nelson Calero Oracle ACE director
Publicado en Mayo 2018

Revisado por Francisco Riccio



En este artículo vamos a ver paso a paso cómo instalar Oracle 12c en Windows 10 usando Docker.


Introducción a Docker


Docker es una tecnología de containers muy popular.

¿No has usado containers? Sirven para desplegar aplicaciones en un entorno virtual aislado, pero sin el overhead de tener un Sistema Operativo (SO) nuevo como se tiene en una Virtual Machine (VM).

La principal diferencia es que los containers virtualizan el SO en vez del hardware, como lo hace una VM. De esta forma un container usa menos espacio en disco (ya que no requiere una copia del SO), y es más ágil (ya que usa menos recursos del host para ejecutar).

Pueden ver más detalles del funcionamiento de Docker en esta URL: https://www.docker.com/what-container#/virtual_machines




Oracle en Docker


Oracle se puede usar con Docker pero no está soportado para ambientes de producción todavía, como se explica en la nota de soporte “2216342.1 Oracle Support for Database Running on Docker”.

Hay varias formas de hacerlo automatizando todo el proceso:


Usar imágenes de Oracle Container Registry o de Docker Store tiene la ventaja que los binarios de instalación vienen incluidos, lo que no es permitido por licencia en el resto de las distribuciones.

Pero ambas opciones sólo incluyen las versiones 12.1 y 12.2.

Si queremos crear un ambiente de pruebas con versiones anteriores, tenemos que adaptar los scripts usados en cualquiera de las imágenes anteriores, además de necesitar los archivos de instalación apropiados (OTN para las más recientes, Oracle Software Delivery Cloud https://edelivery.oracle.com/ para anteriores).

Hay muchas referencias de cómo usar Oracle con Docker en Linux, aunque está soportado también en Windows. Esto ofrece desafíos adicionales, así que vamos a ver detalles de cómo hacerlo con Windows 10.




Docker en Windows 10


Docker tiene dos versiones para Windows:


Para usar la versión completa es necesario habilitar Microsoft Hyper-V, lo que implica deshabilitar la virtualización por hardware de nuestro PC.

Si estamos usando VirtualBox en el mismo host, con este cambio deja de funcionar.
Docker Toolbox no tiene esta restricción, aunque se mantiene como una versión antigua (Legacy), y Docker recomienda usar la versión completa.

Otra diferencia de Docker Toolbox es que necesita una VM VirtualBox para ejecutar. Esta VM se crea de forma automática al usar Toolbox, de nombre default, y se usa como host para los containers que creemos. Más adelante veremos detalles sobre las implicaciones de esto.

En este artículo vamos a usar Docker Toolbox (v 18.01.0-ce), ya que tengo en el mismo host otras VMs VirtualBox que me interesa seguir usando. La versión de Windows es 10.0.16299.309 64 bits.




Instalando Docker


El instalador se descarga de https://download.docker.com/win/stable/DockerToolbox.exe

Al ejecutarlo hace unas preguntas simples y se instala rápidamente.













La instalación crea dos accesos directos:

    • Docker QuickStart Terminal
    • Kitematic (Alpha)

El primero es una terminal pre-configurada para trabajar con Docker.

Es lo que vamos a usar para ejecutar todos los comandos.

Además de configurar variables de entorno, valida que la VM default exista y esté ejecutando, y la crea/inicia si es necesario.




Ajustando la VM default


Antes de empezar, necesitamos hacer un ajuste a la VM default, porque los valores por defecto son chicos para el disco y la memoria, lo que hace fallar la instalación de Oracle más adelante.

Para evitar esto, vamos a modificar el script usado para crear la VM, asignando más disco y memoria.

El archivo a modificar es C:\Program Files\Docker Toolbox\start.sh. Tenemos que cambiar esta línea (60 en mi caso):

“${DOCKER_MACHINE}” create -d  virtualbox $PROXY_ENV "${VM}"

Por estas dos:

VB_OPTS="–virtualbox-disk-size 100000 --virtualbox-cpu-count 2 --virtualbox-memory 2048"
"${DOCKER_MACHINE}" create -d virtualbox $VB_OPTS $PROXY_ENV “${VM}”

Con estos cambios, nuestra VM default usará 100Gb de disco y 2Gb de RAM en vez de los valores originales.




Si ejecutamos la terminal Docker QuickStart, vemos cómo se inicia la VM:



Si vamos a VirtualBox Manager, vemos la VM en ejecución:




Instalar repositorio GIT oracle/docker-images


La creación del container se puede hacer de las formas nombradas al inicio.

Vamos a mostrar cómo hacerlo usando el repositorio GIT de Oracle, por dos motivos:

  • No incluye los binarios de instalación.
    Lo que nos facilitaría el manejo de los containers si quisiéramos adaptar los scripts a otras versiones distintas de 12c.

  • No incluye un script para Windows que haga la instalación.
    Manualmente tenemos que ejecutar los pasos para crear el container y levantarlo. Esto nos permite ver qué se necesita para hacer funcionar esta solución en Windows.

Para simplificar este artículo, usamos la versión 12.1 que no necesita cambios en los scripts.

El primer paso es instalar el repositorio Oracle Docker-images.

Si tenemos instalado Git for Windows https://github.com/git-for-windows, lo podemos hacer con un comando:

    D:\GitHub>git clone https://github.com/oracle/docker-images.git
    Cloning into 'docker-images'...
    remote: Counting objects: 7740, done.
    remote: Compressing objects: 100% (36/36), done.
    rRemote: Total 7740 (delta 18), reused 45 (delta 16), pack-reused 7688
    Receiving objects: 100% (7740/7740), 9.70 MiB | 870.00 KiB/s, done.
    Resolving deltas: 100% (4286/4286), done.
    Checking connectivity... done.
    Checking out files: 100% (968/968), done.

También podemos bajar un archivo ZIP con el contenido de este repositorio desde Github.com si no tenemos instalado el utilitario git.




Descargar archivos de instalación de Oracle desde OTN


Ahora necesitamos los archivos de instalación de Oracle, que se deben bajar de OTN: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

En este artículo usamos la versión 12.1 para linux X64.

Los archivos bajados se deben dejar en el directorio D:\GitHub\docker-images\OracleDatabase\dockerfiles\12.1.0.2:

   D:\GitHub\docker-images\OracleDatabase\dockerfiles\12.1.0.2>dir
     Volume in drive D is externo
     Volume Serial Number is 88CD-FFE4

     Directory of D:\GitHub\docker-images\OracleDatabase\dockerfiles\12.1.0.2

    01/31/2018  11:27 PM    <DIR>          .
    01/31/2018  11:27 PM    <DIR>          ..
    01/31/2018  11:27 PM               140 Checksum.ee
    01/31/2018  11:27 PM               148 Checksum.se2
    01/31/2018  11:27 PM             2,914 Dockerfile.ee
    01/31/2018  11:27 PM             2,928 Dockerfile.se2
    01/31/2018  11:27 PM             1,071 checkDBStatus.sh
    02/02/2018  09:35 PM             1,123 checkSpace.sh
    01/31/2018  11:27 PM             2,941 createDB.sh
    01/31/2018  11:27 PM             9,290 db_inst.rsp
    01/31/2018  11:27 PM            13,134 dbca.rsp.tmpl
    02/02/2018  08:56 PM             2,568 installDBBinaries.sh
    01/31/2018  11:27 PM             1,195 installPerl.sh
    01/31/2018  11:27 PM             6,140 runOracle.sh
    01/31/2018  11:27 PM             1,015 runUserScripts.sh
    01/31/2018  11:27 PM               758 setPassword.sh
    01/31/2018  11:27 PM               873 setupLinuxEnv.sh
    01/31/2018  11:27 PM               678 startDB.sh
    07/29/2016  09:27 PM     1,014,527,110 linuxamd64_12102_database_2of2.zip
    07/29/2016  09:35 PM     1,673,519,571 linuxamd64_12102_database_1of2.zip
                  18 File(s)  2,688,093,597 bytes
                   2 Dir(s)  366,453,194,752 bytes free



Creando el container


Para crear el container, debemos usar los scripts de instalación de la versión que nos interesa. En este caso, 12.1.0.2 Enterprise Edition, lo que implica los archivos de configuración y scripts del directorio docker-images\OracleDatabase\dockerfiles\12.1.0.2.

El comando a usar es:

D:\GitHub\docker-images\OracleDatabase\dockerfiles\12.1.0.2>docker build -t 
oracle/database:12.1.0.2-ee -f Dockerfile.ee .

Si quisiéramos usar otra versión para la que no existen scripts en este repositorio (cualquiera menor de 12c), podemos usar éste como base y adaptarlo.

Al lanzar la creación del container se ejecutan muchos pasos de instalación del SO y binarios, incluyendo la descarga desde internet de la imagen Linux a usar para el SO (7-slim), así como actualizaciones para los paquetes de Linux.

Este es un extracto de la una ejecución exitosa:

    D:\GitHub\docker-images\OracleDatabase\dockerfiles\12.1.0.2>docker build -t 
oracle/database:12.1.0.2-ee -f Dockerfile.ee .
    Sending build context to Docker daemon  2.688GB
    Step 1/17 : FROM oraclelinux:7-slim
    7-slim: Pulling from library/oraclelinux
    4040fe120662: Pull complete
    Digest: sha256:ef28f2f806afd778bb706fbf6ff90fc98e624c4113ea4d2f4aa508d813ef32fd
    Status: Downloaded newer image for oraclelinux:7-slim
     ---> 9870bebfb1d5
    Step 2/17 : MAINTAINER Gerald Venzl <gerald.venzl@oracle.com>
     ---> Using cache
     ---> 54e38720af2b
    Step 3/17 : ENV ORACLE_BASE=/opt/oracle   ORACLE_HOME=/opt/oracle/product/12.1.0.2/dbhome_1     
INSTALL_FILE_1="linuxamd64_12102_database_1of2.zip"     
INSTALL_FILE_2="linuxamd64_12102_database_2of2.zip"     INSTALL_RSP="db_inst.rsp"     
CONFIG_RSP="dbca.rsp.tmpl"     PWD_FILE="setPassword.sh"     PERL_INSTALL_FILE="installPerl.sh"     
RUN_FILE="runOracle.sh"     START_FILE="startDB.sh"     CREATE_DB_FILE="createDB.sh"     
SETUP_LINUX_FILE="setupLinuxEnv.sh"     CHECK_SPACE_FILE="checkSpace.sh"     
CHECK_DB_FILE="checkDBStatus.sh"     USER_SCRIPTS_FILE="runUserScripts.sh"     
INSTALL_DB_BINARIES_FILE="installDBBinaries.sh"
     ---> Using cache
     ---> 6b58ac5188e6
    Step 4/17 : ENV INSTALL_DIR=$ORACLE_BASE/install     
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH     
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib     
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
     ---> Using cache
     ---> da0154b940f6
    Step 5/17 : COPY $INSTALL_FILE_1 $INSTALL_FILE_2 $INSTALL_RSP $PERL_INSTALL_FILE $SETUP_
LINUX_FILE $CHECK_SPACE_FILE $INSTALL_DB_BINARIES_FILE $INSTALL_DIR/
     ---> Using cache
     ---> 9de8125b6c2c
    Step 6/17 : COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE 
$USER_SCRIPTS_FILE $ORACLE_BASE/
     ---> Using cache
     ---> 12e8def30a14
    Step 7/17 : RUN chmod ug+x $INSTALL_DIR/*.sh &&     sync &&     
$INSTALL_DIR/$CHECK_SPACE_FILE &&     $INSTALL_DIR/$SETUP_LINUX_FILE
     ---> Running in e49cd72f8f2d
    ##############################################
    : space check! The container needs 12 GB, available  80
    ##############################################
    Loaded plugins: ovl
    Resolving Dependencies
    --> Running transaction check
    ---> Package openssl.x86_64 1:1.0.2k-8.0.1.el7 will be installed
    --> Processing Dependency: make for package: 1:openssl-1.0.2k-8.0.1.el7.x86_64
    ---> Package oracle-rdbms-server-12cR1-preinstall.x86_64 0:1.0-6.el7 will be installed
    --> Processing Dependency: binutils for package: 
oracle-rdbms-server-12cR1-preinstall-1.0-6.el7.x86_64
    ...
    Dependency Updated:
      glibc.x86_64 0:2.17-196.el7_4.2       glibc-common.x86_64 0:2.17-196.el7_4.2
      libblkid.x86_64 0:2.23.2-43.el7_4.2   libgcc.x86_64 0:4.8.5-16.el7_4.1
      libmount.x86_64 0:2.23.2-43.el7_4.2   libstdc++.x86_64 0:4.8.5-16.el7_4.1
      libuuid.x86_64 0:2.23.2-43.el7_4.2

    Complete!
    Removing intermediate container 1bb6ea91ca43
     ---> 0ffc00520368
    Step 8/17 : USER oracle
     ---> Running in 5d49194f52d2
    Removing intermediate container 5d49194f52d2
     ---> e4e91f3513f8
    Step 9/17 : RUN $INSTALL_DIR/$INSTALL_DB_BINARIES_FILE EE
     ---> Running in e6585f75f94c
    Archive:  linuxamd64_12102_database_1of2.zip
       creating: database/
      inflating: database/runInstaller
       creating: database/rpm/
      inflating: database/rpm/cvuqdisk-1.0.9-1.rpm
    ...
    Step 16/17 : HEALTHCHECK --interval=1m --start-period=5m    
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
     ---> Running in a3b47171a775
    Removing intermediate container a3b47171a775
     ---> 5020df18556b
    Step 17/17 : CMD exec $ORACLE_BASE/$RUN_FILE
     ---> Running in 80ed4f3678b0
    Removing intermediate container 80ed4f3678b0
     ---> c175ddb41772
    Successfully built c175ddb41772
    Successfully tagged oracle/database:12.1.0.2-ee
    SECURITY WARNING: You are building a Docker image from Windows against a 
non-Windows Docker host. All files and directories added to build context will have 
'-rwxr-xr-x' permissions. It is recommended to double check and reset permissions 
for sensitive files and directories.

Una vez que termina la creación, podemos ver que el container está creado:

    D:\GitHub\docker-images\OracleDatabase\dockerfiles\12.1.0.2>docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    oracle/database     12.1.0.2-ee         c175ddb41772        4 minutes ago       10.6GB
    oraclelinux         7-slim              9870bebfb1d5        2 months ago        118MB



Creando la base de datos


El container anterior tiene el SO y los binarios de Oracle instalados, pero no tiene una base creada.

Al ejecutar el container se usa un script que crea la base de datos si no está creada.

Podemos ver en el log anterior el script que se configuró para la creación de la base, es uno de los parámetros usados en el paso "Step 3/17".

Es importante tener presente que el contenido de un container es inmutable, y cada vez que lo reiniciamos se descartan los datos que fueron modificados desde su inicio. Para persistir datos entre ejecuciones, debemos usar un parámetro al ejecutar el container que mapea el directorio interno de datos a uno que existe en nuestro host (-v). De esa forma, los reinicios del container tienen disponibles los datos que fueron modificados en ejecuciones anteriores, persistiendo en nuestro disco.

Algo a considerar en Windows: este mapeo de directorios tiene una sintaxis distinta a la usada en Linux, y solo se permite usar directorios que estén en el mismo disco donde fue instalado Docker (C: en mi caso).

El comando para ejecutar nuestro container, mapeando el volumen de datos (donde se van a crear los archivos de la base) al directorio c:\users\calero\.docker\persistentdisk\ora121, es:

docker run --name ora121  -p 1521:1521 -p 5500:5500 -e ORACLE_SID=orcl -e ORACLE_PDB=pdb1 -e 
ORACLE_PWD=Oracle_123  -e ORACLE_CHARACTERSET=AL32UTF8 -v  
//c/users/calero/.docker/persistentdisk/ora121://opt/oracle/oradata  oracle/database:12.1.0.2-ee

Notar que indicamos varios parámetros de creación de la base: SID, PDB, clave para los usuarios y character set.

El mapeo de volúmenes a directorios locales a veces no funciona como se espera. Esto se manifiesta con errores en la instalación de Oracle por no poder escribir en disco (permisos, falta de espacio o similares). Yo tuve ese problema en mis pruebas, quizás sea algo que no ocurra siempre.

Si tienen problemas similares, deben validar:

  • Que el directorio local existe y que la sintaxis usada en el mapeo es la correcta
  • Cómo está configurado ese mapeo en nuestro container usando este comando:
     docker inspect oracle/database:12.1.0.2-ee 

Este comando muestra la configuración de nuestro container.

La entrada "Volumes" indica ambos paths.

Este es un ejemplo que el mapeo no se hizo:

    "Volumes": {
                    "/opt/oracle/oradata": {}
                },

Podemos modificar este mapeo en un container ya creado usando Kitematic, el utilitario que instaló Docker Toolbox.

Ejecutando Kitematic para ver los containers de nuestra instalación, debemos ir al tab Settings, y luego a Volumes para ver los mapeos de volúmenes a discos locales. Acá tenemos el botón "Change" que nos permite asignar un nuevo directorio para mapear los volúmenes:



Si hacemos cambios en esa pantalla, el container se ejecuta por lo que se dispara la creación de la base. Si nunca había sido exitosa, es probable que ahora sí, y podemos ver el progreso de la instalación revisando los archivos de log del container con el comando "docker logs -f <container>".

Para saber el nombre de un container que no está en ejecución debemos usar "docker ps --no-trunc -aq".

Volviendo a la ejecución del comando "docker run", asumiendo que no tuvimos problemas con los mapeos de volúmenes, vamos a ver esto en nuestra terminal que muestra que la creación fue exitosa:

   ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: Oracle_123

    LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 03-FEB-2018 22:30:50

    Copyright (c) 1991, 2014, Oracle.  All rights reserved.

    Starting /opt/oracle/product/12.1.0.2/dbhome_1/bin/tnslsnr: please wait...

    TNSLSNR for Linux: Version 12.1.0.2.0 - Production
    System parameter file is /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
    Log messages written to /opt/oracle/diag/tnslsnr/8bde9f952dca/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))

    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
    Start Date                03-FEB-2018 22:30:51
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
    Listener Log File         /opt/oracle/diag/tnslsnr/8bde9f952dca/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    Cleaning up failed steps
    4% complete
    Copying database files
    5% complete
    6% complete
    12% complete
    17% complete
    22% complete
    30% complete
    Creating and starting Oracle instance
    32% complete
    35% complete
    36% complete
    37% complete
    41% complete
    44% complete
    45% complete
    48% complete
    Completing Database Creation
    50% complete
    53% complete
    55% complete
    63% complete
    66% complete
    74% complete
    Creating Pluggable Databases
    79% complete
    100% complete
    Look at the log file "/opt/oracle/cfgtoollogs/dbca/orcl/orcl0.log" for further details.

    SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 3 22:56:44 2018

    Copyright (c) 1982, 2014, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

    SQL>
    System altered.

    SQL>
    Pluggable database altered.

    SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 
64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
    The Oracle base remains unchanged with value /opt/oracle
    #########################
    DATABASE IS READY TO USE!
    #########################
    The following output is now a tail of the alert.log:
    Completed: alter pluggable database pdb1 open
    Sat Feb 03 22:56:41 2018
    CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  
'/opt/oracle/oradata/orcl/pdb1/pdb1_users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  
1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
    Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  
'/opt/oracle/oradata/orcl/pdb1/pdb1_users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  
1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
    ALTER DATABASE DEFAULT TABLESPACE "USERS"
    Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
    Sat Feb 03 22:56:44 2018
    ALTER SYSTEM SET control_files='/opt/oracle/oradata/orcl/control01.ctl' SCOPE=SPFILE;
       ALTER PLUGGABLE DATABASE pdb1 SAVE STATE
    Completed:    ALTER PLUGGABLE DATABASE pdb1 SAVE STATE
    Sat Feb 03 23:09:32 2018
    Default pga_aggregate_limit value is too high for the
    amount of physical memory in the system
    pga_aggregate_limit is 2048 MB
    limit based on physical memory and SGA usage is 1202 MB
    Sat Feb 03 23:24:34 2018
    Resize operation completed for file# 9, old size 563200K, new size 583680K



Conectando a la base de datos en Docker


Hay varias formas de conectarnos a nuestra base corriendo en Docker:

1) usando cualquier cliente con acceso a nuestro host, ya que al ejecutar el container hicimos público el puerto 1521 usado por el listener en el container.

Por ejemplo usando SQL*plus:

    C:\Users\calero>docker-machine ip
    192.168.99.100

    C:\Users\calero>sqlplus system/Oracle_123@\"192.168.99.100:1521/orcl\"

    SQL*Plus: Release 12.1.0.2.0 Production on Sun Feb 4 01:51:50 2018

    Copyright (c) 1982, 2014, Oracle.  All rights reserved.

    Last Successful login time: Sun Feb 04 2018 01:24:46 -03:00

    Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

    SQL> select host_name from v$instance;

    HOST_NAME
    ----------------------------------------------------------------
    8bde9f952dca

    SQL> 


2) usando el binario de sqlplus dentro de Docker, ejecutado desde nuestro host.

    C:\Users\calero>docker ps
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             
    2c1afcad6a50        oracle/database:12.1.0.2-ee   "/bin/sh -c 'exec $O…"   11 hours ago        

    STATUS                     PORTS                                            NAMES
    Up 11 hours (healthy)      0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   ora121

    C:\Users\calero>docker exec -ti 2c1afcad6a50 sqlplus pdbadmin/Oracle_123@pdb1

    SQL*Plus: Release 12.1.0.2.0 Production on Sun Feb 4 16:23:47 2018

    Copyright (c) 1982, 2014, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

    SQL> select count(1) from all_objects;

      COUNT(1)
    ----------
         73597

    SQL> 

Espero les sirva como introducción para comenzar a usar Oracle en Docker.



Referencias


Usar imágenes Oracle en Docker desde Oracle Container Registry:
https://ronekins.wordpress.com/2017/11/07/oracle-linux-container-registry/
Usar Oracle RAC sobre Docker:
https://github.com/oracle/docker-images/blob/master/OracleDatabase/RAC/OracleRealApplicationClusters/README.md
Deploy Oracle Database as a Docker Container in Oracle Container Cloud Service
http://www.oracle.com/technetwork/articles/cloudcomp/deploy-database-in-container-cloud-3876722.html



Nelson Calero consultor en bases de datos Oracle y MySQL con más de 20 años de experiencia en tecnología Oracle, actualmente trabajando para Pythian desde Uruguay. Especializado en soluciones de alta disponibilidad y RAC, es Ingeniero en Computación, Oracle ACE Director, posee varias certificaciones Oracle (OCE/OCP/Cloud) y docente de Oracle University. Orador frecuente en conferencias internaciones, es co-fundador y Presidente del Grupo de Usuarios de Oracle Uruguay (UYOUG).

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.