Docker가 Ubuntu에 Oracle 11g 데이터베이스를 설치하는 데 도움을 줄 수 있나요?

Docker가 Ubuntu에 Oracle 11g 데이터베이스를 설치하는 데 도움을 줄 수 있나요?

우리는 개발자가 테스트할 수 있는 Oracle 11g 인스턴스를 제공하려는 일반적인 문제로 인해 어려움을 겪고 있습니다. 표준 빌드 에이전트는 Ubuntu 12.04를 기반으로 하지만 Oracle은 RedHat 기반 OS만 지원합니다.

인터넷에 떠다니는 Ubuntu에 Oracle을 설치하는 방법에 대한 몇 가지 해킹이 있지만 이는 매우 취약하고 실패의 문제인 것 같습니다.

Oracle을 지원하기 위해 RedHat(/CentOS) 위에 전체 빌드 서버 Puppet 구성을 지원하지 않아도 되기를 원했기 때문에 Docker를 사용하여 Oracle에만 필요한 RedHat과 유사한 환경을 제공할 수 있는지 궁금해지기 시작했습니다. 표준 Ubuntu 시스템의 최고 수준입니다. 아이디어는 Oracle이 자체 컨테이너에서 실행되지만 나머지 빌드 에이전트는 여전히 표준 Ubuntu에서 실행되어 TCP를 통해 Oracle과 통신할 수 있다는 것입니다.

나는 LXC가 무엇인지, 그리고 KVM/VirtualBox 등과 같은 본격적인 가상화와의 차이점을 알고 있지만 여전히 가능할 수 있는지 궁금합니다.

감사해요.

답변1

여기 내 포크가 있습니다.

  • 이미지 크기를 3.8G에서 825MB로 줄입니다.
  • 데이터베이스 초기화가 이미지 빌드 단계에서 벗어났습니다.
  • 이제 데이터베이스 파일이 마운트되지 않은 상태로 컨테이너 시작 시 데이터베이스가 초기화됩니다.
  • 컨테이너 외부의 미디어 재사용 지원
  • 컨테이너 중지 시 정상적인 종료가 추가되었습니다.
  • SSHD를 제거했습니다.

여기에서 확인할 수 있습니다:
https://registry.hub.docker.com/u/sath89/oracle-xe-11g/
https://github.com/MaksymBilenko/docker-oracle-xe-11g

답변2

Oracle Express가 귀하에게 적합한 경우:

  1. Oracle XE 11g rpm을 다운로드합니다.
  2. Alien을 사용하여 rpm을 deb로 변환합니다.
  3. dpkg-deb 명령을 사용하여 deb 패키지를 "추출"합니다.
  4. deb 스크립트를 수정합니다.
    • preinst 시작 부분에서 [ "$1" != "1" ]을 [ "$1" != "install" ]로 변경합니다.
    • postint 시작 부분에서 [ "$1" = "1" -o -z "$2" ]를 [ "$1" = "configure" -a -z "$2" ]로 변경합니다.
    • prerm 및 postrm에서 [ "$1" = "0" ]을 [ "$1" = "remove" -o "$1" = "purge" ]로 변경합니다.
    • postinst & prerm에서 'chkconfig'를 'update-rc.d' 명령으로 변경합니다.
    • init 스크립트에서: 일부 시스템 명령의 절대 경로를 제거합니다. /etc/sysconfig/oracle-xe를 /etc/default/oracle-xe로 수정합니다. /var/lock/subsys를 /var/lock으로 수정합니다. 등등...
    • 제어 파일에 종속성을 추가합니다: bc & libaio1.
  5. deb 명령을 사용하여 deb 패키지를 빌드합니다.

이제 Oracle XE 11g의 deb 패키지가 생겼습니다. 설치하세요!

하지만 여전히 문제가 있습니다: /dev/shm. 해결 방법은 다음과 같습니다.

  1. /etc/init/mounted-dev.conf에 다음 줄을 주석 처리합니다. [ -e /dev/shm ] || ln -s /run/shm /dev/shm.
  2. /etc/fstab에 줄을 추가합니다: shm /dev/shm tmpfs size=2g 0 0
  3. rm -f /dev/shm; mkdir /dev/shm; shm 마운트

Oracle XE 시작: service oracle-xe 구성

답변3

나는 다음을 사용하고 있습니다도커 이미지좋은 수준의 성공으로.

다음을 사용하여 실행하세요.

 docker pull wnameless/oracle-xe-11g

그리고

 docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g

답변4

이는 확실히 실현 가능한 접근 방식입니다. 우리는 호스트 시스템에 Ubuntu 14.04를 사용하고 개발 목적으로 Docker 컨테이너 내에서 여러 Oracle 11g 인스턴스를 실행합니다.

현재(Docker 1.5) 11g와 12c 모두에서 주요 문제는 Docker의 하드 코딩된 공유 메모리 제한입니다.문제 #2606. 현재 이에 대한 두 가지 해결 방법이 있습니다.

  1. docker run --privileged ...인스턴스를 시작하기 전에 더 많은 메모리로 /dev/shm을 사용 하고 다시 마운트하세요.
  2. Docker를 직접 수정하고 다시 빌드하세요. 이 경우 한 번에 이미지를 생성할 수 있는 12c용 Dockerfile을 구성했습니다.https://github.com/arpagaus/docker-oracle-12c

관련 정보