Ich habe den Innovationstag von Xebia im letzten August damit verbracht, in einem Team mit zwei meiner Kollegen und einem Gast mit Docker zu experimentieren. Wir fanden, dass sich Docker wirklich cool anhört, vor allem, wenn Ihr Ziel darin besteht, Software auszuführen, die keine große Infrastruktur benötigt und einfach installiert werden kann, z.B. weil sie aus einer jar-Datei läuft. Wir fragten uns jedoch, was passieren würde, wenn wir versuchen würden, Unternehmenssoftware, wie eine Oracle-Datenbank, auszuführen. Eine Software, die bekanntermaßen schwierig zu installieren ist und wählerisch ist, was die Infrastruktur betrifft, auf der sie läuft. Daher war unser Tagesziel die Installation einer Oracle-Datenbank auf CoreOS und Docker.
Wir haben uns für CoreOS entschieden, weil es einen geringen Platzbedarf hat und sich mit Vagrant leicht in einer VM installieren lässt (siehe coreos.com platforms vagrant/). Wir haben die Standarddateien von Vagrant und CoreOS mit einer einzigen Änderung verwendet: $vb_memory = 2024 in der config.rb, die die Ausführung des Oracle Pre-Installers ermöglicht. Die von uns verwendeten Konfigurationsdateien finden Sie hier: github.com/jvermeir/OraDocker/
Ausgehend von einer standardmäßigen CoreOS-Installation haben wir dann die hier beschriebenen Schritte durchgeführt: Installation der Oracle-Datenbank 11g Release 2 unter Linux.
Nachfolgend sehen Sie einen Ausschnitt aus der ersten Version unserer Dockerdatei (Tag: b0a7b56).
FROM centos:centos6
Schritt 1: Hostname festlegen
ENV HOSTNAME oracle.docker.xebia.com
Schritt 2
RUN yum -y install wget
RUN wget --no-check-certificate https://public-yum.oracle.com/public-yum-ol6.repo -O /etc/yum.repos.d/public-yum-ol6.repo
RUN wget --no-check-certificate https://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
RUN yum -y install oracle-rdbms-server-11gR2-preinstall
Beachten Sie, dass dies eine Weile dauert, da das Vorinstallationsprogramm eine Reihe von CentOS-Paketen herunterlädt, die in CoreOS fehlen.
Führen Sie dies in einer Shell aus:
vagrant up
vagrant ssh core-01
cd ~/share/docker
docker build -t oradocker .
Dies schien ein guter Zeitpunkt zu sein, um unsere Arbeit in Docker zu speichern:
docker ps # note the container-id and substitute for the last parameter in the line below this one.
docker commit -m "executed pre installer" 07f7389c811e janv/oradocker
An diesem Punkt ignorieren wir geflissentlich einige der Ratschläge, die in der Installationsanleitung von Tecmint unter 'Schritt 2' aufgeführt sind, nämlich das Hinzufügen des HOSTNAME zu /etc/syconfig/network, das Erlauben des Zugriffs auf den xhost (wozu sollte das gut sein?) und das Zuordnen einer IP-Adresse zu einem Hostnamen in /etc/hosts (das Setzen des Hostnamens über 'ENV HOSTNAME' hatte keine wirkliche Wirkung, soweit wir das feststellen konnten). Wir haben das versucht, aber es schien nicht zu funktionieren. Wir verleugneten die Realität und ersetzten sie durch unsere eigene...
Als Nächstes fügten wir der Dockerdatei Docker-Befehle hinzu, die den Oracle-Benutzer erstellen, die relevanten Installationsdateien kopieren und sie entpacken. Docker beginnt, indem es einen Build-Kontext an den Docker-Daemon sendet. Dies dauert eine ganze Weile, da die Oracle-Installationsdateien sehr groß sind. Wahrscheinlich gibt es eine Möglichkeit, dies zu vermeiden, aber wir haben uns das nicht angesehen. Leider kopiert Docker die Installationsdateien jedes Mal, wenn Sie docker -t ausführen ... nur um später festzustellen, dass sich nichts geändert hat.
Die nächste Version unserer Dockerdatei funktioniert insofern, als dass sie den Installer startet. Der Installer beschwert sich dann über fehlenden Swap-Speicherplatz. Wir haben dies vorübergehend auf der CoreOS-Ebene behoben, indem wir die folgenden Befehle ausgeführt haben:
sudo su -
swapfile=$(losetup -f)
truncate -s 1G /swap
losetup $swapfile /swap
mkswap $swapfile
swapon $swapfile
hier gefunden: Re: swapfile on btrfs, temporary solution for wiki
Das funktioniert, aber es überlebt keinen Neustart.
Jetzt fährt das Installationsprogramm fort, nur um festzustellen, dass das Netzwerk nicht richtig konfiguriert ist (eine dieser IgnoreAndContinue-Entscheidungen, die sich rächen):
[FATAL] PRVF-0002 : Could not retrieve local nodename
Damit dies funktioniert, müssen Sie /etc/hosts ändern, was mit unserer Docker-Version nicht möglich ist. Anscheinend wird dies in einer späteren Version behoben, aber wir sind nicht dazu gekommen, das zu testen. Und vielleicht reicht es sogar, /etc/sysconfig/network zu ändern, aber auch das haben wir nicht ausprobiert.
Die neueste Version unserer Arbeit finden Sie auf github (Tag: d87c5e0). Das Repository enthält nicht die Dateien des Oracle-Installationsprogramms. Wenn Sie es selbst ausprobieren möchten, können Sie die Dateien von Oracle Database Software Downloads herunterladen und die Docker-Datei bei Bedarf anpassen.
Unten finden Sie eine Liste von ToDo's:
- Vermeiden Sie das Kopieren großer Installationsdateien, wenn diese ohnehin nicht verwendet werden.
- Finden Sie heraus, was passieren soll, wenn Sie 'ENV HOSTNAME oracle.docker.xebia.com' aufrufen.
- Machen Sie die Einstellung der Auslagerungsdatei auf CoreOS dauerhaft.
- Aktualisieren Sie die Docker-Version, damit wir /etc/hosts ändern können
Alles in allem war dies ein nützlicher Tag, auch wenn das Endergebnis keine funktionierende Datenbank war. Wir hoffen, dass wir in Zukunft weiter an den ToDo's arbeiten werden.
Verfasst von

Jan Vermeir
Developing software and infrastructure in teams, doing whatever it takes to get stable, safe and efficient systems in production.
Unsere Ideen
Weitere Blogs
Contact



