Posts mit dem Label Docker werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Docker werden angezeigt. Alle Posts anzeigen

Montag, 17. Mai 2021

Running APEX 21.1 in Docker

Last week I posted a screenshot of the new Oracle APEX 21.1 running in my docker environment on Ubuntu Linux and I was asked to give a futher view of installing the new version. Here it comes right now 😀

To make things easier I searched the internet for a template of a docker project and I found the git repository from fuzzlebrain fuzziebrain/docker-apex-stack: Utility scripts for creating an Oracle Application Express stack as a Docker container. (github.com).

In general the process clones the official Oracle docker images and installs the needed software that is configured in a configuration file.

Step 1 is cloning the git repository to my local file system:


Prerequisites of software packages:
    Install the following things in your host:

  •   Git
  •   Curl
  •   Docker (of course)

Step 2 is getting the required the installer files and placing them in the subfolder <files>

  • Oracle Database 18c XE or any of the required installation files from OTN (supports versions up to 19.3 as of April 25, 2019)
  • Oracle Application Express (supports versions up 21.1 as of May 12, 2021)
  • Oracle REST Data Services (supports versions up to 20.4.3 as of May 12, 2021) or ords-21.1.1.116.2032.zip
  • Java Development Kit SE 8 (IMPORTANT: Please download the tarball, e.g. jdk-8u291-linux-x64.tar.gz.)

You can even try to build your docker images with different versions of ORDS or APEX. 
After executing the first step for several times I changed the first script 01-build.sh a little bit and removed the line where the official docker images are pulled. Why ? Because they are placed in the folder dockerfiles after the first run and pulled every time the process is started.


The second "issue" I modified is in the used 18c XE database Dockerfile as the install file is downloaded every time docker creation runs, But it should use the rpm file from the files folder.

old: INSTALL_FILE_1="https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm" \

new: INSTALL_FILE_1="oracle-database-xe-18c-1.0-1.x86_64.rpm" \


Step 3 is to configure my settings for the creation process in the file mysettings.env.
Make a copy of settings.env.sample, e.g. mysettings.env, and modify as desired. 

mysettings.env  should contain the following variables:


 You can change many parameters in there e.g. the oracle SID, the versions, the ports and the passwords for Oracle, APEX and ORDS. When you are done the DB creation process can be started.

Step 4 is to run the first script to grab the latest Docker images from Oracle and build the Oracle Database image. The script takes one parameter, the environment filename (mysettings.env).


Step 5 is to run the final script to create and run the container, where the container name is of your choice e.g. das.


When the script is ready or when I start my previous container again I can login to the APEX internal workspace http://localhost:50080/ 

the initital password for the ADMIN user can be retrieved from mysettings.env





After login ypu are able to create other workspaces in APEX or applications if you like.

That is pretty easy to use and play with APEX in Docker.

Cheers
Holger

Freitag, 23. November 2018

DOAG 2018 Konferenz in Nürnberg - ein paar Erkenntnisse von mir

Schon ist die DOAG 2018 Konferenz in Nürnberg wieder vorbei - 3 Tage voller Trubel und geballten Informationen rund um den großen roten Oracle-Riesen in Germany. Im Vorfeld hatte ich schon die für mich interessanten Vorträge, Themen und mögliche Gesprächspartner herausgefiltert. Meine 3 Top-Themen waren: Oracle Forms, Weblogic Server und DevOps.

Man merkt immer mehr, wie das Thema DevOps endlich bei Oracle ankommt. Gibt es doch schon die Datenbank im Docker Container, den Weblogic Server ebenfalls. Oracle Forms kann darin laufen und auch der Weblogic Server ist für Kubernetes zertifiziert.

Wie die letzten Jahre schon üblich, fand am Dienstag Abend wieder das Forms Community Meeting statt. Da wurde der Product Manager Michael Ferrante wieder zu Themen rund um Forms und Reports befragt.

Quelle: von Auraplayer
Die Erkenntnisse davon, aus den Vorträgen und persönlichen Gesprächen mit dem Product Manager reihe ich nun mal in Kurzform auf. Der Rest ist auf den offiziellen Folien zu finden. Alles was im Folgenden kommt, ist noch nicht offiziell (vergleiche Safe Harbor Statement von Oracle) und muss so nicht unbedingt eintreten.

  • Es ist möglich, dass es ein Reports 19 Release geben wird
  • Forms 19 ist ein Patch Release (also eigentlich ein 12.2.1.4.0) und kommt im Kalenderjahr 2019
  • Der Forms Standalone Launcher (FSAL) bekommt einige Neuerungen und Verbesserungen, unter anderem den Single Sign-On Support
  • Forms 20 wird wohl auch ein Patch Release
  • Forms wird wohl noch weit über 2030 hinaus leben, vergleiche Lebenszyklus der Oracle E-Business Suite
  • ein signifikantes neues Feature ist der Support von Forms im Developer Cloud Service
  • Forms 19+ soll Java 11 LTS unterstützen
Quelle: Oracle 
Quelle: Oracle

Weitere interessante Themen auf der DOAG waren:

  • Revival von utPLSQL mit 2 tollen Vorträgen
  • DevOps Vorträge rund um verschiedene Oracle Komponenten
  • APEX Neuerungen in 18.1 und forward
  • verschiedene Cloud Themen
  • und und und
Am Ende gingen die 3 Tage in Nürnberg wieder viel zu schnell vorbei. Das ist ja irgendwie immer so. Neben viel Austausch gab es einen Haufen an Informationen zu aktuellen Themen und Trends. Was nicht wirklich gut für Oracle ankam, waren die Ergebnisse einer Support Umfrage der DOAG zur Zufriedenheit mit dem Oracle-Support (siehe Link ). Tendenz: weiter sinkende Zufriedenheit, das sollte der Hersteller wirklich ernst nehmen.
Nun bleibt mir nur noch zu sagen: bis zur #DOAG2019 und früher.

Viele Grüße
Holger

Freitag, 11. Mai 2018

Forms 12c, Reports und Weblogic in Docker - diesmal mit Windows 10

Heute möchte ich meine Reihe mit der Oracle Middleware und Docker fortsetzen. Doch diesmal wähle ich Windows 10 Professional als Host aus, denn dafür ist Docker mittlerweile auch verfügbar.

Wichtig ist, nach der Installation von Docker im Menü auf die Linux Container zu wechseln, statt mit den Windows Containern zu arbeiten.


Wenn das kleine Walfisch-Icon (Docker) dann weiß ist und sich nicht mehr bewegt, ist Docker erfolgreich gestartet.





Zusätzlich kann man auch in der DOS-Box fragen, ob der Befehl docker nun verfügbar ist.


Am Anfang des Probierens habe ich mich gefragt, wie komme ich denn nun beim Weblogic Docker Images gebaut, welches normalerweise mit

sh buildDockerImage.sh -v 12.2.1.3 gestartet wird. Klassische Linux Befehle in einer Windows DOS-Box wie soll das gehen? Im Endeffekt gar nicht, denn ich habe die Docker Images von Linux exportiert und dann im Anschluß in Windows importiert. Das geht so:

## auf Linux:
docker save  -o /mnt/hgfs/D/formsreports12.2.1.3.tar localhost/oracle/myformsreports:12.2.1.3

## auf Windows:
docker load --input D:/formsreports12.2.1.3.tar
und ein docker images zeigt sie dann auch erfolgreich an.


Die nächste Transformation fand in den Environment-Variablen statt:
## auf Linux:
  export DC_ORCL_PORT=1521
  export DC_ORCL_OEM_PORT=5500
  export DC_ORCL_SID=frdb
  export DC_ORCL_PDB=frpdb
  export DC_ORCL_SYSPWD=Oracle12c
  export DC_ORCL_HOST=${DC_HOSTNAME}

## auf Windows:
 SET DC_DESIRED_HOSTNAME=myformsserver
 SET DC_ORCL_PORT=1521
 SET DC_ORCL_OEM_PORT=5500
 SET DC_ORCL_APEX_PORT=8080
 SET DC_ORCL_SID=ORCLCDB
 SET DC_ORCL_PDB=ORCLPDB1
 SET DC_ORCL_SYSPWD=oracle
 SET DC_ORCL_HOST=%DC_DESIRED_HOSTNAME%

zusätzlich habe ich mir einen festen Hostnamen ausgedacht, der auch in den Properties konfiguriert ist. In dem Zusammenhang sei gesagt, dass das Mounten von Volumes auf Windows mit dem späteren Docker Container nicht funktioniert hat, was sicherlich an irgendwelchen Rechten liegt. So werden also im Gegensatz zum Linux Host die späteren Domain-Informationen alle innerhalb des Docker Containers gespeichert. Dies ist natürlich vom Zugriff her nicht so komfortabel wie auf dem Linux Host, wo er Volume-Mount keine Probleme gemacht hat.

Im File für docker-compose habe ich auch einige Anpassungen vorgenommen, dort wird z.B. auch direkt der Hostname des neuen Containers auf den gewählten aus dem Properties-File gesetzt und ich habe noch einige weitere Environment-Variablen erzeugt, die später den Umgang mit der Domäne etwas vereinfachen.

Hier der Inhalt meines docker-compose Files:
version: "3.0"

services:
  #
  #  The Oracle DB Definition
  #
  frdb:
    image: oracle/database:12.1.0.2-ee
    network_mode: "bridge"
    ports:
      - "${DC_ORCL_PORT}:1521"
      - "${DC_ORCL_OEM_PORT}:5500"
      - "${DC_ORCL_APEX_PORT}:8080"
    environment:
      - ORACLE_SID=${DC_ORCL_SID}
      - ORACLE_PDB=${DC_ORCL_PDB}
      - ORACLE_PWD=${DC_ORCL_SYSPWD}
    container_name: frdb

  #
  #   The Forms & Reports Servers
  #   
  myfrfmw:
    image: ${DC_REGISTRY_FR}/oracle/${DC_FR_PREFIX}formsreports:${DC_FR_VERSION}
    hostname: ${DC_DESIRED_HOSTNAME}
    network_mode: "bridge"
    container_name: myfrfmw
    command: /bin/bash -c "sleep 5s; /opt/oracle/dockertools/crDomain.sh"
    ports:
      - "${DC_ADMINPORT}:${DC_ADMINPORT}"
      - "${DC_FORMS12C_MS_PORT}:${DC_FORMS12C_MS_PORT}"
      - "${DC_REPORTS12C_MS_PORT}:${DC_REPORTS12C_MS_PORT}"
      - "${DC_OHS_LISTENPORT}:${DC_OHS_LISTENPORT}"
      - "${DC_NM_PORT}:${DC_NM_PORT}"
    environment:
      - SCRIPT_HOME=${DC_SCRIPT_HOME}
      - INT_ORACLE_HOME=${DC_INT_ORACLE_HOME}
      - WL_HOME=${DC_WL_HOME}
      - WLST_HOME=${DC_WLST_HOME}
      - MW=${DC_MW}
      - DOMAIN_BASE=${DC_DOMAIN_BASE}
      - APPLICATION_BASE=${DC_APPLICATION_BASE}
      - APP_VZ=${DC_APP_VZ}
      - FORMS12C=${DC_FORMS12C}
      - FADS12C=${DC_FADS12C}
      - REPORTS12C=${DC_REPORTS12C}
      - WEBTIER12C=${DC_WEBTIER12C}
      - OHS_COMPONENTNAME=${DC_OHS_COMPONENTNAME}
      - OHS_LISTENPORT=${DC_OHS_LISTENPORT}
      - OHS_SSLPORT=${DC_OHS_SSLPORT}
      - TEMPLATE=${DC_TEMPLATE}
      - DOMAIN_NAME=${DC_DOMAIN_NAME}
      - AS_NAME=${DC_AS_NAME}
      - ADM_USER=${DC_ADM_USER}
      - ADM_PWD=${DC_ADM_PWD}
      - ADMINPORT=${DC_ADMINPORT}
      - ADMINPORTSSL=${DC_ADMINPORTSSL}
      - AS_HOST=${DC_AS_HOST}
      - FORMS_MS_NAME=${DC_FORMS_MS_NAME}
      - FORMS12C_MS_PORT=${DC_FORMS12C_MS_PORT}
      - REPORTS_MS_NAME=${DC_REPORTS_MS_NAME}
      - REPORTS12C_MS_PORT=${DC_REPORTS12C_MS_PORT}
      - REPORTS_IN_FORMS=${DC_REPORTS_IN_FORMS}
      - REP_SERVER=${DC_REP_SERVER}
      - REP_SERVER_NAME=${DC_REP_SERVER_NAME}
      - REP_TOOLS_NAME=${DC_REP_TOOLS_NAME}     
      - NM_LISTENADDRESS=${DC_NM_LISTENADDRESS}
      - NM_TYPE=${DC_NM_TYPE}
      - NM_PORT=${DC_NM_PORT}
      - NM_USERNAME=${DC_NM_USERNAME}
      - NM_PWD=${DC_NM_PWD}
      - DBUSER=${DC_DBUSER}
      - DBPWD=${DC_DBPWD}
      - DBROLE=${DC_DBROLE}
      - COMPONENTPWD=${DC_COMPONENTPWD}
      - SCHEMA_PREFIX=${DC_SCHEMA_PREFIX}
      - DB_HOST=${DC_DB_HOST}
      - DB_PORT=${DC_DB_PORT}
      - DB_SERVICE=${DC_DB_SERVICE}
      - DB_OMF=${DC_DB_OMF}
      - DB_USER_PW=${DC_DB_USER_PW}
      - PWDFILE=${DC_PWDFILE}
      - TNS_ADMIN=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig
      - FORMS_INSTANCE=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig/components/FORMS/instances/forms1/bin  
      - FORMS_WEBCFG=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config
      - DOMAIN_DIR=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}
      - DOMAIN_DIR_BIN=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/bin  
      - NLS_LANG=AMERICAN_AMERICA.AL32UTF8      
      - FORMS_WEBUTIL=${DC_DOMAIN_BASE}/${DC_DOMAIN_NAME}/config/fmwconfig/components/FORMS/instances/forms1/server   

Gestartet wird zunächst wieder einmal die Datenbank-Instanz, die als Repository dienen soll und im Anschluß dann der Weblogic-Server, der zunächst automatisch die Forms/Reports-Domäne erzeugt.

docker-compose -f myfrfmw-docker-compose.yml up -d myfrfmw
docker logs myfrfmw -f

Alles in allem nicht wirklich schwer das Prozedere und mit etwas Transfer-Arbeit verbunden. Natürlich gut und hilfreich, dass Docker den Ex- und Import von Images anbietet; auch plattformübergreifend.

Bis bald
Holger

Dienstag, 1. Mai 2018

Form Builder aus Docker auf Windows Host öffnen

Im letzten Post habe ich beschrieben, wie man Forms und Reports per Docker auf einem Linux Host installiert. Dies habe ich mittlerweile auch auf einem Windows Host gemacht, auf dem dann auch Docker installiert ist. Docker läuft momentan nur auf Windows-basierten System mit Windows Server und Windows 10.

Möchte man nun den Form Builder aus diesem Docker Container zum Laufen bringen, ist das nicht ganz so einfach und wird mit einer Fehlermeldung quittiert.


Es ist einfach noch kein X-Window-Server eingerichtet. Dafür habe ich auf dem Windows Host dann den XMing Server installiert, der dafür bestens geeignet ist.

Ebenfalls ist es nötig, dass der X-Server auch benutzt werden darf, sprich das sich Clients auch connecten können. Daher hat mein Windows auf noch eine Cywgin Installation bekommen.

In Cygwin setze ich die DISPLAY Variable wie folgt und gestatte per Xhost den Connect.


Ist dies erledigt, kann es im Docker Container weitergehen. Dort setze ich auch die DISPLAY Variable entsprechend und dann geht der Start des Form Builder auch schon.


Recht einfach, wenn man weiß wie das alles zusammenspielen muß. Anstelle das xhost Befehls kann man das sicher noch optimieren.

Als nächstes folgt hoffentlich bald die Beschreibung der Docker Einrichtung mit Forms/Reports auf Windows.

Bis bald
Holger

Freitag, 8. Dezember 2017

Forms 12c, Reports und Weblogic in Docker - nun wirklich lauffähig

Heute möchte ich beschreiben, wie man Forms 12c, Reports und Weblogic in Docker zum Laufen bringt. Das war schon länger ein Wunsch von mir und Dirk Nachbar (http://dirknachbar.blogspot.de) hat dafür großartige Vorarbeit geleistet, unterstützt von Robert Crames (http://robertcrames.blogspot.ch) und Jan-Peter Timmermann (https://jan-peter.me).

Warum denn Docker wird man sich vielleicht fragen? Die einfache Antwort lautet: weil Docker toll ist und man nicht immer wieder eine neue VM mit Forms aufzusetzen braucht. Außerdem sind automatisierte Builds und das Bereitstellen einer Umgebung ohne viele manuelle Aktivitäten einfach besser.

Mein Setup sieht so aus:
  • Laptop mit Windows 7
  • darauf eine VM mit Ubuntu 17.10
  • und in Ubuntu läuft Docker
Die Ubuntu-Maschine und der WLS-Docker Container teilen sich Verzeichnisse, in denen die erstelle WLS-Domäne liegt. So kann direkt von Ubuntu aus die Domäne verändert und konfiguriert werden. Ein paar weitere Vorarbeiten sind noch zu leisten, wie z.B. User oracle und Gruppe oinstall anzulegen. Auf meinem Ubuntu mußten noch die Versionen von docker und docker-compose upgegradet werden, denn die aktuellen Versionen aus dem Software-Repository waren nicht mehr ganz aktuell.


Die Installationsschritte sind im Prinzip genau wie bei einer Installation von Forms/Weblogic auf einem Host. Man braucht im Einzelnen:
  • eine Datenbank für das Repository (entweder Docker oder Host)
  • einen Weblogic im Docker
  • eine Repository Installation
  • eine Forms/Reports Weblogic Domäne

Hier für dieses Beispiel habe ich alles in 2 Docker-Images installiert und bin der Anleitung von Dirk aus seinem Github gefolgt.

1. Aufbau des Datenbank Images (gefordert wird eine Standard oder eine Enterprise Installation für das Repository)
Hierfür habe ich einen Git Clone des offiziellen Oracle Docker Githubs gemacht und mittels ./buildDockerImage.sh -v 12.2.0.1 -e ein Image der Enterprise Edition gebaut.


Nach dem erfolgreichen Erstellen wird dieses Image z.B. hiermit gestartet:
docker run --name oracle12-ee -p 1521:1521 -p 5500:5500 -p 8080:8080 -e ORACLE_PWD=neuesPasswort -v /opt/oracle/oradata:/u01/app/oracle/oradata oracle/database:12.2.0.1-ee

2. Aufbau des Weblogic Images
Dieser Teil beginnt mit dem Git Clone von Dirks Github Repository und hat mehrere Schritte.
Zuerst erfolgt der Build des OracleLinux:latest mit dem Oracle JDK 8u151. Dafür muss man das JDK 8u151 tar.gz in den Ordner OracleJava/java-8 legen und ein
./buildDockerImage.sh machen.

Danach gibt es ein oracle/serverjdk Image. Anschauen kann man sich die vorhandenen Images mit dem Command: docker images


Nun wechselt man ins Verzeichnis OracleFMWInfrastructure/dockerfiles und erstellt ein Weblogic Abbild. Dafür muss man vorher noch bei Oracle die entsprechende Weblogic-Zip-Datei fmw_12.2.1.3.0_infrastructure_Disk1_1of1.zip herunterladen und in OracleFMWInfrastructure/dockerfiles/12.2.1.3 ablegen.
Mit ./buildDockerImage.sh -v 12.2.1.3 wird der Build gestartet und am Ende kommt ein Oracle WebLogic Server Infrastructure 12.2.1.3.0 heraus.


Letzter Abschnitt ist das Erweitern des WLS-Infrastructure Images mit den Forms und Reports Sourcen (Wechsel ins Verzeichnis OracleFormsReports/dockerfiles und Ablage der Installations-Dateien fmw_12.2.1.3.0_fr_linux64.bin und fmw_12.2.1.3.0_fr_linux64-2.zip im Unterordner OracleFormsReports/dockerfiles/12.2.1.3. Mit ./buildDockerImage.sh -v 12.2.1.3 wird der Image-Build gestartet.


Am Ende hat man dann ein Image localhost/oracle/formsreports TAG: 12.2.1.3

3. Jetzt geht es ans Konfigurieren der Domain. Dafür hat Dirk im Verzeichnis OracleFormsReports/samples eine Konfigurationsdatei setenv.sh vorbereitet, die die nötigen Umgebungsvariablen setzt (hier ein Auszug).

Diese Datei muss entsprechend angepasst werden; sehr wichtig sind die Eintragungen im #Repository Connect für den Connect des RCU gegen diese Datenbank. Da bin ich zuerst in eine Falle gelaufen und habe für DC_DB_HOST die falsche IP angegeben, dann hat die Erstellung der Domain nicht funktioniert.
Mit ifconfig auf dem Docker Host gibt es ein Netzwerk namens docker0 und unter der inet stehen sollte eine IP stehen. Diese ist die richtige für den DB Container.

Nun kann mit dem Erzeugen der WLS-Domäne und Start des Admin-Servers begonnen werden (vorher sollte die DB aber gestartet sein). Die Variablen aus setenv.sh werden gemerkt, exportiert und vom docker-compose genutzt.

source ../setenv.sh
docker-compose up -d frfmw; docker logs frfmw -f

Wenn man Ende ein <BEA-000365> <Server state changed to RUNNING.>
steht, ist alles gut verlaufen.

Nun kann im Browser der Enterprise Manager mit der URL http://localhost:7001/em aufgerufen werden.

Hierin können nun die Managed Server MS_FORMS und MS_REPORTS gestartet werden.


Wenn man dann auch noch von der Ubuntu-VM die Ports entsprechend forwarded, kann man im Client im Browser auch die Forms-Testseite aufrufen:
http://localhost:9001/forms/frmservlet


Was kann man noch machen?

Einen zuvor erstellten Reports-Server starten

Da die Konfigurationsdateien der Domain alle in einem Verzeichnis auf dem Docker Host zugänglich sind, kann man sie dort auch bequem bearbeiten und die Änderungen sind persistiert (z.B. default.env, formsweb.cfg, rwserver.conf, httpd.conf und andere).

Man kann auch das neue FADS mit dem Forms 12.2.1.3.0 nutzen, siehe dazu auch ins readme-File von Dirk.

Tja was soll ich sagen, ich bin erstmal sehr begeistert von dieser Variante. Denn nach einem Neustart des Ubuntus kann man die Datenbank und den WLS Admin Server mit 2 einzelnen docker Befehlen wieder starten und die Umgebung ist wieder da. Hier ist es auch von Vorteil, dass die o.g. Herren die ganze Domänen-Erstellung gescriptet haben und man ohne GUI auskommt. Von Oracle gibt es dafür bislang keinen Support, was nicht heißt, dass man es nicht trotzdem machen und versuchen soll.

Viele Grüße
Holger