blob: 167f7247b3dc1d22113401cd05623559fadfdbd3 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - Fuseki : Docker Tools</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="/css/bootstrap-icons.css" rel="stylesheet" media="screen"><link rel="stylesheet" type="text/css" href="https://jena.apache.org/sass/jena.1b17c39a117e22b46db4c66f6395dc27c134a60377d87d2d5745b8600eb69722.css" integrity="sha256-GxfDmhF&#43;IrRttMZvY5XcJ8E0pgN32H0tV0W4YA62lyI=">
<link rel="shortcut icon" href="/images/favicon.ico" />
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary" role="navigation">
<div class="container">
<div class="navbar-header">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="/index.html">
<img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li id="homepage" class="nav-item"><a class="nav-link" href="/index.html"><span class="bi-house"></span> Home</a></li>
<li id="download" class="nav-item"><a class="nav-link" href="/download/index.cgi"><span class="bi-download"></span> Download</a></li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal"></span> Learn <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-header">Tutorials</li>
<li><a class="dropdown-item" href="/tutorials/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
<li><a class="dropdown-item" href="/documentation/notes/index.html">How-To's</a></li>
<li><a class="dropdown-item" href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
<li><a class="dropdown-item" href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/sparql.html">SPARQL tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">References</li>
<li><a class="dropdown-item" href="/documentation/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a class="dropdown-item" href="/documentation/io/">RDF I/O</a></li>
<li><a class="dropdown-item" href="/documentation/assembler/index.html">Assembler</a></li>
<li><a class="dropdown-item" href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a class="dropdown-item" href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
<li><a class="dropdown-item" href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/inference/index.html">Inference API</a></li>
<li><a class="dropdown-item" href="/documentation/ontology/">Ontology API</a></li>
<li><a class="dropdown-item" href="/documentation/permissions/index.html">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/rdf/index.html">RDF API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfstar/index.html">RDF-star</a></li>
<li><a class="dropdown-item" href="/documentation/shacl/index.html">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/shex/index.html">ShEx</a></li>
<li><a class="dropdown-item" href="/documentation/tdb/index.html">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a class="dropdown-item" href="/documentation/query/text-query.html">Text Search</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal-code"></span> Javadoc <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/documentation/javadoc.html">All Javadoc</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/arq/">ARQ</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/jena/">Jena Core</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/permissions/">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/shacl/">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/tdb/">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/text/">Text Search</a></li>
</ul>
</li>
</ul>
<form class="d-flex" role="search" action="/search" method="GET">
<div class="input-group">
<input class="form-control border-end-0 border m-0" type="search" name="q" id="search-query" placeholder="Search...." aria-label="Search" style="width: 10rem;">
<button class="btn btn-outline-secondary border-start-0 border" type="submit">
<i class="bi-search"></i>
</button>
</div>
</form>
<ul class="navbar-nav">
<li id="ask" class="nav-item"><a class="nav-link" href="/help_and_support/index.html" title="Ask"><span class="bi-patch-question"></span><span class="text-body d-none d-xxl-inline"> Ask</span></a></li>
<li class="nav-item dropdown">
<a href="#" title="Get involved" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-megaphone"></span><span class="text-body d-none d-xxl-inline"> Get involved </span><b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/getting_involved/index.html">Contribute</a></li>
<li><a class="dropdown-item" href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">Project</li>
<li><a class="dropdown-item" href="/about_jena/about.html">About Jena</a></li>
<li><a class="dropdown-item" href="/about_jena/architecture.html">Architecture</a></li>
<li><a class="dropdown-item" href="/about_jena/citing.html">Citing</a></li>
<li><a class="dropdown-item" href="/about_jena/team.html">Project team</a></li>
<li><a class="dropdown-item" href="/about_jena/contributions.html">Related projects</a></li>
<li><a class="dropdown-item" href="/about_jena/roadmap.html">Roadmap</a></li>
<li><a class="dropdown-item" href="/about_jena/security-advisories.html">Security Advisories</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">ASF</li>
<li><a class="dropdown-item" href="https://www.apache.org/">Apache Software Foundation</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/licenses/LICENSE-2.0">License</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/security/">Security</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</li>
<li class="nav-item" id="edit"><a class="nav-link" href="https://github.com/apache/jena-site/edit/main/source/documentation/fuseki2/fuseki-docker.md" title="Edit this page on GitHub"><span class="bi-pencil-square"></span><span class="text-body d-none d-xxl-inline"> Edit this page</span></a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
<div id="breadcrumbs">
<ol class="breadcrumb mt-4 p-2 bg-body-tertiary">
<li class="breadcrumb-item"><a href='/documentation'>DOCUMENTATION</a></li>
<li class="breadcrumb-item"><a href='/documentation/fuseki2'>FUSEKI2</a></li>
<li class="breadcrumb-item active">FUSEKI DOCKER</li>
</ol>
</div>
<h1 class="title">Fuseki : Docker Tools</h1>
<main class="d-flex flex-xl-row flex-column">
<aside class="text-muted align-self-start mb-3 p-0 d-xl-none d-block">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<ul>
<li><a href="#database">Database</a></li>
<li><a href="#build">Build</a></li>
<li><a href="#test-run">Test Run</a></li>
<li><a href="#layout">Layout</a></li>
<li><a href="#setting-jvm-arguments">Setting JVM arguments</a></li>
<li><a href="#docker-commands">Docker Commands</a></li>
<li><a href="#version-specific-notes">Version specific notes:</a></li>
</ul>
</nav>
</aside>
<article class="flex-column me-lg-4">
<p>The <a href="https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-docker/">jena-fuseki-docker package</a>
contains a Dockerfile, docker-compose file, and helper scripts to
create a docker container for Apache Jena Fuseki.</p>
<p>The docker container is based on
<a href="https://jena.apache.org/documentation/fuseki2/fuseki-main">Fuseki main</a>
for running a SPARQL server.</p>
<p>There is no UI - all configuration is by command line and all usage by via the
network protocols.</p>
<p>Databases can be mounted outside the docker container so they are preserved when
the container terminates.</p>
<p>This build system allows the user to customize the docker image.</p>
<p>The docker build downloads the server binary from
<a href="https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-server/">Maven central</a>,
checking the download against the SHA1 checksum.</p>
<h2 id="database">Database</h2>
<p>There is a volume mapping &ldquo;./databases&rdquo; in the current directory into the server.
This can be used to contain databases outside, but accessible to, the container
that do not get deleted when the container exits.</p>
<p>See examples below.</p>
<h2 id="build">Build</h2>
<p>Choose the version number of Apache Jena release you wish to use. This toolkit
defaults to the version of the overall Jena release it was part of. It is best
to use the release of this set of tools from the same release of the desired
server.</p>
<pre><code>docker-compose build --build-arg JENA_VERSION=3.16.0
</code></pre>
<p>Note the build command must provide the version number.</p>
<h2 id="test-run">Test Run</h2>
<p><code>docker-compose run</code> cam be used to test the build from the previous section.</p>
<p>Examples:</p>
<p>Start Fuseki with an in-memory, updatable dataset at http://<i>host</i>:3030/ds</p>
<pre><code>docker-compose run --rm --service-ports fuseki --mem /ds
</code></pre>
<p>Load a TDB2 database, and expose, read-only, via docker:</p>
<pre><code>mkdir -p databases/DB2
tdb2.tdbloader --loc databases/DB2 MyData.ttl
# Publish read-only
docker-compose run --rm --name MyServer --service-ports fuseki --loc databases/DB2 /ds
</code></pre>
<p>To allow update on the database, add <code>--update</code>. Updates are persisted.</p>
<pre><code>docker-compose run --rm --name MyServer --service-ports fuseki --update --loc databases/DB2 /ds
</code></pre>
<p>See
<a href="https://jena.apache.org/documentation/fuseki2/fuseki-configuration.html">fuseki-configuration</a>
for more information on command line arguments.</p>
<p>To use <code>docker-compose up</code>, edit the <code>docker-compose.yaml</code> to set the Fuseki
command line arguments appropriately.</p>
<h2 id="layout">Layout</h2>
<p>The default layout in the container is:</p>
<table>
<thead>
<tr>
<th>Path</th>
<th>Use</th>
</tr>
</thead>
<tbody>
<tr>
<td>/opt/java-minimal</td>
<td>A reduced size Java runtime</td>
</tr>
<tr>
<td>/fuseki</td>
<td>The Fuseki installation</td>
</tr>
<tr>
<td>/fuseki/log4j2.properties</td>
<td>Logging configuration</td>
</tr>
<tr>
<td>/fuseki/databases/</td>
<td>Directory for a volume for persistent databases</td>
</tr>
</tbody>
</table>
<h2 id="setting-jvm-arguments">Setting JVM arguments</h2>
<p>Use <code>JAVA_OPTIONS</code>:</p>
<pre><code>docker-compose run --service-ports --rm -e JAVA_OPTIONS=&quot;-Xmx1048m -Xms1048m&quot; --name MyServer fuseki --mem /ds
</code></pre>
<h2 id="docker-commands">Docker Commands</h2>
<p>If you prefer to use <code>docker</code> directly:</p>
<p>Build:</p>
<pre><code>docker build --force-rm --build-arg JENA_VERSION=3.16.0 -t fuseki .
</code></pre>
<p>Run:</p>
<pre><code>docker run -i --rm -p &quot;3030:3030&quot; --name MyServer -t fuseki --mem /ds
</code></pre>
<p>With databases on a bind mount to host filesystem directory:</p>
<pre><code>MNT=&quot;--mount type=bind,src=$PWD/databases,dst=/fuseki/databases&quot;
docker run -i --rm -p &quot;3030:3030&quot; $MNT --name MyServer -t fuseki --update --loc databases/DB2 /ds
</code></pre>
<h2 id="version-specific-notes">Version specific notes:</h2>
<ul>
<li>Versions of Jena up to 3.14.0 use Log4j1 for logging. The docker will build will ignore
the log4j2.properties file</li>
<li>Version 3.15.0: When run, a warning will be emitted.<br>
<code>WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.</code><br>
This can be ignored.</li>
</ul>
</article>
<aside class="text-muted align-self-start mb-3 mb-xl-5 p-0 d-none d-xl-flex flex-column sticky-top">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<ul>
<li><a href="#database">Database</a></li>
<li><a href="#build">Build</a></li>
<li><a href="#test-run">Test Run</a></li>
<li><a href="#layout">Layout</a></li>
<li><a href="#setting-jvm-arguments">Setting JVM arguments</a></li>
<li><a href="#docker-commands">Docker Commands</a></li>
<li><a href="#version-specific-notes">Version specific notes:</a></li>
</ul>
</nav>
</aside>
</main>
</div>
</div>
</div>
<footer class="bd-footer py-4 py-md-5 mt-4 mt-lg-5 bg-body-tertiary">
<div class="container" style="font-size:80%" >
<p>
Copyright &copy; 2011&ndash;2024 The Apache Software Foundation, Licensed under the
<a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
</p>
<p>
Apache Jena, Jena, the Apache Jena project logo, Apache and the Apache feather logos are trademarks of
The Apache Software Foundation.
<br/>
<a href="https://privacy.apache.org/policies/privacy-policy-public.html"
>Apache Software Foundation Privacy Policy</a>.
</p>
</div>
</footer>
<script src="/js/popper.min.js.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>
<script type="text/javascript">
(function() {
'use strict'
const links = document.querySelectorAll(`a[href="${window.location.pathname}"]`)
if (links !== undefined && links !== null) {
for (const link of links) {
link.classList.add('active')
let parentElement = link.parentElement
let count = 0
const levelsLimit = 4
while (['UL', 'LI'].includes(parentElement.tagName) && count <= levelsLimit) {
if (parentElement.tagName === 'LI') {
parentElement.querySelector('a:first-child').classList.add('active')
}
parentElement = parentElement.parentElement
count++
}
}
}
})()
</script>
</body>
</html>