# Docker as a local cloud provider jclouds-docker is a local cloud provider modelled on [docker](http://www.docker.io). Similar to other jclouds supported providers, it supports the same portable abstractions offered by jclouds. ## Setup Please follow these steps to configure your workstation for jclouds-docker: - install the latest Docker release (please visit https://docs.docker.com/installation/) - [enable remote access](https://docs.docker.com/engine/quickstart/#bind-docker-to-another-host-port-or-a-unix-socket) to Docker ### Sample configuration for Linux systems using systemd Run following commands on a machine where is the Docker Engine installed. It enables remote access (plain TCP - only for loopback address 127.0.0.1) on standard port `2375`. ```bash # switch to root account sudo su - # create override for docker start-script mkdir /etc/systemd/system/docker.service.d cat << EOT > /etc/systemd/system/docker.service.d/allow-tcp.conf [Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// -H tcp:// EOT # reload configuration and restart docker daemon systemctl daemon-reload systemctl restart docker # close the 'root' session exit ``` If the `-H fd://` Docker daemon parameter doesn't work on your Linux (e.g. Fedora), then replace it by `-H unix:///var/run/docker.sock` Find more details in [Control and configure Docker with systemd](https://docs.docker.com/engine/admin/systemd/) guide. ### Running live tests The `DOCKER_HOST` environment variable has to be configured as it's used as a value for `test.docker.endpoint` system property. ``` export DOCKER_HOST="http://localhost:2375/" mvn -Plive integration-test ``` Notice, if you are using [Docker for Mac](https://docs.docker.com/engine/installation/mac/), Docker Remote API may not be available over HTTP. In the [Known issue]{https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues) Docker team recommend to use [socat](http://www.dest-unreach.org/socat/) to expose `docker.sock` over tcp. You may find useful the following simple commands: ``` docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:1234:1234 bobrik/socat TCP-LISTEN:1234,fork UNIX-CONNECT:/var/run/docker.sock ``` and then ``` export DOCKER_HOST=http://localhost:1234 mvn -Plive integration-test ``` # How it works --------------- ------------- | Image(s) | | Node(s) | --------------- ------------- --------- docker remote api ---------------------------------------- | jclouds | ---------------------------> | DOCKER_HOST | --------- ---------------------------------------- ## Components - jclouds \- acts as a java client to access to docker features - DOCKER_HOST \- hosts Docker API, NB: jclouds-docker assumes that the latest Docker is installed - Image \- it is a docker image that can be started. - Node \- is a docker container ## Assumptions - jclouds-docker assumes that the images specified using the template are ssh'able. -------------- # Notes: - report any issues you find at [jclouds issues](https://issues.apache.org/jira/browse/JCLOUDS) - jclouds-docker has been tested on Mac OSX and Linux. However, it has never been tried on Windows. -------------- # Troubleshooting As jclouds docker support is quite new, issues may occasionally arise. You can try to remove all containers to get things going again: ```bash docker rm -f `docker ps -aq` ```