{"id":18438432,"url":"https://github.com/roboconf/roboconf-dockerfile","last_synced_at":"2026-05-05T20:41:53.993Z","repository":{"id":77568240,"uuid":"45626637","full_name":"roboconf/roboconf-dockerfile","owner":"roboconf","description":"A Dockerfile for Roboconf agents and DM","archived":false,"fork":false,"pushed_at":"2022-05-05T13:35:17.000Z","size":36,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-14T13:16:46.813Z","etag":null,"topics":["delivery","docker","docker-image","installer","roboconf","system"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roboconf.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-05T17:12:03.000Z","updated_at":"2022-05-05T13:35:21.000Z","dependencies_parsed_at":"2023-03-11T11:00:33.703Z","dependency_job_id":null,"html_url":"https://github.com/roboconf/roboconf-dockerfile","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roboconf%2Froboconf-dockerfile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roboconf%2Froboconf-dockerfile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roboconf%2Froboconf-dockerfile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roboconf%2Froboconf-dockerfile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roboconf","download_url":"https://codeload.github.com/roboconf/roboconf-dockerfile/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248886343,"owners_count":21177645,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["delivery","docker","docker-image","installer","roboconf","system"],"created_at":"2024-11-06T06:19:49.796Z","updated_at":"2026-05-05T20:41:48.949Z","avatar_url":"https://github.com/roboconf.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Roboconf Dockerfile\n[![Build Status](http://travis-ci.org/roboconf/roboconf-dockerfile.png?branch=master)](http://travis-ci.org/roboconf/roboconf-dockerfile/builds)\n[![License](https://img.shields.io/hexpm/l/plug.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n[![Join us on Gitter.im](https://img.shields.io/badge/gitter-join%20chat-brightgreen.svg)](https://gitter.im/roboconf/roboconf)\n[![Web site](https://img.shields.io/badge/website-roboconf.github.io-b23e4b.svg)](https://roboconf.github.io)\n\n\n\u003cimg src=\"https://roboconf.github.io/resources/img/nn-0.7-docker-images-for-roboconf.jpg\" alt=\"Roboconf Dockerfile\" width=\"400\" /\u003e\n\n\nWhat is Roboconf?\n=================\n\nRoboconf is both a platform and framework to manage elastic applications in the cloud.  \nElastic applications designate those whose deployment topology may vary over time (e.g. scaling up or down).\nRoboconf manages deployments, probes, automatic reactions and reconfigurations. Beyond applications, Roboconf could also be defined as a « PaaS framework »: a solution to build PaaS (Platform as a Service). Most PaaS, such as Cloud Foundry or Openshift, target developers and support application patterns. However, some applications require more flexible architectures or design. Roboconf addresses such cases.\n\nWith Roboconf, there is no constraint about the programming language, the kind of application or the operating system. You define what you put in your platform, you specify all the interactions, administration procedures and so on.\n\nRoboconf handles application life cycle: hot reconfiguration (e.g. for elasticity issues) and consistency \n(e.g. maintaining a consistent state when a component starts or stops, even accidentally). This relies on a messaging queue \n(currently [Rabbit MQ](https://www.rabbitmq.com)). Application parts know what they expose to and what they depend on from other parts.\nThe global idea is to apply to applications the concepts used in component technologies like OSGi. Roboconf achieves this in a non-intrusive\nway, so that it can work with legacy Software.\n\n\u003cimg src=\"https://roboconf.github.io/resources/img/roboconf-workflow.png\" alt=\"Roboconf's workflow\" style=\"max-width: 400px;\" /\u003e\n\nApplication parts use the message queue to communicate and take the appropriate actions depending on what is deployed or started.\nThese *appropriate* actions are executed by plug-ins (such as bash or [Puppet](http://puppetlabs.com)). \n\n\u003cimg src=\"https://roboconf.github.io/resources/img/roboconf-architecture-example.jpg\" alt=\"Roboconf's architecture\" style=\"max-width: 400px;\" /\u003e\n\nRoboconf is distributed technology, based on AMQP \nand REST / JSon. It is IaaS-agnostic, and supports many well-known IaaS (including OpenStack, Amazon Web Services, Microsoft Azure, VMWare, \nas well as a \"local\" deployment plug-in for on-premise hosts). Please, [refer to the FAQ](https://roboconf.github.io/en/user-guide/faq.html) for more details.\n\n\nHow to use this image for the DM?\n=================================\n\nRoboconf involves a messaging solution.  \nFor new beginners, the most simple solution is to rely on HTTP messaging (which is directly\nembedded in Roboconf's DM). With this configuration, use the following command to launch Roboconf's DM.\n\n```bash\ndocker run -d -p 8181:8181 roboconf/roboconf-dm:latest\n```\n\nFor production environments though, Roboconf's DM may require a fully-working RabbitMQ server.  \nTo start Roboconf using the official RabbitMQ image, please run the following commands:\n\n```bash\n# Run RabbitMQ in its own container.\ndocker run -d -p 5672:5672 -p 4369:4369 --name rc_rabbitmq -d rabbitmq:latest\n\n# Run Roboconf's DM and link it with RabbitMQ.\ndocker run -d -p 8181:8181 --link rc_rabbitmq:rabbitmq roboconf/roboconf-dm:latest\n```\n\nYou can then go to [http://localhost:8181/roboconf-web-administration](http://localhost:8181/roboconf-web-administration) or\n[http://host-ip:8181/roboconf-web-administration](http://host-ip:8181/roboconf-web-administration) in a browser.\n\nIt is possible to modify the Roboconf configuration by setting environment variables.  \nHere are the default values:\n\n| Variable | Value | Description |\n| -------- | :---: | ----------- |\n| MESSAGING_TYPE | http | The messaging implementation to use (**http** or **rabbitmq**). |\n| REDIRECT_LOGS | - | If defined, this variable redirects logs to the standard output. |\n\n\u003c!-- --\u003e\n\nIf *MESSAGING_TYPE* is set to `http`.\n\n| Variable | Value | Description |\n| -------- | :---: | ----------- |\n| HTTP_IP | localhost | The IP address of Roboconf's DM. This IP will be used by agents. |\n| HTTP_PORT | 8181 | The port used by the DM to expose its web socket for agents. |\n\n\u003c!-- --\u003e\n\nIf *MESSAGING_TYPE* is set to `rabbitmq`.\n\n| Variable | Value | Description |\n| -------- | :---: | ----------- |\n| RABBITMQ_PORT_5672_TCP_ADDR | rc_rabbitmq | RabbitMQ's IP address (link to another Docker container by default). |\n| RABBITMQ_PORT_5672_TCP_PORT | 5672 | RabbitMQ's port. |\n| RABBITMQ_USER | guest | User name to connect to RabbitMQ. |\n| RABBITMQ_PASS | guest | Password name to connect to RabbitMQ. |\n\n\nTo run it as a stand-alone using your own RabbitMQ server, you can use `-e` option to match your settings.  \nFor example, to connect to RabbitMQ server listening on IP 192.168.0.55 and port 5672 using *roboconf* as user and password:\n\n```bash\n# You can pass as many environment variables as necessary.\n$ docker run -d -p 8181:8181 \\\n         -e MESSAGING_TYPE=rabbitmq \\\n         -e RABBITMQ_PORT_5672_TCP_ADDR=192.168.0.55 \\\n         -e RABBITMQ_USER=roboconf \\\n         -e RABBITMQ_PASS=roboconf \\\n         roboconf/roboconf-dm:latest\n```\n\nOnce your container is started, you may have to login to deploy additional artifacts (e.g. target handlers in the DM).\n\n```bash\n$ docker exec -it \u003ccontainer_id\u003e /bin/bash\n\n# You can now interact with the container.\n\n$ cd bin\n$ ./client -u karaf\n\n# You are now logged into Karaf.\n# Do what you have to do and log out.\n\n$ karaf \u003e roboconf:target openstack\n$ karaf \u003e logout\n\n# Then, exit the container.\n\n$ exit\n```\n\n\nHow to use this image for the agent?\n====================================\n\nRoboconf agents can also be launched from a Docker image.  \nTo launch such an image, use...\n\n```bash\ndocker run -d roboconf/roboconf-agent:latest\n```\n\nEnvironment variables are the same than for the DM, with the following ones in addition.\n\n| Variable | Value | Description |\n| -------- | :---: | ----------- |\n| AGENT_PARAMETERS | - | The agent parameters. Used to determine whether and where dynamic parameters are available. |\n| AGENT_APPLICATION_NAME | - | The application's name. |\n| AGENT_SCOPED_INSTANCE_PATH | - | The path of the instance associated with this agent. |\n| AGENT_IP_ADDRESS_OF_THE_AGENT | - | To force the IP address of an agent (if not set, will be deduced). |\n\n\u003e Using **AGENT_PARAMETERS** implies all the configuration is passed dynamically\n\u003e by the DM. When used, you do not have to pass other environment variables.\n\u003e Parameters will be retrieved dynamically (including the messaging stuff).\n\nHere are examples showing how to use this image.  \n\n```bash\n# Force the agent parameters\n$ docker run -d -p 8181:8181 \\\n         -e AGENT_APPLICATION_NAME=\"my application name\" \\\n         -e AGENT_SCOPED_INSTANCE_PATH=\"/vm1/app1\" \\\n         -e AGENT_IP_ADDRESS_OF_THE_AGENT=\"192.168.1.19\" \\\n         roboconf/roboconf-agent:latest\n\n# Dynamic parameters passed through user data\n$ docker run -d -p 8181:8181 \\\n         -e AGENT_PARAMETERS=\"@iaas-ec2\" \\\n         roboconf/roboconf-agent:latest\n\n# Dynamic parameters passed through a file\n# (used as an example by the DM when it launches agents in Docker containers).\n$ docker run -d -p 8181:8181 \\\n         -v /tmp/rbf:/tmp/dynamic-parameters \\\n         -e AGENT_PARAMETERS=\"/tmp/dynamic-parameters/user-data.txt\" \\\n         roboconf/roboconf-agent:latest\n```\n\n\nHow to build this image\n=======================\n\nThis Dockerfile allows to build an image for Roboconf's DM and one for Roboconf agents.  \nThe Docker build has 3 arguments.\n\n| Argument | Optional | Default | Description |\n| -------- | :------: | :-----: | ----------- |\n| RBCF_KIND | no | - | Must be either `dm` or `agent`. It is used to determine which image to build. |\n| RBCF_VERSION | yes | LATEST | The version of Roboconf to use. It can include a \"-SNAPSHOT\" suffix. In this case, the Maven policy should be \"snapshots\" instead of \"releases\". **LATEST** is a special keyword for Nexus' API, which is used at build time to resolve the artifact to download. |\n| MAVEN_POLICY | yes | releases | The Maven policy: should we search in the `snapshots` or in the `releases` repository? |\n| BASE_URL | yes | https://oss.sonatype.org/service/local/artifact/maven/redirect | The REST API used to resolve the Maven artifacts. One could reference another Nexus instance or [a mock of it](https://github.com/roboconf/dockerized-mock-for-nexus-api). |\n\nReleases should use 2 tags: `latest` and `\u003cversion\u003e`.  \nExample, to build the image for the DM (version 0.6)...\n\n```\ndocker build \\\n\t\t--build-arg RBCF_KIND=dm \\\n\t\t--build-arg RBCF_VERSION=0.6 \\ \n\t\t-t roboconf/roboconf-dm:latest \\\n\t\t-t roboconf/roboconf-dm:0.6 \\\n\t\t.\n```\n\nAnd to build the image for the agent (version 0.6)...\n\n```\ndocker build \\\n\t\t--build-arg RBCF_KIND=agent \\\n\t\t--build-arg RBCF_VERSION=0.6 \\\n\t\t-t roboconf/roboconf-agent:latest \\\n\t\t-t roboconf/roboconf-agent:0.6 \\\n\t\t.\n```\n\nTo release a snapshot version...\n\n```\ndocker build \\\n\t\t--build-arg RBCF_KIND=agent \\\n\t\t--build-arg RBCF_VERSION=0.6-SNAPSHOT \\\n\t\t--build-arg MAVEN_POLICY=snapshots \\\n\t\t-t roboconf/roboconf-agent:latest \\\n\t\t-t roboconf/roboconf-agent:0.6 \\\n\t\t.\n```\n\n\u003e By setting 2 tags, the latest tag will be updated on every release.    \n\u003e And older tags/versions will remain.\n\nIt is also possible to build images for the latest versions.  \nBut it is only recommended for development. Not to be pushed to Docker hub.\n\nTo build the last released version of Roboconf (if the version is not specified, only use one tag)...\n\n```\ndocker build \\\n\t\t--build-arg RBCF_KIND=agent \\\n\t\t-t roboconf/roboconf-agent:latest \\\n\t\t.\n```\n\nTo build the last snapshot version of Roboconf (if the version is not specified, only use one tag)...\n\n```\ndocker build \\\n\t\t--build-arg RBCF_KIND=agent \\\n\t\t--build-arg MAVEN_POLICY=snapshots \\\n\t\t-t roboconf/roboconf-agent:latest \\\n\t\t.\n```\n\nYou can also build from your local Maven repository.  \nYou need to build [this Docker image](https://github.com/roboconf/dockerized-mock-for-nexus-api)\nand run it as described in its [readme](https://github.com/roboconf/dockerized-mock-for-nexus-api/blob/master/readme.md).\nNotice that **this mode does not support the LATEST version**. Then, run...\n\n```properties\n# 172.17.0.1: IP address of the host system for the docker0 network\ndocker build \\\n\t\t--build-arg RBCF_KIND=agent \\\n\t\t--build-arg RBCF_VERSION=0.9-SNAPSHOT \\\n\t\t--build-arg BASE_URL=\"http://172.17.0.1:9090/redirect\" \\\n\t\t-t roboconf/roboconf-agent:latest-local \\\n\t\t.\n```\n\nPlease, refer to the [official Docker documentation](https://docs.docker.com/engine/reference/commandline/build/) for alternatives.\n\n\u003e Once images are built for both the DM and the agent, you can run tests with the **verify.sh** script.\n\n\nLicense\n=======\n\nThis Docker image and Roboconf are licensed under the terms of the [Apache license v2](https://www.apache.org/licenses/LICENSE-2.0).\n\n\nSupported Docker versions\n=========================\n\nThis image is officially supported on Docker version 1.9.0.  \nSupport for older versions (down to 1.6) is provided on a best-effort basis.  \nPlease see [the Docker installation documentation](https://docs.docker.com/installation/) for details on how to upgrade your Docker daemon.\n\n\nUser Feedback\n=============\n\nDocumentation\n-------------\n\nOfficial Roboconf documentation is available on [Roboconf's web site](https://roboconf.github.io).\n\n\nIssues\n------\n\nIf you have any problems with or questions about this image, please contact us through a [GitHub issue](https://github.com/roboconf/roboconf-dockerfile/issues).\n\n\nContributing\n------------\n\nTo contribute to this image, you can submit a pull-request to [Github repository](https://github.com/roboconf/roboconf-dockerfile).  \nTo contribute to Roboconf, please follow the contributing guidelines on [Roboconf's web site](https://roboconf.github.io).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froboconf%2Froboconf-dockerfile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froboconf%2Froboconf-dockerfile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froboconf%2Froboconf-dockerfile/lists"}