Thanks to Andrea Junior Berselli who started to work on this topic during his University degree at the University of Bologna, we can now say that a first component able to integrate Docker with Jolie exists! Its name is Jocker [github project]!
How does Jocker work?
Jocker is a jolie microservice which is able to call the REST API of Docker (we implemented only a subset so far) and it offers them as simple jolie operations thus avoiding to deal with all the details related to rest json calls. Here you can see the jolie interface of Jocker. The architecture is very simple:
Jocker must be executed in the same machine where docker server is running. It is communicating by exploiting localsocket //var/run/docker.sock and it will supply jolie operations in the default location localhost:8008 with protocol sodep.
Jocker container
The easy way for running jocker is to pulling down its container and then starting it. The Jocker image is available at jolielang section on Docker Hub and it can easily pulled down by using the followingcommand:
docker pull jolielang/jocker
When pulled down run the following command for executing it:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 8008:8008 jolielang/jocker
Jocker from sources
If you want to run Jocker from sources, you need some extra steps before continuining:
- you need to install Jolie in your machine
- you need to install libmatthew Java libraries in order to enable localsockets.
jolie dockerAPI.ol
Jocker listening location can be changed by editing file config.ini.
Jocker Clients
It is very easy to interact with Jocker, just create the following outputPort in your Jolie microservice and use it as usual:
outputPort DockerIn {
Location: "socket://localhost:8008"
Protocol: sodep
Interfaces: InterfaceAPI
}
where InterfaceAPI can be downloaded from here. As an example you can request for the list of all the containers with the following client:
include "console.iol"
include "string_utils.iol"
include "InterfaceAPI.iol"
outputPort DockerIn {
Location: "socket://localhost:8008"
Protocol: sodep
Interfaces: InterfaceAPI
}
main {
rq.all = true;
containers@DockerIn( rq )( response );
valueToPrettyString@StringUtils( response )( s );
println@Console( s )()
}
In the github repository of the project there are some sample clients you can use for testing Jocker.
Enjoy Jocker and, please, let us know comments and suggestions for improving it.