You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

828 lines
418 KiB

3 years ago
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<meta name="description" content="IoT Εισαγωγή στο Cloud">
<meta name="keywords" content="Cloud, swarm">
<meta name="author" content="Apostolos rootApostolos@swarmlab.io">
<title>Swarm Storage !</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="article toc2 toc-right">
<div id="header">
<h1>Swarm Storage !</h1>
<div class="details">
<span id="author" class="author">Apostolos rootApostolos@swarmlab.io</span><br>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Πίνακας περιεχομένων</div>
<ul class="sectlevel1">
<li><a href="#_manage_data">1. Manage data</a>
<ul class="sectlevel2">
<li><a href="#_volumes">1.1. Volumes</a>
<ul class="sectlevel3">
<li><a href="#_use_cases_for_volumes">1.1.1. use cases for volumes</a></li>
</ul>
</li>
<li><a href="#_bind_mounts">1.2. Bind mounts</a>
<ul class="sectlevel3">
<li><a href="#_use_cases_for_bind_mounts">1.2.1. use cases for bind mounts</a></li>
</ul>
</li>
<li><a href="#_tmpfs_mounts">1.3. tmpfs mounts</a>
<ul class="sectlevel3">
<li><a href="#_use_cases_for_tmpfs_mount">1.3.1. use cases for tmpfs mount</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_share_data_among_machines">2. Share data among machines</a>
<ul class="sectlevel2">
<li><a href="#_external_storage_system">2.1. External storage system</a>
<ul class="sectlevel3">
<li><a href="#_minio">2.1.1. MINIO</a></li>
<li><a href="#_ipfs_inter_planetary_file_system">2.1.2. IPFS (Inter-Planetary File System)</a></li>
</ul>
</li>
<li><a href="#_extend_docker">2.2. Extend docker</a>
<ul class="sectlevel3">
<li><a href="#_available_plugins">2.2.1. available plugins</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><br></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_manage_data">1. Manage data</h2>
<div class="sectionbody">
<div class="paragraph">
<p>By default all files created inside a container are stored on a writable container layer. This means that:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The data doesn’t persist when that container no longer exists, and it can be difficult to get the data out of the container if another process needs it.</p>
</li>
<li>
<p>A container’s writable layer is tightly coupled to the host machine where the container is running. You can’t easily move the data somewhere else.</p>
</li>
<li>
<p>Writing into a container’s writable layer requires a storage driver to manage the filesystem. The storage driver provides a union filesystem, using the Linux kernel. This extra abstraction reduces performance as compared to using data volumes, which write directly to the host filesystem.</p>
</li>
</ul>
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">Volumes and bind</div>
<div class="paragraph">
<p>Docker has two options for containers to store files in the host machine, so that the files are persisted even after the container stops:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>volumes,</p>
</li>
<li>
<p>and bind mounts.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>On Linux you can also use a tmpfs mount.</p>
</div>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="paragraph">
<p>No matter which type of mount you choose to use, the data looks the same from within the container. It is exposed as either a directory or an individual file in the container’s filesystem.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Volumes are stored in a part of the host filesystem which is managed by Docker (/var/lib/docker/volumes/ on Linux).</p>
<div class="ulist">
<ul>
<li>
<p>Non-Docker processes should not modify this part of the filesystem.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Bind mounts may be stored anywhere on the host system. They may even be important system files or directories.</p>
<div class="ulist">
<ul>
<li>
<p>Non-Docker processes on the Docker host or a Docker container can modify them at any time.</p>
</li>
</ul>
</div>
</li>
<li>
<p>tmpfs mounts are stored in the host system’s memory only, and are never written to the host system’s filesystem.</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="_volumes">1.1. Volumes</h3>
<div class="paragraph">
<p>Created and managed by Docker. You can create a volume explicitly using the <strong>docker volume create</strong> command, or Docker can create a volume during container or service creation.</p>
</div>
<div class="paragraph">
<p>When you create a volume, it is stored within a directory on the Docker host. When you mount the volume into a container, this directory is what is mounted into the container. This is similar to the way that bind mounts work, except that volumes are managed by Docker and are isolated from the core functionality of the host machine.</p>
</div>
<div class="paragraph">
<p>A given volume <strong>can be mounted into multiple containers</strong> simultaneously. When no running container is using a volume, the volume is still available to Docker and is not removed automatically. You can remove unused volumes using <strong>docker volume prune.</strong></p>
</div>
<div class="paragraph">
<p>Volumes also support the use of volume drivers, which allow you to store your data on remote hosts or cloud providers, among other possibilities.</p>
</div>
<div class="sect3">
<h4 id="_use_cases_for_volumes">1.1.1. use cases for volumes</h4>
<div class="ulist">
<ul>
<li>
<p><strong>Sharing data among multiple running containers.</strong> If you don’t explicitly create it, a volume is created the first time it is mounted into a container. When that container stops or is removed, the volume still exists. Multiple containers can mount the same volume simultaneously, either read-write or read-only. Volumes are only removed when you explicitly remove them.</p>
</li>
<li>
<p>When the Docker host is not guaranteed to have a given directory or file structure. Volumes help you decouple the configuration of the Docker host from the container runtime.</p>
</li>
<li>
<p>When you want to <strong>store your container’s data on a remote host or a cloud provider,</strong> rather than locally.</p>
</li>
<li>
<p>When you need to back up, restore, or migrate data from one Docker host to another, volumes are a better choice. You can stop containers using the volume, then back up the volume’s directory (such as /var/lib/docker/volumes/&lt;volume-name&gt;).</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_bind_mounts">1.2. Bind mounts</h3>
<div class="paragraph">
<p>Bind mounts have limited functionality compared to volumes.</p>
</div>
<div class="paragraph">
<p>When you use a bind mount, a <strong>file or directory on the host machine</strong> is mounted into a container. The file or directory is referenced by its full path on the host machine.</p>
</div>
<div class="paragraph">
<p>The file or directory does not need to exist on the Docker host already. It is <strong>created on demand</strong> if it does not yet exist.</p>
</div>
<div class="paragraph">
<p><strong>Bind mounts are very performant, but they rely on the host machine’s filesystem</strong> having a specific directory structure available.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Bind mounts allow access to sensitive files</div>
<div class="paragraph">
<p>One side effect of using bind mounts, for better or for worse, is that <strong>you can change the host filesystem via processes running in a container,</strong> including creating, modifying, or deleting important system files or directories.
This is a powerful ability which can have security implications, including impacting non-Docker processes on the host system</p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect3">
<h4 id="_use_cases_for_bind_mounts">1.2.1. use cases for bind mounts</h4>
<div class="ulist">
<ul>
<li>
<p><strong>Sharing configuration files</strong> from the host machine to containers. This is how Docker provides DNS resolution to containers by default, by mounting /etc/resolv.conf from the host machine into each container.</p>
</li>
<li>
<p><strong>Sharing source code</strong> or build artifacts between a development environment on the Docker host and a container. For instance, you may mount a Project target/ directory into a container, and each time you build the Project on the Docker host, the container gets access to the rebuilt artifacts.</p>
</li>
<li>
<p>When the file or directory structure of the Docker host is guaranteed to be consistent with the bind mounts the containers require.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_tmpfs_mounts">1.3. tmpfs mounts</h3>
<div class="paragraph">
<p>A tmpfs mount is not persisted on disk, either on the Docker host or within a container. It can be used by a container during the lifetime of the container, to store non-persistent state or sensitive information. For instance, internally, swarm services use tmpfs mounts to mount secrets into a service’s containers.</p>
</div>
<div class="sect3">
<h4 id="_use_cases_for_tmpfs_mount">1.3.1. use cases for tmpfs mount</h4>
<div class="ulist">
<ul>
<li>
<p>tmpfs mounts are best used for cases when <strong>you do not want the data to persist</strong> either on the host machine or within the container. This may be <strong>for security reasons or to protect the performance</strong> of the container when your application needs to write a large volume of non-persistent state data.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">keep the following in mind</div>
<div class="ulist">
<ul>
<li>
<p>If you mount an <strong>empty volume</strong> into a directory in the container in which files or directories exist, these files or directories are propagated (copied) into the volume. Similarly, if you start a container and specify a volume which does not already exist, an empty volume is created for you. This is a good way to pre-populate data that another container needs.</p>
</li>
<li>
<p>If you mount a <strong>bind mount or non-empty volume</strong> into a directory in the container in which some files or directories exist, these files or directories are obscured by the mount, just as if you saved files into /mnt on a Linux host and then mounted a USB drive into /mnt. The contents of /mnt would be obscured by the contents of the USB drive until the USB drive were unmounted. The obscured files are not removed or altered, but are not accessible while the bind mount or volume is mounted.</p>
</li>
</ul>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_share_data_among_machines">2. Share data among machines</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When building fault-tolerant applications, you need to configure multiple replicas of the same service to have access to the same files.</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzQwcHgiIGhlaWdodD0iMjIwcHgiIHZpZXdCb3g9IjAgMCA3NDAgMjIwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkZGRkZGOyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQ5LjEgKDUxMTQ3KSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT52b2x1bWVzLXNoYXJlZC1zdG9yYWdlPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeD0iNCIgY3k9IjQiIHI9IjQiPjwvY2lyY2xlPgogICAgICAgIDxjaXJjbGUgaWQ9InBhdGgtMiIgY3g9IjQiIGN5PSI0IiByPSI0Ij48L2NpcmNsZT4KICAgICAgICA8Y2lyY2xlIGlkPSJwYXRoLTMiIGN4PSI0IiBjeT0iNCIgcj0iNCI+PC9jaXJjbGU+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0idm9sdW1lcy1zaGFyZWQtc3RvcmFnZSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Imdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTQuMDAwMDAwLCA5LjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0ib2JqZWN0LXN0b3JhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0LjAwMDAwMCwgMTYzLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9Im5vZGUtYm9yZGVyIiBmaWxsPSIjNDQ1RDZFIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzY1IiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPHRleHQgZm9udC1mYW1pbHk9Ik9wZW5TYW5zLCBPcGVuIFNhbnMiIGZvbnQtc2l6ZT0iMTAiIGZvbnQtd2VpZ2h0PSJub3JtYWwiIGZpbGw9IiNGN0Y4RjkiPgogICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PSIxMzkuMTkxODk1IiB5PSIyNCI+c2hhcmVkIGZpbGUgc3RvcmFnZTwvdHNwYW4+CiAgICAgICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPGcgaWQ9ImR0ciI+CiAgICAgICAgICAgICAgICA8dGV4dCBpZD0iRGF0YWNlbnRlciIgZm9udC1mYW1pbHk9Ik9wZW5TYW5zLVNlbWlib2xkLCBPcGVuIFNhbnMiIGZvbnQtc2l6ZT0iMTAiIGZvbnQtd2VpZ2h0PSI1MDAiIGZpbGw9IiM4Mjk0OUUiPgogICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PSI3LjAyNSIgeT0iMTM0LjAwOTUyNCI+RGF0YWNlbnRlcjwvdHNwYW4+CiAgICAgICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICAgICAgICA8ZyBpZD0iYXJyb3dzLWNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwNC4wMDAwMDAsIDExOS4wMDAwMDApIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iYXJyb3ctY29weS0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTguNTAwMDAwLCAyNC41MDAwMDApIHJvdGF0ZSgtOTAuMDAwMDAwKSB0cmFuc2xhdGUoLTIxOC41MDAwMDAsIC0yNC41MDAwMDApIHRyYW5zbGF0ZSgxOTQuNTAwMDAwLCAyMC41MDAwMDApIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIsNCBMNDcuNTAyNzQ3Miw0IiBpZD0iTGluZSIgc3Ryb2tlPSIjNDQ1RDZFIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iT3ZhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9IiM0NDVENkUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgeGxpbms6aHJlZj0iI3BhdGgtMSI+PC91c2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIHN0cm9rZT0iI0Y3RjhGOSIgc3Ryb2tlLXdpZHRoPSIyIiBjeD0iNCIgY3k9IjQiIHI9IjUiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDxnIGlkPSJhcnJvdy1jb3B5LTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMS41MDAwMDAsIDI0LjUwMDAwMCkgcm90YXRlKC05MC4wMDAwMDApIHRyYW5zbGF0ZSgtMTExLjUwMDAwMCwgLTI0LjUwMDAwMCkgdHJhbnNsYXRlKDg3LjUwMDAwMCwgMjAuNTAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDQgTDQ3LjYzNDQxNjgsNCIgaWQ9IkxpbmUiIHN0cm9rZT0iIzQ0NUQ2RSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Ik92YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSIjNDQ1RDZFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHhsaW5rOmhyZWY9IiNwYXRoLTIiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBzdHJva2U9IiNGN0Y4RjkiIHN0cm9rZS13aWR0aD0iMiIgY3g9IjQiIGN5PSI0IiByPSI1Ij48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iYXJyb3ctY29weS00IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjUwMDAwMCwgMjQuNTAwMDAwKSByb3RhdGUoLTkwLjAwMDAwMCkgdHJhbnNsYXRlKC00LjUwMDAwMCwgLTI0LjUwMDAwMCkgdHJhbnNsYXRlKC0xOS41MDAwMDAsIDIwLjUwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMiw0IEw0Ny41MDI3NDcyLDQiIGlkPSJMaW5lIiBzdHJva2U9IiM0NDVENkUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5k
</div>
<div class="paragraph">
<p>There are several ways to achieve this when developing your applications.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>One is to <strong>add logic to your application</strong> to store files on a cloud object storage system like <strong>Amazon S3.</strong></p>
</li>
<li>
<p>Another is to <strong>create volumes</strong> with a driver that supports writing files to an <strong>external storage</strong> system like <strong>NFS</strong> or <strong>Amazon S3.</strong></p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Volume drivers</div>
<div class="paragraph">
<p>Volume drivers allow you to abstract the underlying storage system from the application logic.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="_external_storage_system">2.1. External storage system</h3>
<div class="paragraph">
<p>There are a lot of different systems to use.</p>
</div>
<div class="paragraph">
<p>We are going to look at the two most poppular systems (they both support any combination of the aforementioned ways).</p>
</div>
<div class="paragraph">
<p>A more detailed list of systems can be found at the bottom of the page.</p>
</div>
<div class="sect3">
<h4 id="_minio">2.1.1. MINIO</h4>
<div class="paragraph">
<p><a href="https://en.wikipedia.org/wiki/MinIO" target="_blank" rel="noopener">High Performance Object Storage,</a></p>
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">open source</div>
<div class="paragraph">
<p>MinIO is 100% <strong>open source under the Apache V2 license.</strong> This means that MinIO’s customers are free from lock in, free to inspect, free to innovate, free to modify and free to redistribute.</p>
</div>
</div>
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">Scaling</div>
<div class="paragraph">
<p>At MinIO, scaling starts with a single cluster which can be federated with other MinIO clusters to create a global namespace, spanning multiple data centers if needed.</p>
</div>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzk5IiBoZWlnaHQ9IjQyOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgeDE9Ii0yLjYzMSUiIHkxPSI1MCUiIHgyPSI5Ny4zNjklIiB5Mj0iNTAlIiBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iI0M2MkQ0OCIgb2Zmc2V0PSIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEMjRGNTkiIG9mZnNldD0iODYlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNTAlIiB4Mj0iMTAwJSIgeTI9IjUwJSIgaWQ9ImIiPjxzdG9wIHN0b3AtY29sb3I9IiNDNjJENDgiIG9mZnNldD0iMiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDI0RjU5IiBvZmZzZXQ9Ijg2JSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEwMCUiIHkyPSI1MCUiIGlkPSJjIj48c3RvcCBzdG9wLWNvbG9yPSIjQzYyRDQ4IiBvZmZzZXQ9IjIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0QyNEY1OSIgb2Zmc2V0PSI4NiUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI1MCUiIHgyPSIxMDAlIiB5Mj0iNTAlIiBpZD0iZCI+PHN0b3Agc3RvcC1jb2xvcj0iI0M2MkQ0OCIgb2Zmc2V0PSIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEMjRGNTkiIG9mZnNldD0iODYlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9Ii0xMzQuNDgzJSIgeTE9IjQ4LjIyMiUiIHgyPSIxMTMuNTUyJSIgeTI9IjUwLjYxMiUiIGlkPSJlIj48c3RvcCBzdG9wLWNvbG9yPSIjMzU1NDYxIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM2NTc2NCIgb2Zmc2V0PSIyNy4wMiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjM0I2MDZGIiBvZmZzZXQ9IjUwLjYzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0MjZGODEiIG9mZnNldD0iNzIuOTclIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzREODM5QSIgb2Zmc2V0PSI5NC40MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNTA4QUEyIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCB4MT0iMTEuMTAzJSIgeTE9IjQ5LjU2NCUiIHgyPSIyOTkuNTg0JSIgeTI9IjUyLjc5NyUiIGlkPSJmIj48c3RvcCBzdG9wLWNvbG9yPSIjMzU1NDYxIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM3NTc2NSIgb2Zmc2V0PSIyNi4yJSIvPjxzdG9wIHN0b3AtY29sb3I9IiMzQjYwNzAiIG9mZnNldD0iNTAuMiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNDM3MDgyIiBvZmZzZXQ9IjczLjM0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0RTg1OUMiIG9mZnNldD0iOTUuODMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzUwOEFBMiIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgb3BhY2l0eT0iLjA1IiBkPSJNNi43NTggNi44NTRoMzIxLjI3OXYzMTcuOTkxSDYuNzU4em0zNjAgMGgxOTYuNTN2MzE3Ljk5MWgtMTk2LjUzem0yMzUuMjUxIDBoMTk2LjUzdjMxNy45OTFoLTE5Ni41M3oiLz48cGF0aCBmaWxsPSJ1cmwoI2EpIiBkPSJNNDU4LjQ0NyAzMjAuMzY1aDIuMzc0djYzLjU2MmgtMi4zNzR6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0xKSIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik00NzkuMDg3IDM4My45MjdoLTIuMzc1di0zNy40NDNINjkzLjd2LTI2LjExOWgyLjM3NHYyOC40OTNINDc5LjA4N3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEpIi8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTQ0Mi41NTcgMzgzLjkyN2gtMi4zNzR2LTM1LjA2OUgxNjAuNzN2LTI4LjQ5M2gyLjM3NHYyNi4xMTloMjc5LjQ1MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEpIi8+PHBhdGggZmlsbD0idXJsKCNkKSIgZD0iTTI0Ni41NzUgNDA1LjQ3OWgxMTQuNzAzdjIuMzc0SDI0Ni41NzV6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0xKSIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xLjI3OSAxLjM3NGgzMjEuMjc5djMxNy45OTFIMS4yNzl6Ii8+PHBhdGggZD0iTTMyMy40NyAzMjAuMjc5SDMyMHYtMS44MjdoMS44MjZ2LTEuNjQ0aDEuNjQ0em0tOC43NjcgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc2IDBoLTUuMjk3di0xLjgyN2g1LjI5N3YxLjgyN3ptLTEwLjc3NiAwaC01LjI5N3YtMS44MjdoNS4yOTd2MS44Mjd6bS0xMC41OTQgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc2IDBoLTUuMjk3di0xLjgyN2g1LjI5N3YxLjgyN3ptLTEwLjc3NiAwaC01LjI5N3YtMS44MjdoNS4yOTd2MS44Mjd6bS0xMC41OTQgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc2IDBoLTUuMjk3di0xLjgyN2g1LjI5N3YxLjgyN3ptLTEwLjc3NyAwaC01LjI5NnYtMS44MjdoNS4yOTZ2MS44Mjd6bS0xMC41OTMgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc2IDBoLTUuMjk3di0xLjgyN2g1LjI5N3YxLjgyN3ptLTEwLjc3NyAwaC01LjI5NnYtMS44MjdoNS4yOTZ2MS44Mjd6bS0xMC41OTMgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc3IDBoLTUuMjk2di0xLjgyN2g1LjI5NnYxLjgyN3ptLTEwLjc3NiAwaC01LjI5N3YtMS44MjdoNS4yOTd2MS44Mjd6bS0xMC41OTMgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc3IDBIMTM3Ljl2LTEuODI3aDUuMjk2djEuODI3em0tMTAuNzc2IDBoLTUuMjk3di0xLjgyN2g1LjI5N3YxLjgyN3ptLTEwLjU5NCAwaC01LjI5NnYtMS44MjdoNS4yOTZ2MS44Mjd6bS0xMC43NzYgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc2IDBoLTUuMjk3di0xLjgyN2g1LjI5N3YxLjgyN3ptLTEwLjU5NCAwaC01LjI5NnYtMS44MjdoNS4yOTZ2MS44Mjd6bS0xMC43NzYgMGgtNS4yOTd2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNzc2IDBINjIuODN2LTEuODI3aDUuMjk3djEuODI3em0tMTAuNTk0IDBoLTUuMjk3di0xLjgyN2g1LjI5
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">S3 compatibility</div>
<div class="paragraph">
<p>Amazon’s S3 API is the defacto standard in the object storage world. MinIO is the defacto standard for S3 compatibility and was one of the first to adopt the API and the first to add support for S3 Select.</p>
</div>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjE4NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgeDE9IjM3LjM5NSUiIHkxPSI1MC4xMDYlIiB4Mj0iNjIuNjA1JSIgeTI9IjQ5Ljg5NCUiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjQzYyRDQ4IiBvZmZzZXQ9IjIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0QyNEY1OSIgb2Zmc2V0PSI4NiUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCB4MT0iMzcuMzExJSIgeTE9IjUwLjE5MiUiIHgyPSI2Mi42ODklIiB5Mj0iNDkuODA4JSIgaWQ9ImIiPjxzdG9wIHN0b3AtY29sb3I9IiNDNjJENDgiIG9mZnNldD0iMiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDI0RjU5IiBvZmZzZXQ9Ijg2JSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHgxPSIzNy4zNzMlIiB5MT0iNTAuMTI4JSIgeDI9IjYyLjYyNyUiIHkyPSI0OS44NzIlIiBpZD0iYyI+PHN0b3Agc3RvcC1jb2xvcj0iI0M2MkQ0OCIgb2Zmc2V0PSIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEMjRGNTkiIG9mZnNldD0iODYlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjUwJSIgeTE9IjEwMCUiIHgyPSI1MCUiIHkyPSIwJSIgaWQ9ImQiPjxzdG9wIHN0b3AtY29sb3I9IiMzNTU0NjEiIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjMzg1QjY5IiBvZmZzZXQ9IjUuNzA0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0MzZGODIiIG9mZnNldD0iMjcuMDU1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0QTdFOTQiIG9mZnNldD0iNDkuMzI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0Rjg3OUYiIG9mZnNldD0iNzIuOTA1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM1MDhBQTIiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEwMCUiIHkyPSI1MCUiIGlkPSJlIj48c3RvcCBzdG9wLWNvbG9yPSIjMzU1NDYxIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM4NUI2OSIgb2Zmc2V0PSI1LjcwNCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNDM2RjgyIiBvZmZzZXQ9IjI3LjA1NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNEE3RTk0IiBvZmZzZXQ9IjQ5LjMyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNEY4NzlGIiBvZmZzZXQ9IjcyLjkwNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNTA4QUEyIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI1MCUiIHgyPSIxMDAlIiB5Mj0iNTAlIiBpZD0iZiI+PHN0b3Agc3RvcC1jb2xvcj0iIzM1NTQ2MSIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiMzODVCNjkiIG9mZnNldD0iNS43MDQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQzNkY4MiIgb2Zmc2V0PSIyNy4wNTUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzRBN0U5NCIgb2Zmc2V0PSI0OS4zMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzRGODc5RiIgb2Zmc2V0PSI3Mi45MDUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzUwOEFBMiIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iNTAlIiB4Mj0iMTAwJSIgeTI9IjUwJSIgaWQ9ImciPjxzdG9wIHN0b3AtY29sb3I9IiMzNTU0NjEiIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjMzg1QjY5IiBvZmZzZXQ9IjUuNzA0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0MzZGODIiIG9mZnNldD0iMjcuMDU1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0QTdFOTQiIG9mZnNldD0iNDkuMzI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0Rjg3OUYiIG9mZnNldD0iNzIuOTA1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM1MDhBQTIiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEwMCUiIHkyPSI1MCUiIGlkPSJoIj48c3RvcCBzdG9wLWNvbG9yPSIjMzU1NDYxIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM4NUI2OSIgb2Zmc2V0PSI1LjcwNCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNDM2RjgyIiBvZmZzZXQ9IjI3LjA1NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNEE3RTk0IiBvZmZzZXQ9IjQ5LjMyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNEY4NzlGIiBvZmZzZXQ9IjcyLjkwNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjNTA4QUEyIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSI1MCUiIHgyPSIxMDAlIiB5Mj0iNTAlIiBpZD0iaSI+PHN0b3Agc3RvcC1jb2xvcj0iIzM1NTQ2MSIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiMzODVCNjkiIG9mZnNldD0iNS43MDQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzQzNkY4MiIgb2Zmc2V0PSIyNy4wNTUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzRBN0U5NCIgb2Zmc2V0PSI0OS4zMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzRGODc5RiIgb2Zmc2V0PSI3Mi45MDUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzUwOEFBMiIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjUwJSIgeTE9IjEwMCUiIHgyPSI1MCUiIHkyPSIwJSIgaWQ9ImoiPjxzdG9wIHN0b3AtY29sb3I9IiMzNTU0NjEiIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjMzg1QjY5IiBvZmZzZXQ9IjUuNzA0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0MzZGODIiIG9mZnNldD0iMjcuMDU1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0QTdFOTQiIG9mZnNldD0iNDkuMzI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM0Rjg3OUYiIG9mZnNldD0iNzIuOTA1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM1MDhBQTIiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEwMCUiIHkyPSI1MCUiIGlkPSJrIj48c3RvcCBzdG9wLWNvbG9yPSIj
</div>
</div>
<div class="sect3">
<h4 id="_ipfs_inter_planetary_file_system">2.1.2. IPFS (Inter-Planetary File System)</h4>
<div class="paragraph">
<p>A peer-to-peer hypermedia <a href="https://en.wikipedia.org/wiki/InterPlanetary_File_System" target="_blank" rel="noopener">protocol,</a> designed to make the web faster, safer, and more open.</p>
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">distributed system</div>
<div class="paragraph">
<p>IPFS is a distributed system for storing and accessing files, websites, applications, and data.</p>
</div>
</div>
</div>
<div class="sidebarblock">
<div class="content">
<div class="title">IPFS Cluster</div>
<div class="paragraph">
<p>Automated data availability and redundancy on IPFS</p>
</div>
<div class="paragraph">
<p>IPFS Cluster provides data orchestration across a swarm of IPFS daemons by allocating, replicating and tracking a global pinset distributed among multiple peers.</p>
</div>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACmEAAAq+CAYAAABjsWaTAAAACXBIWXMAACE3AAAhNwEzWJ96AAAgAElEQVR4Aezdz2ts6Xng8dftJvG0cXMbG5s4brcUMiarat1NQVYjka1D7t1429LmhayulH9AEsz+SqtAbaTe9uZqYLaDlE0CZ3OVF2bjGZDaaWICNn3Hxj22mWaGV3nUI5eq6pTu1Y9TVZ8PNO3Wj9I5563amC/PkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG7J1zxIAAAAAOA+5aYspZSepZRWUkr1fz9KKZ2mlM5TSh8P+r0TBwIAAAAAzAIRJgAAAABwL3JTamx5kFJ60vL3apC5Mej3Tp0MAAAAANBlIkwAAAAA4M7lptSpl8cx9XJaNcQ8dDoAAAAAQFeJMAEAAACAOxUTMM9uGGBeWrOeHAAAAADoqrecDAAAAABwxw4mBZjvfP3rk/76QUScAAAAAACd87YjAQAAAADuSqwhfzL88u+/8430kx9+P/3oW9+8+O9f/u736ZN/+Xk6/fxXwz+6lFJaTyntOSQAAAAAoGtMwgQAAAAA7tJHw69dA8y/+4s/+yrArL79x3+U/vbPP0h/+Z33Rl3KtdcAAAAAAOgCESYAAAAAcJdWhl+7TsAct4L8Jz/8k1Hfu/YaAAAAAABdIMIEAAAAAO7V1QmYw2qA+YN3vuFAAAAAAICZIMIEAAAAAAAAAAAAeA0iTAAAAADgXv30178Z++e++PLL9NkXv7329dyUg9yUR04KAAAAAOgSESYAAAAAcOtyU5ZqOJlSWh1+7U9+9q8XseUon/zs5+O+t55SOstN2XFaAAAAAEBXfM1JAAAAAAC3JaZVbqaUtie95PvvfCP9+PvfSyvvvXvx3//yxW/Tf/3Xf0unn/9qmis5TyltDfq9IwcHAAAAADwkESYAAAAAcCtyU+q0yucppftaG36SUtod9HsnThAAAAAAeAgiTAAAAADg
</div>
</div>
</div>
<div class="sect2">
<h3 id="_extend_docker">2.2. Extend docker</h3>
<div class="paragraph">
<p>You can extend the capabilities of the Docker Engine by loading third-party plugins.</p>
</div>
<div class="paragraph">
<p>Docker supports <strong>authorization,</strong> <strong>volume</strong> and <strong>network</strong> driver plugins</p>
</div>
<div class="sect3">
<h4 id="_available_plugins">2.2.1. available plugins</h4>
<div class="paragraph">
<p><a href="https://hub.docker.com/search?q=&amp;type=plugin" class="bare" target="_blank" rel="noopener">https://hub.docker.com/search?q=&amp;type=plugin</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2021-04-05 18:27:35 UTC
</div>
</div>
</body>
</html>