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 Container, 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
- Open a Terminal window.
- Type "docker"
- If Docker is already installed, a help page with common Docker options and commands will show up.
- 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.
- Create a folder, e.g. in your "Documents"-folder.
- Move to that folder
- Create another folder "odysseus" in that 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
- Now we need the version from Odysseus that we want to run. We can use the Odysseus Server Version as an example.
- Download Odysseus Server for Linux here (we use the 64-bit version): http://odysseus.informatik.uni-oldenburg.de/index.php?id=76
- Unzip the content of your download to the odysseus-folder within our "odysseusdocker"-folder
- Create a new file in the "odysseusdocker"-folder with the name "startup.sh" and the content in the box below (e.g. with nano or some other text editor)
- Change the permission of the file to be executable: "chmod 744 startup.sh"
- With "ls -l" you can see if the file is executable
#!/bin/sh cd home cd odysseus echo "Starting Odysseus ..." ./odysseus
- Now we want to create the Dockerfile which describes our Docker container
- Create a new file called "Dockerfile" within our "odysseusdocker"-folder (e.g. with nano again or whatever you prefer)
- Put the content from the box below into the Dockerfile
# 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
- In your Terminal window, navigate to the "odysseusdocker"-folder
- Type "sudo docker build ." (The " ." refers to the folder we are in. The command assumes a file named "Dockerfile" in that folder.)
- 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.)
- Now we should see a message that the container was successfully build. We can type "sudo docker images" to see our images.
Successfully built c39f4bd5fd33 tobi@tobi-VirtualBox:~/Documents/odysseusdocker$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> c39f4bd5fd33 2 minutes ago 686.8 MB java 8 c518da75d9f0 6 days ago 642.9 MB
Now we can run the Docker container:
- "sudo docker run -p 127.0.0.1:9700:9669 --name our_odysseus -t c39f4bd5fd33"
tobi@tobi-VirtualBox:~/Documents/odysseusdocker$ sudo docker run -p 127.0.0.1:9700:9669 --name our_odysseus -t c39f4bd5fd33 Starting Odysseus ... Odysseus: Cannot open display: Odysseus: GTK+ Version Check 0 INFO Core - Current size of heap: 1.0 GB - de.uniol.inf.is.odysseus.core.Activator.start(Activator.java:61) 35 INFO Core - Maximum size of heap: 1.0 GB - de.uniol.inf.is.odysseus.core.Activator.start(Activator.java:64) 41 INFO Core - Free memory of the heap: 879.4 MB - de.uniol.inf.is.odysseus.core.Activator.start(Activator.java:67) 52 INFO Core - Running VM with: amd64 - de.uniol.inf.is.odysseus.core.Activator.start(Activator.java:70) 1912 INFO OdysseusConfiguration - Read config file from /root/.odysseus/odysseus.conf - de.uniol.inf.is.odysseus.core.server.OdysseusConfiguration.loadProperties(OdysseusConfiguration.java:86) 4561 WARN LogicalOperatorBuilder - URL for SetTimeProgressMarker not available! - de.uniol.inf.is.odysseus.logicaloperator.LogicalOperatorBuilder.addLogicalOperator(LogicalOperatorBuilder.java:243) 5699 INFO OdysseusServerApplication - Odysseus application is fully started! - de.uniol.inf.is.odysseus.product.server.starter.OdysseusServerApplication.start(OdysseusServerApplication.java:31) osgi> 9005 INFO SingleSchedulerManager - No Scheduler-Config-File found. - de.uniol.inf.is.odysseus.scheduler.manager.singleschedulermanager.SingleSchedulerManager.activate(SingleSchedulerManager.java:113) 9030 INFO SingleSchedulerManager - New Scheduler-Config-File created - de.uniol.inf.is.odysseus.scheduler.manager.singleschedulermanager.SingleSchedulerManager.activate(SingleSchedulerManager.java:126) 9109 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) 13453 INFO WebServicePublisher - Webservice published at http://0:0:0:0:0:0:0:0:9669/odysseus - de.uniol.inf.is.odysseus.planmanagement.executor.webservice.server.WebServicePublisher.publish(WebServicePublisher.java:106)
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.
Push the container to DockerHub
We want to make is easy for others to install Odysseus. Hence, we will push our image to DockerHub.
- Firstly, we need to tag our container: sudo docker tag c39f4bd5fd33 tobi42/odysseus_server:03-16
- Notice, that the name "tobi42" before the slash is your account name on Dockerhub, next is the image name and after the : you have the version label or tag
- Next, we login to DockerHub: sudo docker login
- Now push it to DockerHub: sudo docker push tobi42/odysseus_server:03-16
- Take a look on your DockerHub account. You should be able to see your container.
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)
- Delete all images:
sudo docker rmi $(sudo docker images -q)