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
Muito bom Sergio
#11 ERROR: error committing b4tlsxiqf1h6a4522kq2x03s2: write /var/lib/docker/buildkit/metadata_v2.db: read-only file system
> [builder 2/2] RUN chmod ug+x /opt/install/*.sh && sync && /opt/install/installDBBinaries.sh ee:
error committing b4tlsxiqf1h6a4522kq2x03s2: write /var/lib/docker/buildkit/metadata_v2.db: read-only file system
ERROR: Oracle Database container image was NOT successfully created.
ERROR: Check the output and correct any reported problems with the build operation.
Esta gerando esse erro, consegue ajudar?
Eu lembro que algo parecido ocorreu comigo na primeira tentativa, mas foi devido a falta de espaço em disco. Você poderia informar em que passo aconteceu esse erro ?