Oracle 19c em um container Docker
Olá camaradas !
Hoje estou de volta para mostrar a vocês como rodar um container com o Oracle 19c no Docker. Tudo isso rodando no meu bom e velhor Ubuntu 20.04.4 LTS.
Para isso, iremos utilizar o repositório github oficial da Oracle. Lá você encontrará os dockerfiles e exemplos necessários para instalar diferentes produtos.
Primeiramente, escolha um diretório em sua máquina, para fazermos a clonagem do projeto de nosso interesse. Para isso, utilize o comando abaixo:
git clone https://github.com/oracle/docker-images

Agora vá para o diretório docker-images
cd docker-images

Observe que temos disponível a imagem de vários produtos. Vamos a aquele que nos interessa, o Oracle 19c.
cd OracleDatabase/SingleInstance/dockerfiles/19.3.0

Faça o download do 19c através do link abaixo:
https://www.oracle.com/br/database/technologies/oracle19c-linux-downloads.html
Copie para o mesmo diretório

Vamos agora limpar o arquivo db_inst e retirar o comentário e as linhas em branco. Para isso, use o comando abaixo:
grep -v ^# db_inst.rsp | grep -v ^$

Faça o mesmo com o dbca.
grep -v ^# dbca.rsp.tmpl | grep -v ^$

Voltemos ao diretório dockerfiles e executemos o comando:
./buildContainerImage.sh -v 19.3.0 -e

Ops, algo deu errado…vamos verificar o erro:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied
./buildContainerImage.sh: line 94: [: : integer expression expected
Sem permissão para acessar o docker… 🙁
Para resolver esse problema é simples ! Basta executar o comando abaixo:
sudo chmod 666 /var/run/docker.sock
Caso você não tenha tomado esse erro, basta ignorar essa parte.

Vamos tentar novamente.

Sem erros e dando um build na imagem. 🙂
Ao lancar o setup wizard, a minha instalacao acusou alguns WARNINGs.

O importante é que essa etapa termine com a seguinte mensagem:
Successfully Setup Software with warning(s)

Após esse ponto, se tudo ocorrer bem até o final, deverá aparecer como na tela abaixo:

Imagem gerada com sucesso !!!! 🙂
Build completed in 2016 seconds.
Agora é hora de rodarmos o nosso container. Para isso, usaremos o comando abaixo:
docker run \ --name oracle19c \ -p 1521:1521 \ -p 5500:5500 \ -e ORACLE_PDB=orcl \ -e ORACLE_PWD=<coloque a sua senha aqui> \ -e ORACLE_MEM=2000 \ -v /opt/oracle/oradata \ -d \ oracle/database:19.3.0-ee
Observe que ele executa o docker run com alguns parâmetros. Ele nomeia o container (–name), libera as portas necessárias para o funcionamento e acesso do banco de dados (-p), seta algumas variáveis necessárias para a instalação (-e). define um volume para o oradata (-v) e executa como detach (-d).

Como executamos como detach, a saída não sera mostrada. Para acompanhar a instalação, você poderá usar o comando abaixo:
sudo docker logs -f oracle19c

Ou utilizar alguma GUI para Docker. Eu utilizo o excelente portainer.


E a instalação continua até a sua finalização…


Instalação concluída com sucesso !!!
Agora vamos verificar se o listener esta no ar. Primeiramente, precisamos acessar o interactive shell do container. Para isso, execute o comando abaixo:
sudo docker exec -it oracle19c /bin/bash

Pra verificar o listener, execute o comando abaixo:
lsnrctl status


Banco e listener no ar !!!
Agora vamos abrir o SQL Developer e testar a conexão.
Se você não possui o SQL Developer instalado e não sabe como fazê-lo, leia o meu artigo abaixo que explica sobre todos os passos necessários para o SQL Developer rodar no seu Ubuntu.
Abrindo uma conexão com o Oracle 19c.

Failure -Test failed: IO Error: Got Minus one from a read call
O erro acima é resultado de um bug da versão 19.3.0 que afeta exclusivamente as conexões via JDBC. Felizmente, há um workaround para que o SQL Developer possa contornar esse problema.
Para isso, precisaremos alterar o arquivo ide.conf e incluir o seguinte AddVMOption nele:
AddVMOption -Doracle.net.disableOob=true
Na minha instalação, ele fica no diretório /opt/sqldeveloper/ide/bin

Salvemos o arquivo, iniciemos uma nova sessão do SQL Developer e tentemos novamente abrir uma conexão com nosso Oracle 19c.

Sucesso !!!!!

Meus parabéns ! O seu banco de dados Oracle 19c está completamente no ar e acessível !!!
Uma última dica. Caso você queira fazer alguma alteração no sqlnet.ora ou no listener.ora ANTES de criar a sua imagem, basta alterar o arquivo createDB.sh que fica no diretório /docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0 e incluir as opções que desejar nesses dois arquivos.


Bom pessoal, é isso ! Espero que este artigo seja de grande ajuda a aqueles que estão iniciando os seus estudos com Docker e Oracle.
Referências
- How to setup Docker container Oracle Database 19c for Liferay Development Environment
- Install Oracle Database 19c in docker container
- How to fix docker: Got permission denied issue
- Is there a solution to JDBC driver bug in “Out Of Band Breaks”?
- ORA-12637: Packet receive failed
- Document usage of DISABLE_OOB to work around Docker proxy bug #43

Formado em Gestão em Tecnologia da Informação, com sólidos conhecimentos em SQL, PL/SQL, Oracle Forms, Reports e E-Business Suite (AP,AR e GL).
Foi durante 3 anos gerente de tecnologia de grande empresa do setor de saúde, e atualmente atua como Analista de Sistema Sênior na Scania Latin America e também como Diretor-fundador do GPO (Grupo de Profissionais Oracle).
Muito bom Sergio