No dia a dia, é muito comum precisar subir de forma rápida um ambiente de teste para validar cenários envolvendo o Oracle Database, especialmente com ferramentas como o Oracle APEX e o Oracle ORDS.
Sabemos, contudo, que a instalação tradicional do Oracle Database costuma ser demorada e burocrática, requerendo uma série de configurações do ambiente operacional. Esse cenário agrega um trabalho extra que, por vezes, desestimula a continuidade do estudo ou teste de alguma funcionalidade específica.
Nesta postagem, mostro como configurar um ambiente completo de teste com o Oracle Database 23ai, o Oracle APEX 24.2 e o Oracle ORDS 25 em container Docker, de forma rápida e em poucos minutos.
Para seguir o passo a passo, vamos precisar do Docker instalado e em execução. Caso precise de orientação para instalação do Docker, tenho uma publicação no meu blogger mostrando o processo de instalação do docker no oracle linux 7.9.
Sem mais delongas, vamos pôr as mãos na massa!
Baixando os arquivos necessários
Para facilitar o processo, criei um pacote .zip com o Dockerfile, o ords 25, o apex 24 e o o rpm de instalação do java 25. Ao baixar o pacote você terá um arquivo de nome Docker_oracle_apex_orcl.zip . Vamos serguir como download e descompressão do pacote.
# Executar como root
mkdir /Docker
cd /Docker
wget -O Docker_oracle_apex_orcl.zip --no-check-certificate -r 'https://drive.usercontent.google.com/download?export=download&id=1iKvHmaEKacmSOBT0JFgPO-Xynqf0jx23&confirm=t'
unzip Docker_oracle_apex_orcl.zip
rm Docker_oracle_apex_orcl.zipRecomendo que veja o conteúdo do Dockerfile para entender o processo de construção da nossa imagem.
# Executar como root
cat /Docker/DockerfileCriando uma imagem a partir do Dockerfile
Agora que temos nosso Dockerfile com as configurações mínimas necessárias, vamos criar uma imagem.
Para criar a imagem com um Dockerfile usamos o comando docker build -t <nome_que_desejamos> complementamos o comando com path do Dockerfile. Caso estejamos executando o comando do mesmo diretório onde está o Dockefile podemos usar apenas um ponto ( . )
# Executar como root
cd /Docker/
docker build -t oracle_ords:25.2 .A saída do comando será algo semelhante ao exposto abaixo:
[root@localhost Docker]# docker build -t oracle_ords:25.2 .
Sending build context to Docker daemon 3.602GB
Step 1/17 : FROM container-registry.oracle.com/database/free:latest
Trying to pull repository container-registry.oracle.com/database/free ...
latest: Pulling from container-registry.oracle.com/database/free
867532f50b57: Pull complete
a788b7aca3f6: Pull complete
....
....
....
....
inflating: /home/oracle/ords/examples/plugins/lib/jakarta.inject-api-2.0.1.jar
inflating: /home/oracle/ords/examples/plugins/lib/ords-plugin-api-25.3.1.289.1312-javadoc.jar
Removing intermediate container f199b6913b08
---> db3c42f385ce
Step 16/17 : WORKDIR $ORDS_HOME
---> Running in a5a468847794
Removing intermediate container a5a468847794
---> 38491d2ae586
Step 17/17 : EXPOSE 1521 8080
---> Running in 9d8b1b3c22e1
Removing intermediate container 9d8b1b3c22e1
---> 4d5979966b7f
Successfully built 4d5979966b7f
Successfully tagged oracle_ords:25.2
[root@localhost Docker]#Ao listar as images, a image oracle_ords deve está presente
[root@localhost Docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle_ords 25.2 4d5979966b7f 7 minutes ago 10.9GB
container-registry.oracle.com/database/free latest 3c986e106c3e 2 months ago 9.92GBIniciando nosso container
Antes de subir nosso container, vamos criar uma network especifica para ele.
docker network create apex-networkUma vez que temos nossa imagem pronta, vamos instanciar um container com a mesma.
Para garantir a persistência dos dados mesmo após um reboot do container, vamos criar um diretório no host hospedeiro para que o container armazene os dados importantes do banco nesse diretório compartilhado com o hospeiro. Neste exemplo estou usando o diretório /Docker para persistir os dados do containter
cd /Docker
chmod -R 777 /Docker
docker run -it --cap-add=NET_RAW -d \
--name oracle_ords \
--hostname=myordshost \
-p 1523:1521 -p 9090:8080 \
--network=apex-network \
-v /Docker:/opt/oracle/oradata oracle_ords:25.2Configurando o apex
Agora que nosso container está funcional, vamos instalar e configurar o oracle apex 24.2.
Antes de tudo vamos conectar no container.
docker exec -it oracle_ords /bin/bashVamos no posicionar no diretório dos binários do apex, conectar no banco via sqlplus e executar os comandos de instalação do apex.
cd /opt/oracle/oradata/apexOs scripts abaixo foram disponibilizados quando foi feito o download descrito no início desta publicação. Se você seguiu corretamente as etapas até aqui, basta continuar executando os comandos abaixo.
sqlplus / as sysdba
-- Cria o pdb, tablespace e instala o oracle apex
@create_ts_pdb_apex.sql
-- Faz a configuração de senha dos usuários do apex
@apxchpwd.sql -- Informar a senha: (Senha123#_)
@apex_rest_config.sql -- Informar os seguintes dados:
/*
Senha:
Enter a password for the APEX_LISTENER user[]: Senha123#_
Enter a password for the APEX_REST_PUBLIC_USER user []: Senha123#_
*/
ALTER USER apex_public_user IDENTIFIED BY Senha123#_ ACCOUNT UNLOCK;
ALTER USER apex_listener IDENTIFIED BY Senha123#_ ACCOUNT UNLOCK;
ALTER USER apex_rest_public_user IDENTIFIED BY Senha123#_ ACCOUNT UNLOCK;
exit
Nesse ponto, já temos o apex instalado e configurado no banco de dados. Vamos fazer a configuração do ORDS.
Configurando o ORDS
Vamos copiar as imagens do apex para o ords
cd /opt/oracle/oradata/apex
cp -r images /home/oracle/ords/Agora que temos tudo preparado, vamos fazer a instalação do ORDS. Esta etapa requer um pouco mais de atenção.
Nesta etapa vamos basicamente:
- Definir a string de conexão com o banco
- Definir uma senha para o usuário
ORDS_PUBLIC_USER - Especificar a tablespace para os objetos do ords
- Informar o local dos arquivos estáticos do apex (pasta images)
Vamos nos posicionara dentro do diretório onde se encontra ords.war e na sequencia executar o comando de instalação. Abaixo apresento o comando executado e as respostas que forneci durante a instalação.
cd /home/oracle/ords
java -jar ords.war install
S -> 1 (localhost; 1521; apex)
sys/Senha123#_
3 -> S (Senha123#_)
4 -> (apex; TEMP)
9 -> /home/oracle/ords/images
AApós a conclusão da instalação já teremos o ords acessível. Segue os dados de acessso:
OBS: O seu IP provavelmente será diferente do meu.
Devemos usar o IP da máquina onde instalamos o docker. O a porta do ords (8080) foi mapeada na porta 9090 da máquina que hospeda o container.
http://192.168.0.252:9090/ords
Workspace: INTERNAL
User: ADMIN
Senha: Senha123#_Para acessar o banco de dados usamos as seguintes informações
IP: <seu_ip> (no meu caso é 192.168.0.252)
Porta:1523 (pois mapeamos essa porta)
Service name: FREE (CDB$ROOT)
User: sys
Senha: Senha123#_Para facilitar o processo de startup do serviço do ORDS, você pode criar um script ou adicionar como serviço o linux.
Da forma como está configurado atualmente o serviço o ords fica indisponível quando sua sessão no container é finalizada.
Vamos finalizar o processo atual do ords para iniciar com o scrip.
Para finalizar podemos usar o kill -9 passando os números dos processo do ORDS.
[root@localhost Docker2]# ps -ef | grep "ords.war"
oracle 3734 26668 1 21:20 ? 00:00:42 java -jar ords.war install
oracle 8891 26668 0 21:29 ? 00:00:18 java -jar ords.war serve
root 28340 19445 0 22:09 pts/0 00:00:00 grep --color=auto ords.war
[root@localhost Docker2]# kill -9 3734 8891
No meu caso eu configurei o script abaixo.
vi /opt/oracle/oradata/start_apex.sh
#!/bin/bash
cd /home/oracle/ords
java -jar ords.war serve &Alterar as permissão de execução do script
chmod +x /opt/oracle/oradata/start_apex.shUsando o script para iniciar o ords
/opt/oracle/oradata/start_apex.sh


0 Comentários