Servidor Oracle en Docker.
Aunque pienso que cada año que pasa se una un poco menos, sigue siendo uno de los grandes motores de datos y teníamos que probarlo, hablamos de Oracle Database Server. En este caso de la versión reducida llamada XE corriendo con Ubuntu en un contenedor.
Es un servidor XE 11.2 (Express) y solo puede funcionar en un CORE, con 1 gb de RAM y hasta 11 gb de datos, una configuración que “ayuda” corriendo en Docker para no saturar los recursos del equipo real.
Bajamos una imágen preconfigurada muy completa y con varias opciones. Existen muchas en internet, pero nos quedamos con esta por las opciones admitidas.
# docker pull wnameless/oracle-xe-11g
La imágen ocupa 2.23 GB en disco, que no es poco.
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wnameless/oracle-xe-11g latest f794779ccdb9 7 weeks ago 2.23GB
Arrancaremos un contenedor con varias opciones activadas, acceso por SSH (22), acceso al motor desde fuera (1521), permitiremos que se conecten al servidor desde otros equipos de la red, solicitará clave para gestionarlo, desactivamos el I/O Asincrónico de disco y activamos el usuario XDB.
# docker run -d --name ora11 -p 49160:22 -p 49161:1521 -p 8080:8080 \
-e ORACLE_ALLOW_REMOTE=true \
-e ORACLE_PASSWORD_VERIFY=true \
-e ORACLE_DISABLE_ASYNCH_IO=true \
-e ORACLE_ENABLE_XDB=true \
wnameless/oracle-xe-11g
Verificamos los puertos abiertos.
# nmap 172.17.0.2
Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-28 09:09 CET
Nmap scan report for 172.17.0.2
Host is up (0.0000090s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
1521/tcp open oracle
8080/tcp open http-proxy
MAC Address: 02:42:AC:11:00:02 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.35 seconds
GRAFICO1:
Nos conectamos mediante SSh y verificamos que estamos usando un Ubuntu Linux. (la clave de root es admin)
# ssh 172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
[email protected]'s password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.9.65-1-MANJARO x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
Cambiamos la clave de root.
# passwd
Y actualizamos el sistema operativo
# apt upgrade
The following packages will be upgraded:
gcc-5-base libdb5.3 libssl1.0.0 libstdc++6 libsystemd0 libudev1 openssl perl-base systemd systemd-sysv wget
Verificamos que está corriendo el Motor Oracle.
# ps -A | grep oracle
152 ? 00:00:00 oracle
154 ? 00:00:00 oracle
156 ? 00:00:00 oracle
160 ? 00:00:00 oracle
162 ? 00:00:00 oracle
164 ? 00:00:00 oracle
166 ? 00:00:00 oracle
168 ? 00:00:00 oracle
170 ? 00:00:00 oracle
172 ? 00:00:00 oracle
174 ? 00:00:00 oracle
176 ? 00:00:00 oracle
178 ? 00:00:00 oracle
180 ? 00:00:00 oracle
182 ? 00:00:00 oracle
184 ? 00:00:00 oracle
186 ? 00:00:00 oracle
188 ? 00:00:00 oracle
190 ? 00:00:00 oracle
192 ? 00:00:00 oracle
200 ? 00:00:01 oracle
202 ? 00:00:00 oracle
218 ? 00:00:00 oracle
228 ? 00:00:00 oracle
230 ? 00:00:00 oracle
736 ? 00:00:00 oracle
740 ? 00:00:00 oracle
Ahora desde un navegador en nuestro equipo real
http://172.17.0.2:8080/
Usuario y clave de la interfaz web: XDB / xdb.
Luego dentro para comunicarnos con el motor debemos usar Usuario y clave del motor: sys / oracle y system/oracle
Usamos DBeaver como cliente GUI para ver los objetos dentro del motor.
GRAFICO2:
Desde nuestro equipo real podemos conectarnos al contenedor y luego al motor Oracle.
# ssh 172.17.0.2
[email protected]'s password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.9.65-1-MANJARO x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Tue Nov 28 08:11:21 2017 from 172.17.0.1
root@46a4d1de6867:~# sqlplus
SQL*Plus: Release 11.2.0.2.0 Production on Tue Nov 28 08:25:08 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter user-name: system
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
Ahora creamos un tablespace con su correspondiente datafile. (10mb para pruebas)
SQL> create tablespace dockertips datafile 'datafile1.dbf' size 10M;
Tablespace created.
Creamos un nuevo usuario indicando su clave y el tablespace temporal.
SQL> create user dockeruser identified by user1234 temporary tablespace TEMP;
User created.
Le damos permisos de acceso al motor.
SQL> grant connect to dockeruser;
Grant succeeded.
GRAFICO3:
Ahora definimos que su tablespace standard es dockertips, le damos permisos de uso en el tablespace y permisos de crear tablas.
SQL> alter user dockeruser default tablespace dockertips;
User altered.
SQL> alter user dockeruser quota unlimited on dockertips;
User altered.
SQL> grant create table to dockeruser;
Grant succeeded.
Ahora nos conectamos como el usuario “dockeruser”, creamos una tabla e insertamos un registro en ella.
# sqlplus dockeruser
SQL*Plus: Release 11.2.0.2.0 Production on Tue Nov 28 08:48:48 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> create table t1 (id int, data varchar(20));
Table created.
SQL> insert into t1 values (1, 'abc');
1 row created.
SQL> select * from t1;
ID DATA
---------- --------------------
1 abc
Aunque la performance no es la mejor, nos sirve para realizar pruebas de concepto, demos usando Oracle como motor de datos, probar scripts de actualización de datos, procesos batch…
GRAFICO4: