(Italiano) Come creare un’immagine container di Oracle 19c su Apple Silicon

Come creare un’immagine container di Oracle 19c su Apple Silicon

Sorry, this entry is only available in Italiano.


Per molti sviluppatori, avere Oracle Database in un ambiente di sviluppo locale è una necessità. Tuttavia, con l’avvento dei processori Apple Silicon (M1, M2 e successivi), alcune sfide tecniche possono emergere. Fortunatamente, il progetto oracle/docker-images fornisce gli strumenti per creare facilmente un’immagine container di Oracle Database 19c anche su architetture ARM. Inoltre, per migliorare la produttività, è possibile eseguire il push dell’immagine su un repository personale, rendendola facilmente accessibile senza doverla ricostruire ogni volta.


In questo articolo vedremo:

  1. Perché configurare Oracle Database in locale
  2. Come creare la tua immagine container per Apple Silicon
  3. Come condividere l’immagine container su un repository
  4. Best practice per ottimizzare l’ambiente

Perche usare Oracle Database in locale

Oracle è uno dei database più utilizzati in ambito enterprise. Le ragioni per essere incluso in un ambiente di sviluppo locale sono molteplici e riporto a seguire quelle più comuni.

  • Conformità ai requisiti aziendali: molte applicazioni sono progettate specificamente per Oracle, ed eseguire i test su altri database può portare a errori imprevisti.
  • Testing di funzionalità avanzate: alcune caratteristiche, come i tablespace, le partizioni o PL/SQL, richiedono Oracle per essere testate correttamente.
  • Miglioramento della velocità di sviluppo: avere un database locale elimina la latenza e la dipendenza da infrastrutture remote, garantendo una velocità di sviluppo e debug significativamente maggiore.

Come creare un'immagine container di Oracle 19c

Vedremo adesso come usare gli strumenti messi a disposizione dal progetto oracle/docker-images per creare facilmente un’immagine container di Oracle Database 19c anche su architetture ARM.

Prima di iniziare con la procedura di creazione, è necessario che siano soddisfatti i seguenti requisiti.

  1. Mac con Apple Silicon (M1 o M2)
  2. Docker Desktop installato (versione minima engine 17.09) o Podman Desktop (versione minima engine 1.6.0)
  3. File binari di Oracle 19c scaricati dal sito ufficiale. Per il download è richiesto essere in posseso di un account Oracle e accettare i termini di licenza.
  4. Storage minino 20-25 Gbyte. Spazio necessario per la build e installazione dell'edizione Enterprise di Oracle.
  5. Git

Ho fatto riferimento alla serie M1 e M2 dei processori Apple Silicon, perché sono quelli per cui ho avuto modo di eseguire il processo di creazione dell'immagine container. I possesori più recenti, M3 e M4 non dovrebbero incontrare problemi.

Personalmente prediligo ormai da tempo l'uso di Podman, ragion per cui, l'immagine container sarà creata usando questo strumento. L'uso di Docker non comporta alcuna differenza in termini di sintassi dei comandi; qualora ne sia presente qualcuna, sarà opportunamente segnalata nel corso dell'articolo.

Procediamo per step con la costruzione dell'immagine container di Oracle 19c. Il primo passo è l'operazione di clone del repository oracle/docker-images.

# Step 1
#  1. Clonazione del repository https://github.com/oracle/docker-images.git
#  2. Cambio directory su docker-images/OracleDatabase/SingleInstance/dockerfiles 
git clone https://github.com/oracle/docker-images.git

cd docker-images/OracleDatabase/SingleInstance/dockerfiles
Console 1 - Clonazione del repository oracle/docker-images

Il prossimo passo è il download del file LINUX.ARM64_1919000_db_home.zip dal sito di Oracle che deve poi essere copiato all'interno della directory 19.3.0.

Figura 1 - Download del file LINUX.ARM64_1919000_db_home.zip dal sito di Oracle
Figura 1 - Download del file LINUX.ARM64_1919000_db_home.zip dal sito di Oracle

# File LINUX.ARM64_1919000_db_home.zip scaricato dal sito di Oracle e copiato
# nella directory 19.3.0 
-rw-r--r--@ 1 amusarra  staff   2,2G 24 Dic 13:00 19.3.0/LINUX.ARM64_1919000_db_home.zip
Console 2 - File LINUX.ARM64_1919000_db_home.zip in 19.3.0

A questo punto passiamo alla costruzione dell'immagine container usando lo script buildContainerImage.sh passando i parametri necessari affinché sia costruita la versione 19.3.0 edizione Enterprise.

Nel caso abbiate scelto di usare Podman, sono necessarie delle operazioni preliminari da eseguire prima di eseguire lo script di creazione dell'immagine container. Occorre fare l'esportazione di due variabili di ambiente: BUILDAH_FORMAT=docker e BUILDAH_ISOLATION=chroot. La prima variabile è richiesta per supportare HEALTHCHECK specificato nel Dockerfile. La seconda variabile è richiesta durante la build dell'immagine container in modalità rootless.

A seguire sono indicati i comandi che dobbiamo lanciare dalla nostra console per avviare il processo di creazione dell'immagine container di Oracle 19c edizione Enterprise (flag -e dello script buildContainerImage.sh).

Nota: Solo l'edizione Enterprise è supportata per le piattaforme ARM64 e di conseguenza Apple Silicon (serie M). Per maggiori informazioni sull'uso dello script, consultare il README del progetto oracle/docker-images.

# Esportazione di BUILDAH_FORMAT e BUILDAH_ISOLATION solo nel caso in cui
# abbiate scelto di usare Podman.
export BUILDAH_FORMAT=docker
export BUILDAH_ISOLATION=chroot

# Avvio del processo di creazione dell'immagine container di Oracle 19c Enterprise Edition
./buildContainerImage.sh -v 19.3.0 -e
Console 3 - Creazione immagine container Oracle

Il processo di build impiegherà un po' di tempo, a seconda della velocità della propria connessione alla rete internet e dalle prestazioni del proprio Mac. Quando l'esecuzione dello script buildContainerImage.sh arriverà al termine, sul terminale dovreste vedere un output simile a quello mostrato a seguire.

[3/3] COMMIT oracle/database:19.3.0-ee
--> 337cf702a194
Successfully tagged localhost/oracle/database:19.3.0-ee
337cf702a194caab7145893915ea8616dc5dfa762a335a078cb4613db4acd766


  Oracle Database container image for 'ee' version 19.3.0 is ready to be extended:

    --> oracle/database:19.3.0-ee

  Build completed in 345 seconds.
Console 4 - Output finale dell'esecuzione dello script buildContainerImage.sh

Possiamo verificare la nuova immagine usando il comando podman image ls --filter "reference=localhost/oracle/database:19.3.0-ee" o docker image ls --filter "reference=localhost/oracle/database:19.3.0-ee", ottenendo un output simile a quello mostrato a seguire.

REPOSITORY                 TAG         IMAGE ID      CREATED         SIZE
localhost/oracle/database  19.3.0-ee   337cf702a194  12 minutes ago  5.6 GB
Console 5 - Output del comando di verifica dell'immagine Oracle 19c

Test di avvio del container Oracle

A questo punto siamo nelle condizioni di poter eseguire un test dell'immagine appena creata avviando l'istanza di Oracle 19c usando il comando indicato a seguire.

# Creazione della directory per il volume
# dei dati Oracle
mkdir -p ~/.oracle/oradata

# Avvio dell'istanza Oracle 19c.
# Nel caso di docker basta sostituire podman con docker
podman run --name oracle19c \
  -p 1521 -p 5500:5500 \
	-e ORACLE_SID=MYDEVENV \
	-e ORACLE_PDB=MYDEVPDB1 \
	-e ORACLE_PWD=LwB_27i5Wi8=1 \
	-v ~/.oracle/oradata:/opt/oracle/oradata \
 	oracle/database:19.3.0-ee

# Per avviare il container in background usare l'opzione -d 
podman run -d --name oracle19c \
	-p 1521 -p 5500:5500 \
	-e ORACLE_SID=MYDEVENV \
	-e ORACLE_PDB=MYDEVPDB1 \
	-e ORACLE_PWD=LwB_27i5Wi8=1 \
	-v ~/.oracle/oradata:/opt/oracle/oradata \
 	oracle/database:19.3.0-ee

# Per visualizzare il log
podman logs -f oracle19c
Console 6 - Avvio dell'istanza Oracle 19c su Apple Silicon (ARM)

Quando si crea l'istanza Oracle è opportuno impostare i parametri indicati sul comando podman run o docker run (vedi opzione -e) invece di lasciare i valori di default.

Senza specificare il volume (vedi opzione -v del comando podman run) per il database, i dati andrebbero persi ogni qualvolta il container fosse ricreato, situazione solitamente non voluta.

Consultare il README del progetto oracle/docker-images per verificare tutti i parametri disponibili per il database. Questi parametri sono molto utili al fine del tuning sulla base delle proprie esigenze.

Esiste la possibilità alquanto comoda, di poter eseguire script SQL alla fine della fase di inizializzazione del database. Qui Running scripts after setup and on startup è descritta la modalità d'uso, mentre in questo articolo How to setup Docker container Oracle Database 19c for Liferay Development Environment è possibile vedere un caso pratico.

Il primo avvio può durare da pochi minuti fino ad alcune decine di minuti, a seconda della configurazione. È importante consultare l'output del container per verificare quando il database è effettivamente pronto all'uso (messaggio: DATABASE IS READY TO USE!). I successivi avvii saranno decisamente più veloci.

Volendo potremmo anche monitorare lo status del container usando il comando podman ps -f "name=oracle19c" o docker ps -f "name=oracle19c" verificando il valore della colonna STATUS che dovrebbe essere valorizzata con Up <n> minutes (starting) quando ancora il container è in fase di avvio per poi assumere il valore Up <n> minutes (healthy) una volta che l'istanza Oracle sarà operativa.

Per fare una verifica veloce che tutto sia andato per il verso giusto, eseguiamo un test di connessione usando il comando podman exec -it oracle19c sqlplus system/LwB_27i5Wi8=1 per ottenere un output simile a quello indicato a seguire.

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jan 4 23:03:40 2025
Version 19.19.0.0.0

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

Last Successful login time: Sat Jan 04 2025 22:56:53 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

SQL>
Console 7 - Test di connessione all'istanza Oracle tramite SQLPlus

Ultima verifica da poter fare è la connessione alla console Enterprise Manager Database Express disponibile all'indirizzo https://localhost:5500/em accedendo con le credenziali da sysdba.

Figura 2 - Dashboard della console Enterprise Manager Database Express
Figura 2 - Dashboard della console Enterprise Manager Database Express

Dopo aver creato l'immagine container di Oracle 19c ed eseguito un test di avvio dell'istanza Oracle, possiamo passare alla pubblicazione su un repository per immagini container.

Come condividere l'immagine container su repository

Per condividere l’immagine con il team o accedervi da altre macchine, possiamo pubblicarla su un repository pubblico o privato. Esistono diversi repository, ma per lo scopo didattico dell'articolo, la scelta ricade su Docker Hub. Qualora non abbiate un account su Docker Hub, è necessario crearlo affinché sia possibile eseguire il push dell'immagine. La creazione dell'account è gratuita seguendo il link Create your account on Docker Hub.

I passi per poter pubblicare l'immagine su Docker Hub sono:

  1. eseguire il login su Docker Hub;
  2. eseguire il tag dell'immagine;
  3. eseguire il push dell'immagine.

A seguire sono indicati i comandi che devono essere lanciati dalla propria console.

# Login su Docker Hub usando Podman
podman login docker.io

# Login su Docker Hub usando Docker
# Sostituisci <your-username> con il tuo nome utente Docker Hub.
docker login -u <your-username>

# Tag dell'immagine (sostituisci podman con docker nel caso usassi Docker)
# Sostituisci <your-dockerhub-username> con il tuo nome utente Docker Hub.
podman tag oracle/database:19.3.0-ee <your-dockerhub-username>/oracle19c:19.3.0

# Push dell'immagine su Docker Hub (sostituisci podman con docker nel caso usassi Docker)
# Sostituisci <your-dockerhub-username> con il tuo nome utente Docker Hub.
podman push <your-dockerhub-username>/oracle19c:19.3.0
Console 8 - Pubblicazione immagine Oracle 19c su Docker Hub

Dopo aver eseguito il push dell'immagine di Oracle 19c, accedendo su Docker Hub dovreste vedere la nuova immagine e i dettagli, così come mostrato dalla figura a seguire. In questo caso è opportuno configurare questo specifico repository come privato (che nel piano gratuito è disponibile solo una unità).

Figura 3 - Dettagli dell'immagine Oracle 19c caricata su Docker Hub
Figura 3 - Dettagli dell'immagine Oracle 19c caricata su Docker Hub.

Da questo momento in poi sarà possibile reperire l'immagine di Oracle 19c eseguendo il pull in questo modo: podman pull docker.io/amusarra/oracle19c:19.3.0 (o usando il comando docker al posto di podman).

Best practice per l’ottimizzazione

Una volta configurata l’immagine container di Oracle Database 19c, ci sono diverse strategie che possiamo adottare per ottimizzarne l’utilizzo e migliorare la produttività. Di seguito sono indicati una serie di suggerimenti per configurare al meglio l'ambiente di sviluppo.

  1. Configurazione delle risorse: imposta limiti di CPU e RAM per evitare che il database monopolizzi le risorse.
  2. Persistenza dei dati: utilizza volumi per salvare i dati, così da evitare perdite in caso di riavvio del container.
  3. Gestione delle versioni: utilizza tag specifici per differenziare le versioni dell’immagine (es. 19.3.0-dev o 19.3.0-prod).

Conclusioni

Configurare e condividere un’immagine container di Oracle Database 19c per Apple Silicon è un’operazione semplice e pratica. Salvando l’immagine su uno dei repository disponibili (anche gratuitamente), puoi ridurre i tempi di configurazione, migliorare la collaborazione con il tuo team e garantire un ambiente di sviluppo coerente.

Risorse

Per approfondire i concetti trattati in questo articolo e ottimizzare ulteriormente l’utilizzo di Oracle Database su Docker, ecco alcune risorse online utili.

Documentazione Ufficiale

Libri

  • Oracle on Docker: Running Oracle Databases in Linux Containers di Sean Scott. Questo libro affronta i container dal punto di vista di amministratori di database, sviluppatori e amministratori di sistema. Spiega le differenze tra container e macchine virtuali e descrive perché i contenitori offrono maggiore velocità, flessibilità e portabilità, con requisiti di risorse inferiori. Imparerai come l'esecuzione di database Oracle in container integra l'infrastruttura di database esistente e accelera lo sviluppo e comprenderai i vantaggi che offrono per gli ambienti di test e convalida (https://amzn.to/4iXoJSt).
  • Docker: Sviluppare e rilasciare software tramite container di Serena Sensini. I container Docker permettono di impacchettare e rilasciare un'applicazione corredata da tutti i suoi componenti funzionali e hanno cambiato la catena di fornitura del software sia nelle piccole che nelle grandi imprese, rivoluzionando il modo in cui società come Spotify, Netflix ed Expedia distribuiscono le loro soluzioni (https://amzn.to/40kjVz7). 

Progetti e Guide Online

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...