Ir al contenido principal

Oracle Database 12c en Docker

Instalar una instancia de Oracle Database 12c Release 2 (12.2.0.1) utilizando Docker Compose en Ubuntu.

Objetivo
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
Importante
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
Si el comando funciona sin 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
Persistencia
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)
No reiniciar durante la inicialización.
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.

Esperar hasta que termine la inicialización.
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
Para aplicaciones
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
Importante
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
Los datos permanecen.
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
Atención:
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.

Configuración final:

Oracle 12.2.0.1
Contenedor: oracle12c
Puerto: 1521
CDB: ORCLCDB
PDB: ORCLPDB1
Volumen: oracle_data

Comentarios

Entradas populares de este blog

Instalar Evolution API en Docker con Redis y PostgreSQL Local

Instalar Evolution API en Docker con Redis y PostgreSQL Local En este tutorial vamos a levantar Evolution API usando Docker , con soporte de Redis para sesiones y PostgreSQL local para almacenar datos de manera persistente y compartida entre varios usuarios. 1. Estructura del proyecto Crea una carpeta para tu proyecto y colócate en ella: mkdir -p ~/docker/evolution-api cd ~/docker/evolution-api 2. Archivo docker-compose.yml Este compose levanta Redis y Evolution API : version: "3.9" services: # ✅ SERVICIO REDIS redis: container_name: evolution_redis image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --save 60 1 --loglevel warning # ✅ SERVICIO EVOLUTION API evolution-api: container_name: evolution_api image: atendai/evolution-api restart: unless-stopped ports: - "8085:8080" env_file: - .env ...

Instalación y Configuración de MySQL 5.7 en Ubuntu 24.04 LTS

Instalar MySQL 5.7 en Ubuntu 24.04 1. Descargar e instalar MySQL Copiar mkdir ~/mysql57 cd ~/mysql57 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 2. Instalar dependencias necesarias IMPORTANTE: Se descargan las versiones nuevas de las librerías y se las vincula con las librerías que necesita MySQL. Copiar sudo apt update # Reemplazo de libaio sudo apt install libaio1t64 # Reemplazo de libtinfo y ncurses sudo apt install libtinfo6 libncurses6 Copiar # Crear los enlaces simbólicos sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1 sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64...

Tutorial: n8n con Docker Compose en Linux

Tutorial Completo: Instalar y correr n8n en Linux con Docker Compose Este tutorial te guiará paso a paso para instalar y ejecutar n8n usando Docker Compose en un sistema Linux (como Ubuntu), con buenas prácticas y configuraciones recomendadas. --- 1. Actualizar el sistema Es buena práctica empezar actualizando los paquetes y sistema: Copiar sudo apt update sudo apt upgrade -y --- 2. Instalar dependencias necesarias para Docker Copiar sudo apt install -y ca-certificates curl gnupg lsb-release --- 3. Agregar repositorio oficial de Docker Copiar sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update --- 4. ...