
Estamos enfrentando um problema comum ao tentar fornecer uma instância do Oracle 11g para nossos desenvolvedores testarem. Nossos agentes de construção padrão são baseados no Ubuntu 12.04, mas a Oracle oferece suporte apenas a sistemas operacionais baseados em RedHat.
Existem alguns hacks sobre a instalação do Oracle no Ubuntu circulando pela rede, mas eles parecem ser muito frágeis e uma questão de acerto e erro.
Queremos evitar ter que oferecer suporte a uma configuração inteira do servidor de compilação Puppet em cima do RedHat(/CentOS) apenas para oferecer suporte ao Oracle, então eu estava começando a me perguntar se poderíamos empregar o Docker para fornecer um ambiente semelhante ao RedHat necessário apenas para o Oracle em topo de nossos sistemas Ubuntu padrão. A ideia é que o Oracle seja executado em seu próprio contêiner, mas o restante do agente de construção ainda será executado no Ubuntu padrão, capaz de se comunicar com o Oracle por TCP.
Eu sei o que são LXCs e a diferença entre eles e a virtualização completa como KVM/VirtualBox etc., mas queria saber se isso ainda seria possível.
Obrigado.
Responder1
Aqui está meu garfo:
- Reduza o tamanho da imagem de 3,8 G para 825 MB
- A inicialização do banco de dados saiu da fase de construção da imagem
- Agora o banco de dados é inicializado na inicialização do contêiner sem nenhum arquivo de banco de dados montado
- Suporte à reutilização de mídia fora do contêiner
- Adicionado desligamento normal na parada do contêiner
- SSD removido
Você pode conferir aqui:
https://registry.hub.docker.com/u/sath89/oracle-xe-11g/
https://github.com/MaksymBilenko/docker-oracle-xe-11g
Responder2
Se o Oracle Express for adequado para você:
- Baixe o Oracle XE 11g rpm.
- Converta rpm em deb usando alien.
- "Extraia" o pacote deb usando o comando dpkg-deb.
- Modifique os scripts deb:
- Altere [ "$1" != "1" ] para [ "$1" != "install" ] no início do preinst.
- Altere [ "$1" = "1" -o -z "$2" ] para [ "$1" = "configure" -a -z "$2" ] no início do postint.
- Altere [ "$1" = "0" ] para [ "$1" = "remove" -o "$1" = "purge" ] em prerm e postrm.
- Altere o comando 'chkconfig' para 'update-rc.d' no postinst & prerm.
- No script de inicialização: remova o caminho absoluto de alguns comandos do sistema; corrija /etc/sysconfig/oracle-xe para /etc/default/oracle-xe; corrija /var/lock/subsys para /var/lock; e assim por diante...
- Adicione dependências ao arquivo de controle: bc & libaio1.
- Construa o pacote deb usando o comando deb.
Agora você tem um pacote deb do Oracle XE 11g. Instale-o!
Mas ainda há um problema: /dev/shm. Veja como consertar:
- Comente a linha em /etc/init/mounted-dev.conf: [ -e /dev/shm ] || ln -s /run/shm /dev/shm.
- Adicione uma linha em /etc/fstab: shm /dev/shm tmpfs size=2g 0 0
- rm -f /dev/shm; mkdir /dev/shm; monte shm
Inicie o Oracle XE: serviço oracle-xe configure
Responder3
Estou usando o seguinteimagem da janela de encaixecom um bom nível de sucesso.
Faça-o funcionar com:
docker pull wnameless/oracle-xe-11g
e
docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g
Responder4
Esta é definitivamente uma abordagem viável. Usamos Ubuntu 14.04 para nossas máquinas host e executamos várias instâncias Oracle 11g em contêineres Docker também para fins de desenvolvimento.
Atualmente (Docker 1.5) para 11g e 12c, o principal problema é o limite de memória compartilhada codificada do DockerEdição #2606. Atualmente, existem duas soluções alternativas para isso:
- Use
docker run --privileged ...
e remonte /dev/shm com mais memória antes de iniciar a instância - Modifique e reconstrua o Docker você mesmo. Para este caso eu montei um Dockerfile para 12c que permite criar uma imagem de uma só vez:https://github.com/arpagaus/docker-oracle-12c