Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In this guide we will show you how to create a Docker container for Odysseus. Such a container can help you to run and share Odysseus more easily. If you want to use our predefined Odysseus Server Docker ContainerImage, see Run with Docker.

Step-by-step guide

We assume that you have a Linux system up and running, e.g. Ubuntu. If you want to try it out without changing your system or if you don't have a Linux machine, we recommend VirtualBox.

Installing Docker

  1. Open a Terminal window.
  2.  Type "docker"
  3. If Docker is already installed, a help page with common Docker options and commands will show up.
  4. If not, your Terminal will probably give you a hint how to install Docker. Under Ubuntu, it is "sudo apt-get install docker.io"

Preparing the Folder

Now we need a folder where we can put everything that we need in.

...

Code Block
languagebash
titleCreating the magic folder
tobi@tobi-VirtualBox:~$ ls
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos
tobi@tobi-VirtualBox:~$ cd Documents/
tobi@tobi-VirtualBox:~/Documents$ ls
tobi@tobi-VirtualBox:~/Documents$ mkdir odysseusdocker
tobi@tobi-VirtualBox:~/Documents$ ls
odysseusdocker
tobi@tobi-VirtualBox:~/Documents$ cd odysseusdocker/
tobi@tobi-VirtualBox:~/Documents/odysseusdocker$ mkdir odysseus

 

...

Create a docker image

Currently, we provide docker only for linux X86_64 based systems. The images can be used for Linux and Windows (we did not make any tests with MacOS)

If you want to create you own docker image, you can use the following dockerfile as a starting point:

https://git.swl

...

.informatik.uni-oldenburg.de

...

/projects/ODYJENK/repos/odysseus_all_new/browse/Dockerfile

Please have a look at the official docker documentation for further information about docker.

Szenario: Local Update site and other features should be installed into a docker image

Here:

  • The base odysseus images is used as base image
  • An own update site (e.g. created with maven) is copied to the image
  • The database feature is installed from the stable update site
  • From the own file based update site the sample feature is installed
Code Block
FROM odysseusol/odysseus
ADD ./de.uniol.inf.is.odysseus.sample.feature.update /de.uniol.inf.is.odysseus.sample.feature.update
RUN /usr/lib/odysseus/odysseus -application org.eclipse.equinox.p2.director -repository https://odysseus.informatik.uni-oldenburg.de/updatesite/odysseus_all_new/stable/origin/master/latest/ -installIU

 

Code Block
languagebash
titlestartup.sh
#!/bin/sh
cd home
cd odysseus
echo "Starting Odysseus ..."
./odysseus

 

  1. Now we want to create the Dockerfile which describes our Docker container
  2. Create a new file called "Dockerfile" within our "odysseusdocker"-folder (e.g. with nano again or whatever you prefer)
  3. Put the content from the box below into the Dockerfile
Code Block
languagebash
titleDockerfile
# We will use the official OpenJDK Java 8 as our platform
FROM java:8
 
# Start Odysseus on startup of the container
ADD startup.sh /home/startup.sh
ADD odysseus /home/odysseus
CMD ./home/startup.sh
 
# We need a port to be exposed
EXPOSE 9669

 

Now we have everything prepared in that folder.

Build and run the Docker container

  1. In your Terminal window, navigate to the "odysseusdocker"-folder
  2. Type "sudo docker build ." (The " ." refers to the folder we are in. The command assumes a file named "Dockerfile" in that folder.)
  3. Wait (it will take some time to get the basis for our container: Linux and OpenJDK Java 8. But next time you do it it's much faster.)
  4. Now we should see a message that the container was successfully build. We can type "sudo docker images" to see our images.
Code Block
languagebash
titleOur Docker images
Successfully built 6eb71347fa51
tobi@tobi-VirtualBox:~/Documents/odysseusdocker$ sudo docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
java                             8                   c518da75d9f0        6 days ago          642.9 MB
<none>                           <none>              6eb71347fa51        6 days ago          686.8 MB
tobi@tobi-VirtualBox:~/Documents/odysseusdocker$ 

Now we can run the Docker container:

  1. "sudo docker run -p 127.0.0.1:9700:9669 --name our_odysseus -t 6eb71347fa51"
Code Block
languagebash
titleStarting the container
tobi@tobi-VirtualBox:~/Documents/odysseusdocker$ sudo docker run -p 127.0.0.1:9700:9669 --name our_odysseus_open -t 6eb71347fa51
Starting Odysseus ...
Odysseus: Cannot open display: 
Odysseus:
GTK+ Version Check
0    INFO  OdysseusConfiguration  - Read config file from /root/.odysseus/odysseus.conf - de.uniol.inf.is.odysseus.core.server.OdysseusConfiguration.loadProperties(OdysseusConfiguration.java:86) 
2472 INFO  Core  - Current size of heap:     1.0 GB - de.uniol.inf.is.odysseus.core.Activator.start(Activator.java:61) 
2477 INFO  Core  - Maximum size of heap:     1.0 GB - de.uniol.inf.is.odysseus.coredatabase.Activatorfeature.start(Activator.java:64) 
2479 INFO  Core  - Free memory of the heap:     801.1 MB - de.uniol.inf.is.odysseus.core.Activator.start(Activator.java:67) 
2480 INFO  Core  - Running VM with:     amd64 - feature.group -destination /usr/lib/odysseus -profile DefaultProfile;
RUN /usr/lib/odysseus/odysseus -application org.eclipse.equinox.p2.director -repository file:///de.uniol.inf.is.odysseus.coresample.Activator.start(Activator.java:70) 
osgi> 6099 WARN  LogicalOperatorBuilder  - URL for SetTimeProgressMarker not available! -feature.update -installIU de.uniol.inf.is.odysseus.logicaloperatorsample.LogicalOperatorBuilderfeature.addLogicalOperator(LogicalOperatorBuilder.java:243) 
8664 INFO  SingleSchedulerManager feature.group - No Scheduler-Config-File found. - de.uniol.inf.is.odysseus.scheduler.manager.singleschedulermanager.SingleSchedulerManager.activate(SingleSchedulerManager.java:113) 
8669 INFO  SingleSchedulerManager  - New Scheduler-Config-File created - de.uniol.inf.is.odysseus.scheduler.manager.singleschedulermanager.SingleSchedulerManager.activate(SingleSchedulerManager.java:126) 
8718 INFO  SingleSchedulerManager  - Active scheduler. class de.uniol.inf.is.odysseus.scheduler.singlethreadscheduler.SimpleThreadSchedulerMSLimitSourcesPerThread - de.uniol.inf.is.odysseus.scheduler.manager.singleschedulermanager.SingleSchedulerManager.activate(SingleSchedulerManager.java:137) 
9087 INFO  OdysseusServerApplication  - Odysseus application is fully started! - destination /usr/lib/odysseus -profile DefaultProfile;
EXPOSE 8888
CMD ["/usr/lib/odysseus/odysseus","-console -debug -data @noDefault"]

Hint: To get the names of the installable units 

  • look at the update-site folders in the features folder
  • take the full name of the feature.jar until the "_", e.g. : de.uniol.inf.is.odysseus.

...

  • database.

...

  • feature_1.

...

  • 0.

...

  • 0.

...

  • 202111142343.jar  → de.uniol.inf.is.odysseus.

...

  • database.feature
  • append .feature.group

As you can see above, Odysseus started. We also exposed one port the the outside: port 9669 is forwarded to port 9700, wherefore we should be able to see the WebService in our host machine. Just open http://localhost:9700/odysseus?wsdl in a browser on your host machine.You should be able to see an XML-file describing the Odysseus WebService.

Some Docker management

  • See all your running containers: "sudo docker ps"
  • See all your started containers (including non-running containers): "sudo docker ps -a"
  • Stop all running containers: "sudo docker stop $(sudo docker ps -a -q)
  • Delete all started containers: "sudo docker rm $(sudo docker ps -a -q)

...