blob: 80a5ff3023e473df8a5adc14d555e02d8cf69440 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html>
<head>
<link rel="shortcut icon" href="http://aries.apache.org/images/favicon.ico"></link>
<link type="text/css" rel="stylesheet" href="http://aries.apache.org/resources/site.css"></link>
</script><script src="http://aries.apache.org/resources/menus.js" language="javascript" type="text/javascript"></script>
<meta name="keywords" content="..."/>
<meta name="description" content="..." />
<title>
Apache Aries - Aries Containers
</title>
</head>
<body onload="SetMenu()">
<table width="100%" cellpadding="0" cellspacing="0">
<tr width="100%">
<td id="cell-0-0" colspan="2">&nbsp;</td>
<td id="cell-0-1">&nbsp;</td>
<td id="cell-0-2" colspan="2">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-1-0">&nbsp;</td>
<td id="cell-1-1">&nbsp;</td>
<td id="cell-1-2">
<div style="padding: 5px;">
<div id="banner">
<!-- Banner -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left" class="topbardiv" nowrap="">
<a href="http://aries.apache.org/" title="Apache Aries"> <img border="0" src="http://aries.apache.org/images/Arieslogo_Horizontal.gif"> </a>
</td>
<td align="right" nowrap="">
<a href="http://www.apache.org/" title="The Apache Software Foundation"> <img border="0" src="http://aries.apache.org/images/apache_feather.png"> </a>
</td>
</tr>
</table>
<!-- Banner -->
</div>
</div>
<div id="top-menu">
<table border="0" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td>
<div align="left">
<!-- Breadcrumbs -->
<!-- Breadcrumbs -->
</div>
</td>
<td>
<div align="right">
<!-- Quicklinks -->
<DIV style="padding: 5px 5px 0px 25px;">
<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
<A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A>
<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
<INPUT maxlength="255" name="q" size="15" type="text" value></INPUT>
<INPUT name="btnG" type="submit" value="Search"></INPUT>
<INPUT name="domains" type="hidden" value="aries.apache.org"></INPUT>
<INPUT name="sitesearch" type="hidden" value="aries.apache.org"></INPUT>
</FORM>
</DIV>
<!-- Quicklinks -->
</div>
</td>
</tr>
</table>
</div>
</td>
<td id="cell-1-3">&nbsp;</td>
<td id="cell-1-4">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-2-0" colspan="2">&nbsp;</td>
<td id="cell-2-1">
<table>
<tr height="100%" valign="top">
<td height="100%">
<div id="wrapper-menu-page-right">
<div id="wrapper-menu-page-top">
<div id="wrapper-menu-page-bottom">
<div id="menu-page">
<!-- NavigationBar -->
<style type="text/css">
/* The following code is added by mdx_elementid.py
It was originally lifted from http://subversion.apache.org/style/site.css */
/*
* Hide class="elementid-permalink", except when an enclosing heading
* has the :hover property.
*/
.headerlink, .elementid-permalink {
visibility: hidden;
}
h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
<div onclick="SwitchMenu('documentation')" id="documentationTitle" class="menutitle">Documentation</div>
<div id="documentation" class="menuitemgroup">
<div class="menuitem">
<a href="/documentation/integrators-guide.html">Integrators Guide</a>
</div>
<div class="menuitem">
<a href="/documentation/articles.html">Articles</a>
</div>
<div class="menuitem">
<a href="https://svn.apache.org/repos/asf/aries/slides/">Slides</a>
</div>
<div class="menuitem">
<a href="/documentation/tutorials.html">Tutorials</a>
</div>
<div class="menuitem">
<a href="/documentation/tools.html">Tools</a>
</div>
</div>
<div onclick="SwitchMenu('modules')" id="modulesTitle" class="menutitle">Modules</div>
<div id="modules" class="menuitemgroup">
<div class="menuitem">
<a href="/modules/samples.html">Samples</a>
</div>
<div class="menuitem">
<a href="/modules/async-svcs.html">Asynchronous Services</a>
</div>
<div class="menuitem">
<a href="/modules/blueprint.html">Blueprint</a>
</div>
<div class="menuitem">
<a href="/modules/blueprint-maven-plugin.html">Blueprint-maven-plugin</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintannotation.html">Blueprint Annotations</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintnoosgi.html">Blueprint No-OSGi</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintweb.html">Blueprint Web</a>
</div>
<div class="menuitem">
<a href="/modules/containers.html">Containers</a>
</div>
<div class="menuitem">
<a href="/modules/esaanttask.html">ESA Ant Task </a>
</div>
<div class="menuitem">
<a href="/modules/ebamavenpluginproject.html">EBA Maven Plugin </a>
</div>
<div class="menuitem">
<a href="/modules/esamavenpluginproject.html">ESA Maven Plugin </a>
</div>
<div class="menuitem">
<a href="/modules/jmx.html">JMX</a>
</div>
<div class="menuitem">
<a href="/modules/jndiproject.html">JNDI</a>
</div>
<div class="menuitem">
<a href="/modules/jpaproject.html">JPA</a>
</div>
<div class="menuitem">
<a href="/modules/transactioncontrol.html">Transaction Control Service</a>
</div>
<div class="menuitem">
<a href="/modules/transactionsproject.html">Transactions</a>
</div>
<div class="menuitem">
<a href="/modules/rsa.html">Remote Service Admin (RSA)</a>
</div>
<div class="menuitem">
<a href="/modules/spi-fly.html">SPI Fly</a>
</div>
<div class="menuitem">
<a href="/modules/subsystems.html">Subsystems</a>
</div>
<div class="menuitem">
<a href="/modules/applications.html">Applications (obsolete)</a>
</div>
</div>
<div onclick="SwitchMenu('downloads')" id="downloadsTitle" class="menutitle">Downloads</div>
<div id="downloads" class="menuitemgroup">
<div class="menuitem">
<a href="/downloads/currentreleases.html">Current Releases</a>
</div>
<div class="menuitem">
<a href="/downloads/testresults.html">Compliance Tests</a>
</div>
<div class="menuitem">
<a href="/downloads/archived-releases.html">Archived Releases</a>
</div>
</div>
<div onclick="SwitchMenu('community')" id="communityTitle" class="menutitle">Community</div>
<div id="community" class="menuitemgroup">
<div class="menuitem">
<a href="/community/resources.html">Community Resources</a>
</div>
<div class="menuitem">
<a href="/community/gettinginvolved.html">Getting Involved</a>
</div>
<div class="menuitem">
<a href="/community/people.html">Who we are</a>
</div>
<div class="menuitem">
<a href="/community/boardreports.html">Board Reports</a>
</div>
<div class="menuitem">
<a href="/community/logos.html">Logos for Users</a>
</div>
</div>
<div onclick="SwitchMenu('development')" id="developmentTitle" class="menutitle">Development</div>
<div id="development" class="menuitemgroup">
<div class="menuitem">
<a href="/development/buildingaries.html">Building Aries </a>
</div>
<div class="menuitem">
<a href="/development/guidelines.html">Cording Guidelines</a>
</div>
<div class="menuitem">
<a href="/development/architecture.html">Architecture</a>
</div>
<div class="menuitem">
<a href="/development/releasingaries.html">Releasing Aries </a>
</div>
<div class="menuitem">
<a href="/development/compliancetesting.html">OSGi Compliance Tests </a>
</div>
<div class="menuitem">
<a href="/development/maintainingthewebpages.html">Web Site Maintenance </a>
</div>
</div>
<div onclick="SwitchMenu('sponsorship')" id="sponsorshipTitle" class="menutitle">Sponsorship</div>
<div id="sponsorship" class="menuitemgroup">
<div class="menuitem">
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</div>
<div class="menuitem">
<a href="http://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a>
</div>
</div>
<div class="promotion">
<a href="http://www.apache.org/events/current-event.html">
<img src="http://www.apache.org/events/current-event-125x125.png" width="125" height="125"/>
</a>
</div>
<!-- NavigationBar -->
</div>
</div>
</div>
</div>
</td>
<td height="100%" width="100%">
<!-- Content -->
<div class="wiki-content"><style type="text/css">
/* The following code is added by mdx_elementid.py
It was originally lifted from http://subversion.apache.org/style/site.css */
/*
* Hide class="elementid-permalink", except when an enclosing heading
* has the :hover property.
*/
.headerlink, .elementid-permalink {
visibility: hidden;
}
h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
<h1 id="aries-containers">Aries Containers<a class="headerlink" href="#aries-containers" title="Permanent link">&para;</a></h1>
<p>Aries Containers is an Apache Aries subproject to manage container deployments, such as docker-based microservices, from a Java API.</p>
<p>Many technologies exist to manage container deployments. Examples include Kubernetes, Marathon/Mesos, Docker Swarm, Amazon ECS
and others. While each technology provides specific features, many of these management technologies share common behaviour.
Aries Containers provides an abstraction that allows users to easily switch between these technologies. </p>
<p>Benefits:</p>
<ul>
<li>Requirements change - container deployers may find that they need to change target platforms at short notice. Using an abstraction API
helps making such changes without too much additional work.</li>
<li>Testing - many container management systems require cluster of machines or otherwise large setup which may make testing during
development difficult. Aries Containers also contains a <code>docker.local</code> binding which makes it possible to run the same code with using
a local docker installation on the developer's machine.</li>
</ul>
<p>Current Aries Containers modules:</p>
<ul>
<li><code>containers-api</code> - the API implemented by the various bindings.</li>
<li><code>containers-docker-local</code> - Binding that uses the local docker installation.</li>
<li><code>containers-marathon</code> - Marathon binding.</li>
<li><code>containers-parent</code> - Parent pom.</li>
<li><code>containers-examples</code> - Examples.</li>
<li>...</li>
</ul>
<p>This project could influence the design process of the <a href="https://github.com/osgi/design/blob/master/rfps/rfp-0179-ComputeManagementService.pdf">OSGi RFP 179</a>.</p>
<h1 id="source">Source<a class="headerlink" href="#source" title="Permanent link">&para;</a></h1>
<p>The Aries RSA source is in a separate <a href="https://git-wip-us.apache.org/repos/asf/aries-containers.git">git repository aries-containers</a> there is also a <a href="https://github.com/apache/aries-containers">mirror on github</a>.</p>
<p>To build the source, just run:</p>
<p><code>mvn install</code></p>
<p>Java 1.8 or higher is required. Maven 3.3.9+ is recommended.</p>
<h1 id="quick-start">Quick Start<a class="headerlink" href="#quick-start" title="Permanent link">&para;</a></h1>
<p>The easiest way to get started is with the examples and the local docker binding. Aries Containers work well in an OSGi
environment where bindings are provided as OSGi services.</p>
<p>As an alternative, Aries Containers can also be used in a plain Java environment. Instead of obtaining the bindings
from the service registry, they need to be instantiated directly in this case.</p>
<h2 id="osgi-example">OSGi example<a class="headerlink" href="#osgi-example" title="Permanent link">&para;</a></h2>
<p>The OSGi example uses the Felix SCR implementation to get the currently active ServiceManager injected into a simple servlet.
The servlet provides a simple UI to perform some of the management operations.</p>
<p>The servlet is written using OSGi Declarative Service annotations and OSGi Http Whiteboard annotations and can be found here:
<a href="https://git-wip-us.apache.org/repos/asf?p=aries-containers.git;a=blob;f=containers-examples/containers-example-osgiservlet/src/main/java/org/apache/aries/containers/examples/osgiservlet/ServiceManagerServlet.java;hb=HEAD">ServiceManagerServlet.java</a></p>
<p>Main functionality of the servlet can be summarized as follows:</p>
<div class="codehilite"><pre>@Component(service = Servlet.class,
property = {HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN + &quot;=/manager&quot;})
public class ServiceManagerServlet extends HttpServlet {
@Reference
ServiceManager serviceManager;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();
pw.println(&quot;<span class="nt">&lt;BODY&gt;&lt;H1&gt;</span>Service Deployments<span class="nt">&lt;/H1&gt;</span>&quot;);
pw.println(&quot;<span class="nt">&lt;UL&gt;</span>&quot;);
for (String dep : serviceManager.listServices()) {
pw.println(&quot;<span class="nt">&lt;LI&gt;</span>&quot; + dep);
}
</pre></div>
<p>In short - an OSGi Declarative Service Component is registered as a HTTP Whiteboard Servet. The Aries Containers Service Manager is
injected into the <code>serviceManager</code> field and then used in the servlet to manage services.</p>
<p>This demo can be launched in any OSGi framework that supports Declarative Services and the HTTP Whiteboard. For example, to run this demo
with the Apache Felix OSGi framework, add:</p>
<ul>
<li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.scr-2.0.10.jar">The Felix SCR Declarative Services Implementation</a></li>
<li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.configadmin-1.8.14.jar">Felix Configuration Admin Service Implementation</a></li>
<li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.eventadmin-1.4.8.jar">Felix Event Admin Service Implementation</a></li>
<li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.http.whiteboard-3.0.0.jar">Felix Http Whiteboard bundle</a> with <a href="http://www-us.apache.org/dist//felix/org.apache.felix.http.jetty-3.4.2.jar">Felix Jetty</a> and the <a href="http://www-us.apache.org/dist//felix/org.apache.felix.http.servlet-api-1.1.2.jar">Servlet API</a>.</li>
</ul>
<p>Then add the Aries Containers implementation with the appropriate binding and their dependencies. To run with the Docker Local binding, add</p>
<ul>
<li>Aries Containers API</li>
<li>Aries Containers Docker Local</li>
<li><a href="http://repo2.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar">SLF4J API</a> and <a href="http://repo2.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar">implementation</a>.</li>
</ul>
<p>Finally add the OSGi demo bundle itself. The resulting bundle list will look like this:</p>
<div class="codehilite"><pre><span class="n">lb</span>
<span class="n">START</span> <span class="n">LEVEL</span> 1
<span class="n">ID</span><span class="o">|</span><span class="n">State</span> <span class="o">|</span><span class="n">Level</span><span class="o">|</span><span class="n">Name</span>
0<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 0<span class="o">|</span><span class="n">System</span> <span class="n">Bundle</span> <span class="p">(</span>5<span class="p">.</span>6<span class="p">.</span>4<span class="p">)</span><span class="o">|</span>5<span class="p">.</span>6<span class="p">.</span>4
1<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">jansi</span> <span class="p">(</span>1<span class="p">.</span>16<span class="p">.</span>0<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>16<span class="p">.</span>0
2<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">JLine</span> <span class="n">Bundle</span> <span class="p">(</span>3<span class="p">.</span>3<span class="p">.</span>0<span class="p">)</span><span class="o">|</span>3<span class="p">.</span>3<span class="p">.</span>0
3<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Bundle</span> <span class="n">Repository</span> <span class="p">(</span>2<span class="p">.</span>0<span class="p">.</span>10<span class="p">)</span><span class="o">|</span>2<span class="p">.</span>0<span class="p">.</span>10
4<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Gogo</span> <span class="n">Command</span> <span class="p">(</span>1<span class="p">.</span>0<span class="p">.</span>2<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>0<span class="p">.</span>2
5<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Gogo</span> <span class="n">JLine</span> <span class="n">Shell</span> <span class="p">(</span>1<span class="p">.</span>0<span class="p">.</span>6<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>0<span class="p">.</span>6
6<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Gogo</span> <span class="n">Runtime</span> <span class="p">(</span>1<span class="p">.</span>0<span class="p">.</span>6<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>0<span class="p">.</span>6
7<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Declarative</span> <span class="n">Services</span> <span class="p">(</span>2<span class="p">.</span>0<span class="p">.</span>10<span class="p">)</span><span class="o">|</span>2<span class="p">.</span>0<span class="p">.</span>10
8<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Http</span> <span class="n">Jetty</span> <span class="p">(</span>3<span class="p">.</span>4<span class="p">.</span>2<span class="p">)</span><span class="o">|</span>3<span class="p">.</span>4<span class="p">.</span>2
9<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Servlet</span> <span class="n">API</span> <span class="p">(</span>1<span class="p">.</span>1<span class="p">.</span>2<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>1<span class="p">.</span>2
10<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Http</span> <span class="n">Whiteboard</span> <span class="p">(</span>3<span class="p">.</span>0<span class="p">.</span>0<span class="p">)</span><span class="o">|</span>3<span class="p">.</span>0<span class="p">.</span>0
11<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Configuration</span> <span class="n">Admin</span> <span class="n">Service</span> <span class="p">(</span>1<span class="p">.</span>8<span class="p">.</span>14<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>8<span class="p">.</span>14
12<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">EventAdmin</span> <span class="p">(</span>1<span class="p">.</span>4<span class="p">.</span>8<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>4<span class="p">.</span>8
13<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Aries</span> <span class="n">Containers</span> <span class="n">API</span> <span class="p">(</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705261547<span class="p">)</span><span class="o">|</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705261547
14<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Aries</span> <span class="n">Containers</span> <span class="n">impl</span> <span class="k">for</span> <span class="n">local</span> <span class="n">Docker</span> <span class="n">use</span> <span class="p">(</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291452<span class="p">)</span><span class="o">|</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291452
15<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">slf4j</span><span class="o">-</span><span class="n">api</span> <span class="p">(</span>1<span class="p">.</span>7<span class="p">.</span>25<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>7<span class="p">.</span>25
16<span class="o">|</span><span class="n">Resolved</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">slf4j</span><span class="o">-</span><span class="n">simple</span> <span class="p">(</span>1<span class="p">.</span>7<span class="p">.</span>25<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>7<span class="p">.</span>25
17<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Container</span> <span class="n">Example</span> <span class="n">OSGi</span> <span class="n">Servlet</span> <span class="p">(</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291444<span class="p">)</span><span class="o">|</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291444
</pre></div>
<p>Now you can access the servlet at <a href="http://localhost:8080/containers/manager">http://localhost:8080/containers/manager</a></p>
<p><img alt="screenshot" src="containers/osgidemo.png" /></p>
<p>After adding a container you can inspect its result by querying <code>docker</code> for its running containers:</p>
<div class="codehilite"><pre>$ <span class="n">docker</span> <span class="n">ps</span>
<span class="n">CONTAINER</span> <span class="n">ID</span> <span class="n">IMAGE</span> <span class="n">COMMAND</span> <span class="n">STATUS</span> <span class="n">PORTS</span> <span class="n">NAMES</span>
7<span class="n">cc5c753777e</span> <span class="n">httpd</span> &quot;<span class="n">httpd</span><span class="o">-</span><span class="n">foreground</span>&quot; <span class="n">Up</span> 4 <span class="n">seconds</span> 0<span class="p">.</span>0<span class="p">.</span>0<span class="p">.</span>0<span class="p">:</span>51467<span class="o">-&gt;</span>80<span class="o">/</span><span class="n">tcp</span> <span class="n">myapache</span>
</pre></div>
<h2 id="plain-java-example">Plain Java example<a class="headerlink" href="#plain-java-example" title="Permanent link">&para;</a></h2>
<p>This example launches a small Java Application to create a service deployment. Initially a single container is deployed. The user can
modify the number of replicas from within the application.</p>
<p>The code can be found here: <a href="https://git-wip-us.apache.org/repos/asf?p=aries-containers.git;a=blob;f=containers-examples/containers-example-javaapp/src/main/java/org/apache/aries/containers/examples/javaapp/Main.java;hb=HEAD">Main.java</a></p>
<p>The main functionality is:</p>
<div class="codehilite"><pre> <span class="n">ServiceManager</span> <span class="n">sm</span> <span class="p">=</span> <span class="n">new</span> <span class="n">LocalDockerServiceManager</span><span class="p">();</span>
<span class="o">//</span> <span class="n">If</span> <span class="n">you</span> <span class="n">want</span> <span class="n">to</span> <span class="n">run</span> <span class="n">with</span> <span class="n">Marathon</span><span class="p">,</span> <span class="n">use</span> <span class="n">the</span> <span class="n">following</span> <span class="n">line</span>
<span class="o">//</span> <span class="n">ServiceManager</span> <span class="n">sm</span> <span class="p">=</span> <span class="n">new</span> <span class="n">MarathonServiceManager</span><span class="p">(</span>&quot;<span class="n">http</span><span class="p">:</span><span class="o">//</span>192<span class="p">.</span>168<span class="p">.</span>99<span class="p">.</span>100<span class="p">:</span>8080<span class="o">/</span>&quot;<span class="p">);</span>
<span class="n">ServiceConfig</span> <span class="n">sc</span> <span class="p">=</span> <span class="n">ServiceConfig</span><span class="p">.</span><span class="n">builder</span><span class="p">(</span>&quot;<span class="n">mytesthttpd</span>&quot;<span class="p">,</span> &quot;<span class="n">httpd</span>&quot;<span class="p">).</span>
<span class="n">cpu</span><span class="p">(</span>0<span class="p">.</span>2<span class="p">).</span><span class="n">memory</span><span class="p">(</span>32<span class="p">).</span><span class="n">port</span><span class="p">(</span>80<span class="p">).</span><span class="n">build</span><span class="p">();</span>
<span class="n">Service</span> <span class="n">svc</span> <span class="p">=</span> <span class="n">sm</span><span class="p">.</span><span class="n">getService</span><span class="p">(</span><span class="n">sc</span><span class="p">);</span>
<span class="o">//</span> <span class="n">The</span> <span class="n">service</span> <span class="n">is</span> <span class="n">now</span> <span class="n">created</span>
</pre></div>
<p>If you are running this the Docker local binding, you can see the docker container created:</p>
<div class="codehilite"><pre>$ <span class="n">docker</span> <span class="n">ps</span>
<span class="n">CONTAINER</span> <span class="n">ID</span> <span class="n">IMAGE</span> <span class="n">COMMAND</span> <span class="n">STATUS</span> <span class="n">PORTS</span> <span class="n">NAMES</span>
7<span class="n">cc5c753777e</span> <span class="n">httpd</span> &quot;<span class="n">httpd</span><span class="o">-</span><span class="n">foreground</span>&quot; <span class="n">Up</span> 4 <span class="n">seconds</span> 0<span class="p">.</span>0<span class="p">.</span>0<span class="p">.</span>0<span class="p">:</span>51467<span class="o">-&gt;</span>80<span class="o">/</span><span class="n">tcp</span> <span class="n">mytesthttpd</span>
</pre></div>
<p>The example also allows scaling up and down of replica containers for this service.</p>
<h1 id="bindings">Bindings<a class="headerlink" href="#bindings" title="Permanent link">&para;</a></h1>
<h2 id="docker-local">Docker Local<a class="headerlink" href="#docker-local" title="Permanent link">&para;</a></h2>
<p>This binding works by issuing <code>docker</code> commands on the local machine and is very useful for testing. Make sure the environment
variables normally provided via <code>docker-machine env &lt;myenv&gt;</code> are set.</p>
<p>OSGi ServiceManager identifier property: <code>container.factory.binding = docker.local</code></p>
<p>Constructor, for use outside of OSGi: <code>org.apache.aries.containers.docker.local.impl.LocalDockerServiceManager</code></p>
<h2 id="marathon">Marathon<a class="headerlink" href="#marathon" title="Permanent link">&para;</a></h2>
<p>This binding uses Marathon as the underlying container manager. It requires the following configuration to be set:</p>
<div class="codehilite"><pre><span class="n">service</span><span class="p">.</span><span class="n">pid</span><span class="p">:</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">aries</span><span class="p">.</span><span class="n">containers</span><span class="p">.</span><span class="n">marathon</span>
<span class="n">marathon</span><span class="p">.</span><span class="n">url</span><span class="p">=</span><span class="o">&lt;</span><span class="n">the</span> <span class="n">URL</span> <span class="n">where</span> <span class="n">marathon</span> <span class="n">can</span> <span class="n">be</span> <span class="n">contacted</span><span class="o">&gt;</span>
</pre></div>
<p>Once configured, the Marathon binding will register its OSGi service. </p>
<p>OSGi ServiceManager identifier property: <code>container.factory.binding = marathon</code></p>
<p>Constructors, for use outside of OSGi: <code>org.apache.aries.containers.marathon.impl.MarathonServiceManager</code></p>
<div class="codehilite"><pre><span class="cm">/**</span>
<span class="cm"> * Create the Marathon Service Manager.</span>
<span class="cm"> *</span>
<span class="cm"> * @param marathonURL The Marathon URL</span>
<span class="cm"> */</span>
<span class="n">public</span> <span class="n">MarathonServiceManager</span><span class="p">(</span><span class="n">String</span> <span class="n">marathonURL</span><span class="p">);</span>
<span class="cm">/**</span>
<span class="cm"> * Create the Marathon Service Manager for use with DC/OS.</span>
<span class="cm"> *</span>
<span class="cm"> * @param marathonURL The Marathon URL.</span>
<span class="cm"> * @param dcosUser The DCOS user or service-user.</span>
<span class="cm"> * @param passToken The password or token to use.</span>
<span class="cm"> * @param serviceAcct `true` if this is a service account `false` if this is a plain user.</span>
<span class="cm"> */</span>
<span class="n">public</span> <span class="n">MarathonServiceManager</span><span class="p">(</span><span class="n">String</span> <span class="n">marathonURL</span><span class="p">,</span> <span class="n">String</span> <span class="n">dcosUser</span><span class="p">,</span> <span class="n">String</span> <span class="n">passToken</span><span class="p">,</span> <span class="n">boolean</span> <span class="n">serviceAcct</span><span class="p">);</span>
</pre></div></div>
<!-- Content -->
</td>
</tr>
</table>
</td>
<td id="cell-2-2" colspan="2">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-3-0">&nbsp;</td>
<td id="cell-3-1">&nbsp;</td>
<td id="cell-3-2">
<div id="footer">
<!-- Footer -->
<div id="site-footer">
<a href="http://aries.apache.org/privacy-policy.html";>Privacy
Policy</a>
</div>
<!-- Footer -->
</div>
</td>
<td id="cell-3-3">&nbsp;</td>
<td id="cell-3-4">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-4-0" colspan="2">&nbsp;</td>
<td id="cell-4-1">&nbsp;</td>
<td id="cell-4-2" colspan="2">&nbsp;</td>
</tr>
</table>
</body>
</html>