Instalar una instancia de Oracle Database 12c Release 2 (12.2.0.1) utilizando Docker Compose en Ubuntu.
Crear una instancia local de Oracle Database 12c para desarrollo y pruebas, utilizando Docker y manteniendo los datos en un volumen persistente.
1. Requisitos
Para este tutorial se utiliza:
| Componente | Versión |
|---|---|
| Ubuntu | 24.04 |
| Docker | 29.1.3 |
| Docker Compose | 2.40.3 |
| Oracle Database | 12.2.0.1 |
Este procedimiento está pensado para desarrollo y pruebas. No se recomienda utilizar esta configuración directamente en un entorno de producción.
2. Instalar Docker
Primero verificamos si Docker está instalado:
docker --version
Y verificamos Docker Compose:
docker compose version
El resultado esperado será similar a:
Docker version 29.1.3
Docker Compose version 2.40.3
3. Permitir utilizar Docker sin sudo
Si Docker solamente funciona utilizando sudo, podemos agregar
nuestro usuario al grupo docker:
sudo usermod -aG docker $USER
Después debemos cerrar la sesión y volver a entrar, o aplicar el grupo inmediatamente:
newgrp docker
Comprobamos:
docker ps
sudo, Docker está correctamente
configurado para nuestro usuario.
4. Crear el directorio del proyecto
En este caso utilizaremos:
mkdir -p /home/docker
cd /home/docker
El proyecto tendrá una estructura muy sencilla:
/home/docker/
└── docker-compose.yml
Los datos de Oracle no estarán dentro de este directorio. Docker los almacenará en un volumen persistente.
5. Crear docker-compose.yml
Crear el archivo:
nano /home/docker/docker-compose.yml
Contenido:
services:
oracle:
image: scmoran/oracle-database
container_name: oracle12c
ports:
- "1521:1521"
environment:
ORACLE_SID: ORCLCDB
ORACLE_PDB: ORCLPDB1
ORACLE_PWD: Oradoc_db1
volumes:
- oracle_data:/u01/app/oracle
volumes:
oracle_data:
6. ¿Qué configura este Compose?
| Configuración | Valor |
|---|---|
| Contenedor | oracle12c |
| Imagen | scmoran/oracle-database |
| Puerto Oracle | 1521 |
| SID | ORCLCDB |
| PDB | ORCLPDB1 |
| Contraseña inicial | Oradoc_db1 |
| Volumen | oracle_data |
El volumen
oracle_data mantiene los archivos de Oracle aunque
el contenedor sea detenido o reiniciado.
7. Levantar Oracle
Desde /home/docker ejecutar:
docker compose up -d
Docker descargará la imagen si todavía no existe localmente y creará el contenedor.
Podemos comprobar el estado:
docker ps -a
Durante el primer arranque puede aparecer algo similar a:
oracle12c scmoran/oracle-database ... Up ... (health: starting)
La primera ejecución puede tardar bastante porque Oracle debe crear y configurar la base de datos.
8. Ver los logs de Oracle
Para observar el proceso de inicialización:
docker logs -f oracle12c
Durante el proceso podremos ver mensajes como:
LSNRCTL for Linux: Version 12.2.0.1.0
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)
(HOST=0.0.0.0)(PORT=1521)))
Copying database files
1% complete
Es normal que al principio el listener indique que todavía no tiene servicios disponibles. La base de datos todavía se está creando.
No debemos interpretar
health: starting como un error.
Durante la creación inicial es el estado esperado.
9. Verificar que el contenedor está funcionando
Cuando termine la inicialización:
docker ps
Deberíamos obtener un estado similar a:
oracle12c scmoran/oracle-database ... Up ... (healthy)
También podemos consultar los últimos mensajes:
docker logs oracle12c | tail -30
10. Conectarse a Oracle desde el contenedor
La imagen contiene las herramientas de Oracle, por lo que podemos acceder directamente al contenedor.
docker exec -it oracle12c bash
Una vez dentro:
sqlplus / as sysdba
Si la conexión funciona, podemos consultar el estado de la base:
SELECT name, open_mode FROM v$database;
Para salir de SQL*Plus:
exit
Y para salir del contenedor:
exit
11. Datos de conexión desde otra aplicación
Como el puerto 1521 está publicado en el equipo host, las
aplicaciones que se ejecuten en Ubuntu pueden conectarse a Oracle mediante
el puerto estándar.
| Dato | Valor |
|---|---|
| Host | localhost |
| Puerto | 1521 |
| SID | ORCLCDB |
| PDB | ORCLPDB1 |
| Usuario SYS | SYS |
| Contraseña | Oradoc_db1 |
Si nuestra aplicación utiliza el PDB, normalmente debemos utilizar
ORCLPDB1 como servicio en lugar de tratarlo simplemente como
el SID del CDB.
12. Detener Oracle
No utilizamos una política automática de reinicio en el Compose. Por lo tanto, podemos controlar manualmente el ciclo de vida del contenedor.
Para detenerlo:
docker compose stop
También podemos utilizar directamente:
docker stop oracle12c
13. Volver a iniciar Oracle
Para iniciar nuevamente el contenedor:
docker compose start
O directamente:
docker start oracle12c
Al utilizar
start, estamos iniciando el mismo contenedor y
conservando los datos almacenados en el volumen.
14. Reiniciar Oracle
Si necesitamos reiniciar la instancia:
docker compose restart
Esto detiene y vuelve a iniciar el contenedor.
15. Eliminar el contenedor sin eliminar los datos
Si queremos recrear el contenedor pero conservar la base de datos:
docker compose down
El contenedor y la red de Compose serán eliminados, pero el volumen
oracle_data permanecerá.
Después podemos recrearlo:
docker compose up -d
Mientras no eliminemos el volumen, los archivos de la base de datos continúan almacenados.
16. Eliminar completamente Oracle
Si queremos eliminar el contenedor y también todos los datos de Oracle:
docker compose down -v
El parámetro
-v elimina el volumen
oracle_data. Esto significa que se perderán los datos de la
base de datos almacenados en ese volumen.
17. Comandos útiles
| Objetivo | Comando |
|---|---|
| Ver contenedores | docker ps -a |
| Iniciar Oracle | docker compose start |
| Detener Oracle | docker compose stop |
| Reiniciar Oracle | docker compose restart |
| Ver logs | docker logs -f oracle12c |
| Entrar al contenedor | docker exec -it oracle12c bash |
| Eliminar contenedor | docker compose down |
| Eliminar contenedor y datos | docker compose down -v |
18. Ver el volumen utilizado
Podemos comprobar que Docker creó el volumen:
docker volume ls
Deberíamos encontrar:
docker_oracle_data
El nombre incluye docker_ porque Docker Compose utiliza el
nombre del proyecto como prefijo.
Para obtener información sobre el volumen:
docker volume inspect docker_oracle_data
19. Esquema final
┌─────────────────────────────────────┐
│ Ubuntu │
│ │
│ ┌───────────────────────────────┐ │
│ │ Docker │ │
│ │ │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ oracle12c │ │ │
│ │ │ │ │ │
│ │ │ Oracle Database │ │ │
│ │ │ 12.2.0.1 │ │ │
│ │ │ │ │ │
│ │ │ TCP 1521 │ │ │
│ │ └────────────┬────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ oracle_data volume │ │
│ │ │ │
│ └───────────────────────────────┘ │
│ │
└─────────────────────────────────────┘
│
│ TCP 1521
▼
Aplicaciones locales
Conclusión
Con esta configuración podemos disponer de una instancia local de Oracle Database 12.2.0.1 para desarrollo y pruebas sin necesidad de instalar Oracle directamente sobre Ubuntu.
Docker se encarga del contenedor y el volumen
oracle_data mantiene los datos de la base de datos.
Además, al no utilizar una política automática de reinicio, podemos
controlar manualmente cuándo iniciar, detener o reiniciar Oracle.
Oracle 12.2.0.1
Contenedor:
oracle12cPuerto:
1521CDB:
ORCLCDBPDB:
ORCLPDB1Volumen:
oracle_data
Comentarios
Publicar un comentario