In this post I am exploring the sense of configuring and running an Oracle SOA Suite 12.2 domain on docker and managed by Kubernetes, to discover if SOA is a good candidate to run on Docker.
The server where I will install it is running Oracle Linux 6.8; unfortunately Kubernetes now is supported on Linux 7, so my next post will handle that subject.
First of all here are my install bits and experiences.
Setting up Docker
Before installing I had to add some YUM repo to get the right docker package:
export DOCKERURL="https://yum.dockerproject.org/repo/main/oraclelinux/6" rm /etc/yum.repos.d/docker*.repo yum-config-manager --add-repo "$DOCKERURL/oraclelinux/docker-ce.repo" yum-config-manager --enable docker-ce-stable-17.05
The installation took place on a Linux VM running Oracle Linux 6.8. I used the YUM repository to install the appropriate version of docker:
I was lucky, it was already at the latest version.
Next, I wanted to pull the containers from the Oracle Container Registry, so I logged in from docker:
docker login container-registry.oracle.com
providing my OPN username and password.
Next, I considered a new place for where the docker containers are stored, because /var/lib/docker is mounted under "/", which is not a good idea to my opinion:
- Backup if current dir
tar -zcC /var/lib docker > /u02/pd0/var_lib_docker-backup-$(date +%s).tar.gz
Move it to a new filesystem with sufficient space
mkdir /u02/pd0/docker mv /var/lib/docker /u02/pd0/docker
- Link it to the original location
ln -s /u02/pd0/docker /var/lib/docker
Quick and a slight dirty, but sufficient
First of all, a bridge network must be created, to enable containers to connect with eachother, like the SOA containers with their dehydration store:
docker network create -d bridge SOANet
Creating database container
Now on https://container-registry.oracle.com/ there are some instructions of how to set up a SOA Docker environment, however these instructions are not totally correct.
Creating a SOA Suite database, the parameters is the db.env.list were not correct
ORACLE_SID=<db sid=""> ORACLE_PDB=<pdb id=""> ORACLE_PWD=<password>
These weren't correct, in this case these properties were ignored and a default dummy name was used like ORCL...etc
The correct string should be DB_ instead of ORACLE_
DB_SID=soadb DB_PDB=soapdb DB_PWD=*******
After that, start the docker database container, and database came up with the right SID and Service Name.
docker start soadb docker ps
- Login with SQL*Plus
- Showed Listener Status
Create AdminServer Container
Before creating the AdminServer I first obtained the the image from the registry:
docker pull container-registry.oracle.com/middleware/soasuite:18.104.22.168
Also inhere, specific parameters had to be set, although I also encountered some flaws in the original instructions:
- Although password was set for the db admin, it didn't pick it up, and had to set it manually in the database " alter user sys...."
- The SID and Service names were not correct, for the PDB I had to configure it including domain name, so this was finally the correct setup:
CONNECTION_STRING=soadb:1521/soapdb.localdomain RCUPREFIX=SOA1 DB_PASSWORD=****** DB_SCHEMA_PASSWORD=***** ADMIN_PASSWORD=****** MANAGED_SERVER=soa_server1 DOMAIN_TYPE=soa
And next run the creation of the domain, and start the AdminServer through WLST
docker run -i -t --name soaadminserver --network=SOANet -p 7001:7001 -v /u02/scratch/DockerVolume/SOAVolume/SOA:/u01/oracle/domains --env-file ./adminserver.env.list oracle/soa:22.214.171.124
When this was finished, I could login to the WebLogic console. The listenadress of the AdminServer was empty so I guess the updListenAdress.py did not do it's work, so I changed it manually
Starting the managed server
The image configures already a managed server in the domain, so next is to spin up a container for the SOA managed server:
docker run -i -t --name soa_server1 --network=SOANet -p 8001:8001 --volumes-from soaadminserver --env-file ./soaserver.env.list oracle/soa:126.96.36.199 "/u01/oracle/dockertools/startMS.sh"
The SOA Managed server came up after a while, though, status in the console was SHUTDOWN, because the startscript did not use the nodemanager. Checking the log I could follow the startup sequence.
docker exec -it soaadminserver bash -c "tail -f /u01/oracle/user_projects/domains/InfraDomain/logs/ms.log"
After that, I logged in into the container and started the nodemanager using the startNodemanager,.sh, to be able to start managed servers through the console and get health info.
Just some thoughts and doubts that came up in me; but please correct me if I'm wrong.
Now the million dollar question would be: Is SOA Suite fit for a container platform? It does run, although I haven't tested it yet. In the end to set it up is rather simple.
Apart from some flaws during setup, you might ask yourselve : what are we doing different inhere, instead of spinning up servers and/or VMS
Well 1st, all docker containers run on a server, but we skipped the entire server configuration and based on a pre-baked image we could bring rather quick an environment
But looking from an application perspective, we still not doing anything containerized. Even in a docker container monoliths can exist.
So, the complete story is that at platform level we have containers, at application level, not yet.