Last week I posted about having OBIEE running in Docker. It works fine and easy to do but the database wasn’t included, so it was up to you to provide one (could be one already running somewhere on your LAN, a new VM or also a docker container as well). Not a real problem in the end as we are used to have to setup one when doing an OBIEE install, but still not the great automation we can get when user Docker.
Well, guess what? Here is the solution !
Docker Compose
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services. Then, using a single command, you create and start all the services from your configuration.
Docker Compose documentation
Thanks to Docker Compose it’s possible to define the “OBIEE application” as being a two container setup: one for the database, one for the OBIEE. Compose will take care of the dependencies (most of them at least), so when starting OBIEE it will start the database container first and when it’s running it will then start the OBIEE container.
Let’s see directly how it works…
First you need to make sure you have Docker and Docker Compose, actually Compose is just a file to download and make it executable (the documentation cover all the steps).
Download the required files
You can find the OBIEE Docker Compose files on my GitHub: https://github.com/gianniceresa/docker-images/tree/master/Compose%20OBIEE-DB
Like with the OBIEE docker image it’s up to you to download the Oracle Database binaries (12.1.0.2) and OBIEE binaries (12.2.1.0.0 or 12.2.1.1.0 + Oracle JDK) and to accept and review the various licensing agreements when doing the download. When done you simply copy the binaries into the folders of the components versions.
Deploy the full OBIEE setup in 1 command
When you have all the files in place it’s time the magic happen …
1 2 3 |
[root@oel7docker Compose_OBIEE-DB]# docker-compose up -d obiee_12.2.1.1.0 |
Get a coffee and look all the hard work Docker Compose is doing…
Actually you don’t see a lot because of the ” -d ” flag running the container in the background.
The first time you run this command Docker Compose try to find the docker images in your system, if you never run it before there is no such images available and so the system build them automatically. That’s the output you are going to see.
This part is going to take some time, around 10 minutes for the database and 15 for OBIEE, but it’s done only once (you can force it if you change something in the Dockerfile building the images with the ” –build ” parameter).
Once the building process is over Docker Compose is going to actually start your containers.
Container’s logs
At this point you don’t see anything anymore: how to know what’s going on?
1 2 3 4 5 |
[root@oel7docker Compose_OBIEE-DB]# docker-compose logs -f obiee_12.2.1.1.0 [root@oel7docker Compose_OBIEE-DB]# docker-compose logs -f oracledb |
Using this two commands in different windows / sessions tell you what the containers are doing.
Wait a second? What’s that message with a “ORA-12514, TNS:listener does not currently know of service request in connect descriptor” error in the OBIEE container?
This isn’t really part of OBIEE, it’s a little java code performing a check if it can connect to the database or not.
An Oracle Database doesn’t start in 1 second, mainly at the first execution of the container when the database is created. In the meantime OBIEE must wait or it will fail with an error, so there is a script in the container performing exactly that. It try to connect to the database (using the JDBC driver provided by OBIEE), if connection fails it waits 5 seconds and try again (infinite loop), if the connection is successful it execute the normal script managing OBIEE.
Docker Compose did his job, now it’s up to you to enjoy your fully configured and working OBIEE environment!
Stop the running containers
To stop the containers again is a unique command, Docker Compose will take care of everything else.
1 2 3 |
[root@oel7docker Compose_OBIEE-DB]# docker-compose stop -t 120 |
The ” -t 120 ” parameter is to give OBIEE and the database the time to perform a clean shutdown, by default Docker Compose gives them 10 seconds before to fill the containers, it’s a bit optimistic for this kind of tools, so let’s do things in a clean way.
Start the containers again
Next time you want to start these containers again just use the same command you used at the beginning:
1 2 3 |
[root@oel7docker Compose_OBIEE-DB]# docker-compose up -d obiee_12.2.1.1.0 |
The “up” command in Docker Compose actually check if containers exists: if they are there it starts the container obiee_12.2.1.1.0 and the dependencies (the oracledb container). If the containers doesn’t exist it create them, if the images for the containers don’t exist it builds them first.
As you see it takes 1 single command to have a fully working OBIEE setup!
You can find all the code needed on https://github.com/gianniceresa/docker-images/tree/master/Compose%20OBIEE-DB , the binaries you must download them from Oracle directly accepting the various licensing agreements.