Browse code

add overlay networking guide

Signed-off-by: Charles Smith <charles.smith@docker.com>

Charles Smith authored on 2016/08/02 06:17:21
Showing 7 changed files
1 1
new file mode 100644
2 2
Binary files /dev/null and b/docs/swarm/images/service-vip.png differ
3 3
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="872.0888761605971" height="616.5246403801868"><style xmlns="http://www.w3.org/1999/xhtml"></style><defs/><g transform="translate(0,0)"><g><rect fill="#ffffff" stroke="none" x="0" y="0" width="872.0888761605971" height="616.5246403801868"/></g><g transform="translate(0,0) matrix(1,0,0,1,30.01527419063106,360)"><g><g transform="translate(0,0) scale(2.227454370699169,1.2993483829078496)"><g><path fill="#ccf4f4" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.4489429786550972,0.7696165348373089)"><path fill="none" stroke="none" d="M 0 0 L 222.7454370699169 0 Q 222.7454370699169 0 222.7454370699169 0 L 222.7454370699169 129.93483829078497 Q 222.7454370699169 129.93483829078497 222.7454370699169 129.93483829078497 L 0 129.93483829078497 Q 0 129.93483829078497 0 129.93483829078497 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#00a2a2" d="M 0 0 M 0 0 L 222.7454370699169 0 Q 222.7454370699169 0 222.7454370699169 0 L 222.7454370699169 129.93483829078497 Q 222.7454370699169 129.93483829078497 222.7454370699169 129.93483829078497 L 0 129.93483829078497 Q 0 129.93483829078497 0 129.93483829078497 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,42,415)"><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="199" height="20" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="199" height="20" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="75" y="-1" width="50" height="21" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="75" y="-1" width="50" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="75" y="15">node1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,625.3933561283152,359.9125925797616)"><g><g transform="translate(0,0) scale(2.227454370699169,1.2993483829078496)"><g><path fill="#ccf4f4" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.4489429786550972,0.7696165348373089)"><path fill="none" stroke="none" d="M 0 0 L 222.7454370699169 0 Q 222.7454370699169 0 222.7454370699169 0 L 222.7454370699169 129.93483829078497 Q 222.7454370699169 129.93483829078497 222.7454370699169 129.93483829078497 L 0 129.93483829078497 Q 0 129.93483829078497 0 129.93483829078497 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#00a2a2" d="M 0 0 M 0 0 L 222.7454370699169 0 Q 222.7454370699169 0 222.7454370699169 0 L 222.7454370699169 129.93483829078497 Q 222.7454370699169 129.93483829078497 222.7454370699169 129.93483829078497 L 0 129.93483829078497 Q 0 129.93483829078497 0 129.93483829078497 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,637,415)"><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="199" height="20" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="199" height="20" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="75" y="-1" width="50" height="21" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="75" y="-1" width="50" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="75" y="15">node3</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,326,359.7245006145894)"><g><g transform="translate(0,0) scale(2.227454370699169,1.2993483829078496)"><g><path fill="#ccf4f4" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.4489429786550972,0.7696165348373089)"><path fill="none" stroke="none" d="M 0 0 L 222.7454370699169 0 Q 222.7454370699169 0 222.7454370699169 0 L 222.7454370699169 129.93483829078497 Q 222.7454370699169 129.93483829078497 222.7454370699169 129.93483829078497 L 0 129.93483829078497 Q 0 129.93483829078497 0 129.93483829078497 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#00a2a2" d="M 0 0 M 0 0 L 222.7454370699169 0 Q 222.7454370699169 0 222.7454370699169 0 L 222.7454370699169 129.93483829078497 Q 222.7454370699169 129.93483829078497 222.7454370699169 129.93483829078497 L 0 129.93483829078497 Q 0 129.93483829078497 0 129.93483829078497 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,338,415)"><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="199" height="20" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="199" height="20" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="75" y="-1" width="50" height="21" fill-opacity="0"/></g></g><g transform="translate(150,-2) matrix(1,0,0,1,0,0) translate(-150,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="75" y="-1" width="50" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="75" y="15">node2</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,325.9187498337799,270)"><g><g transform="translate(0,0) scale(0.9095438680354939,0.7610469099888831)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(1.099452192624728,1.313979449722235)"><path fill="#ffc400" stroke="none" d="M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" opacity="0.5"/><path fill="none" stroke="#ffc400" d="M 10 0 M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2" opacity="0.5"/></g></g></g></g></g><g transform="matrix(1,0,0,1,336,292)"><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="72" height="32" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="72" height="16" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="6" y="0" width="61" height="15" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="6" y="0" width="61" height="15" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="6" y="13">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="25" y="13">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="29" y="13">web</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="55" y="13">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="58" y="13">2</text></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="72" height="16" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="16" width="50" height="15" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="16" width="50" height="15" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="11" y="29">10</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="26" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="30" y="29">0</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="38" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="42" y="29">9</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="50" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="54" y="29">4</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,29.852953890121896,269.13194106831963)"><g><g transform="translate(0,0) scale(0.9095438680354939,0.7610469099888831)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(1.099452192624728,1.313979449722235)"><path fill="#ffc400" stroke="none" d="M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" opacity="0.5"/><path fill="none" stroke="#ffc400" d="M 10 0 M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2" opacity="0.5"/></g></g></g></g></g><g transform="matrix(1,0,0,1,40,291)"><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="72" height="32" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="72" height="16" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="6" y="0" width="61" height="15" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="6" y="0" width="61" height="15" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="6" y="13">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="25" y="13">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="29" y="13">web</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="55" y="13">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="58" y="13">1</text></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="72" height="16" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="16" width="50" height="15" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="16" width="50" height="15" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="11" y="29">10</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="26" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="30" y="29">0</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="38" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="42" y="29">9</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="50" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="54" y="29">3</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,625.6969980521498,270.3694165382551)"><g><g transform="translate(0,0) scale(0.9095438680354939,0.7610469099888831)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(1.099452192624728,1.313979449722235)"><path fill="#ffc400" stroke="none" d="M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" opacity="0.5"/><path fill="none" stroke="#ffc400" d="M 10 0 M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2" opacity="0.5"/></g></g></g></g></g><g transform="matrix(1,0,0,1,636,292)"><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="72" height="32" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="72" height="16" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="6" y="0" width="61" height="15" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="6" y="0" width="61" height="15" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="6" y="13">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="25" y="13">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="29" y="13">web</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="55" y="13">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="58" y="13">3</text></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="72" height="16" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="16" width="50" height="15" fill-opacity="0"/></g></g><g transform="translate(34,48) matrix(1,0,0,1,0,0) translate(-34,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="16" width="50" height="15" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="11" y="29">10</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="26" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="30" y="29">0</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="38" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="42" y="29">9</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="50" y="29">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="normal" text-decoration="" line-height="16.5px" x="54" y="29">5</text></g></g><g transform="matrix(1,0,0,1,25.352953890121906,274.92248898178724)"><g transform="translate(0,0)"><g transform="translate(-48.41504532240131,-275.1139954723511) translate(23.062091432279406,0.19150649056388147) matrix(1,0,0,1,0,0)"><g><path fill="none" stroke="#254356" d="M 29.852953890121906 279.42248898178724 L 716.6513848556991 280.65996445172266" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g><g transform="translate(0,0) matrix(1,0,0,1,30,520.4199493812985)"><g><g transform="translate(0,0) scale(0.9095438680354939,0.7610469099888831)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(1.099452192624728,1.313979449722235)"><path fill="#ffc400" stroke="none" d="M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" opacity="0.5"/><path fill="none" stroke="#ffc400" d="M 10 0 M 10 0 L 80.9543868035494 0 Q 90.9543868035494 0 90.9543868035494 10 L 90.9543868035494 66.10469099888832 Q 90.9543868035494 76.10469099888832 80.9543868035494 76.10469099888832 L 10 76.10469099888832 Q 0 76.10469099888832 0 66.10469099888832 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2" opacity="0.5"/></g></g></g></g></g><g transform="matrix(1,0,0,1,129,539)"><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="200" height="40" fill-opacity="0"/></g></g><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="200" height="20" fill-opacity="0"/></g></g><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="69" y="-1" width="63" height="21" fill-opacity="0"/></g></g><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="69" y="-1" width="63" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="69" y="15">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="93" y="15">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="98" y="15">web</text></g><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="20" width="200" height="20" fill-opacity="0"/></g></g><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="19" width="178" height="21" fill-opacity="0"/></g></g><g transform="translate(160,56) matrix(1,0,0,1,0,0) translate(-160,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="11" y="19" width="178" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="11" y="35">3</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="26" y="35">replica</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="84" y="35">nginx</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="132" y="35">service</text></g></g><g transform="matrix(1,0,0,1,70.3301472918966,224.20369466145834)"><g transform="translate(0,0)"><g transform="translate(-79.99998474121094,-257.15277099609375) translate(9.669837449314343,32.94907633463541) matrix(1,0,0,1,0,0)"><g><path fill="none" stroke="#254356" d="M 75.3301472918966 269.13194106831963 M 75.3301472918966 269.13194106831963 L 78.30449045482098 268.7404276596541 M 78.30449045482098 268.7404276596541 M 81.27883361774536 268.3489142509885 L 84.25317678066975 267.95740084232295 M 84.25317678066975 267.95740084232295 M 87.22751994359413 267.5658874336574 L 90.20186310651852 267.17437402499183 M 90.20186310651852 267.17437402499183 M 93.1762062694429 266.7828606163263 L 96.15054943236728 266.3913472076607 M 96.15054943236728 266.3913472076607 M 99.12489259529167 265.99983379899516 L 102.09923575821605 265.6083203903296 M 102.09923575821605 265.6083203903296 M 105.07357892114044 265.21680698166404 L 108.04792208406482 264.8252935729985 M 108.04792208406482 264.8252935729985 M 111.0222652469892 264.4337801643329 L 113.99660840991359 264.04226675566736 M 113.99660840991359 264.04226675566736 M 116.97095157283798 263.6507533470018 L 119.94529473576236 263.25923993833624 M 119.94529473576236 263.25923993833624 M 122.91963789868674 262.8677265296707 L 125.89398106161113 262.4762131210051 M 125.89398106161113 262.4762131210051 M 128.8683242245355 262.08469971233956 L 131.8426673874599 261.693186303674 M 131.8426673874599 261.693186303674 M 134.81701055038428 261.30167289500844 L 137.79135371330867 260.9101594863429 M 137.79135371330867 260.9101594863429 M 140.76569687623305 260.5186460776773 L 143.74004003915744 260.12713266901176 M 143.74004003915744 260.12713266901176 M 146.71438320208182 259.7356192603462 L 149.6887263650062 259.34410585168064 M 149.6887263650062 259.34410585168064 M 152.6630695279306 258.9525924430151 L 155.63741269085497 258.5610790343495 M 155.63741269085497 258.5610790343495 M 158.61175585377936 258.16956562568396 L 161.58609901670374 257.7780522170184 M 161.58609901670374 257.7780522170184 M 164.56044217962813 257.38653880835284 L 167.5347853425525 256.9950253996873 M 167.5347853425525 256.9950253996873 M 170.5091285054769 256.6035119910217 L 173.48347166840128 256.2119985823561 M 173.48347166840128 256.2119985823561 M 176.45781483132566 255.8204851736905 L 179.43215799425005 255.42897176502493 M 179.43215799425005 255.42897176502493 M 182.40650115717443 255.03745835635934 L 185.38084432009882 254.64594494769375 M 185.38084432009882 254.64594494769375 M 188.3551874830232 254.25443153902816 L 191.32953064594759 253.86291813036257 M 191.32953064594759 253.86291813036257 M 194.30387380887197 253.47140472169698 L 197.27821697179635 253.0798913130314 M 197.27821697179635 253.0798913130314 M 200.25256013472074 252.6883779043658 L 203.22690329764512 252.29686449570022 M 203.22690329764512 252.29686449570022 M 206.2012464605695 251.90535108703463 L 209.1755896234939 251.51383767836904 M 209.1755896234939 251.51383767836904 M 212.14993278641828 251.12232426970346 L 215.12427594934266 250.73081086103787 M 215.12427594934266 250.73081086103787 M 218.09861911226704 250.33929745237228 L 221.07296227519143 249.9477840437067 M 221.07296227519143 249.9477840437067 M 224.0473054381158 249.5562706350411 L 227.0216486010402 249.1647572263755 M 227.0216486010402 249.1647572263755 M 229.99599176396458 248.77324381770993 L 232.97033492688897 248.38173040904434 M 232.97033492688897 248.38173040904434 M 235.94467808981335 247.99021700037875 L 238.91902125273774 247.59870359171316 M 238.91902125273774 247.59870359171316 M 241.89336441566212 247.20719018304757 L 244.8677075785865 246.81567677438198 M 244.8677075785865 246.81567677438198 M 247.8420507415109 246.4241633657164 L 250.81639390443527 246.0326499570508 M 250.81639390443527 246.0326499570508 M 253.79073706735966 245.64113654838522 L 256.76508023028407 245.24962313971963 M 256.76508023028407 245.24962313971963 M 259.7394233932085 244.85810973105404 L 262.7137665561329 244.46659632238845 M 262.7137665561329 244.46659632238845 M 265.6881097190573 244.07508291372287 L 268.6624528819817 243.68356950505728 M 268.6624528819817 243.68356950505728 M 271.63679604490613 243.2920560963917 L 274.61113920783055 242.9005426877261 M 274.61113920783055 242.9005426877261 M 277.58548237075496 242.5090292790605 L 280.5598255336794 242.11751587039493 M 280.5598255336794 242.11751587039493 M 283.5341686966038 241.72600246172934 L 286.5085118595282 241.33448905306375 M 286.5085118595282 241.33448905306375 M 289.4828550224526 240.94297564439816 L 292.457198185377 240.55146223573257 M 292.457198185377 240.55146223573257 M 295.43154134830144 240.15994882706698 L 298.40588451122585 239.7684354184014 M 298.40588451122585 239.7684354184014 M 301.38022767415026 239.3769220097358 L 304.3545708370747 238.98540860107022 M 304.3545708370747 238.98540860107022 M 307.3289139999991 238.59389519240463 L 310.3032571629235 238.20238178373904 M 310.3032571629235 238.20238178373904 M 313.2776003258479 237.81086837507345 L 316.2519434887723 237.41935496640787 M 316.2519434887723 237.41935496640787 M 319.22628665169674 237.02784155774228 L 322.20062981462115 236.6363281490767 M 322.20062981462115 236.6363281490767 M 325.17497297754556 236.2448147404111 L 328.14931614047 235.8533013317455 M 328.14931614047 235.8533013317455 M 331.1236593033944 235.46178792307992 L 334.0980024663188 235.07027451441434 M 334.0980024663188 235.07027451441434 M 337.0723456292432 234.67876110574875 L 340.04668879216763 234.28724769708316 M 340.04668879216763 234.28724769708316 M 343.02103195509204 233.89573428841757 L 345.99537511801645 233.50422087975198 M 345.99537511801645 233.50422087975198 M 348.96971828094087 233.1127074710864 L 351.9440614438653 232.7211940624208 M 351.9440614438653 232.7211940624208 M 354.9184046067897 232.32968065375522 L 357.8927477697141 231.93816724508963 M 357.8927477697141 231.93816724508963 M 360.8670909326385 231.54665383642404 L 363.84143409556293 231.15514042775845 M 363.84143409556293 231.15514042775845 M 366.81577725848734 230.76362701909284 L 369.79012042141176 230.37211361042722 M 369.79012042141176 230.37211361042722 M 372.76446358433617 229.98060020176163 L 375.7388067472606 229.58908679309602 M 375.7388067472606 229.58908679309602" stroke-miterlimit="10" stroke-width="3"/></g></g></g></g><g transform="matrix(1,0,0,1,369.99998474121094,224.15277099609375)"><g transform="translate(0,0)"><g transform="translate(-407.99998474121094,-243.15277099609375) translate(38,19) matrix(1,0,0,1,0,0)"><g><path fill="none" stroke="#254356" d="M 374.99998474121094 229.15277099609375 M 374.99998474121094 229.15277099609375 L 377.97135025984255 229.56627668491436 M 377.97135025984255 229.56627668491436 M 380.94271577847417 229.97978237373496 L 383.9140812971058 230.39328806255557 M 383.9140812971058 230.39328806255557 M 386.8854468157374 230.80679375137618 L 389.856812334369 231.22029944019678 M 389.856812334369 231.22029944019678 M 392.8281778530006 231.6338051290174 L 395.79954337163224 232.047310817838 M 395.79954337163224 232.047310817838 M 398.77090889026385 232.4608165066586 L 401.74227440889547 232.8743221954792 M 401.74227440889547 232.8743221954792 M 404.7136399275271 233.28782788429982 L 407.6850054461587 233.70133357312042 M 407.6850054461587 233.70133357312042 M 410.6563709647903 234.11483926194103 L 413.6277364834219 234.52834495076164 M 413.6277364834219 234.52834495076164 M 416.59910200205354 234.94185063958224 L 419.57046752068516 235.35535632840285 M 419.57046752068516 235.35535632840285 M 422.54183303931677 235.76886201722346 L 425.5131985579484 236.18236770604406 M 425.5131985579484 236.18236770604406 M 428.48456407658 236.59587339486467 L 431.4559295952116 237.00937908368527 M 431.4559295952116 237.00937908368527 M 434.42729511384323 237.42288477250588 L 437.39866063247484 237.8363904613265 M 437.39866063247484 237.8363904613265 M 440.37002615110646 238.2498961501471 L 443.3413916697381 238.6634018389677 M 443.3413916697381 238.6634018389677 M 446.3127571883697 239.0769075277883 L 449.2841227070013 239.4904132166089 M 449.2841227070013 239.4904132166089 M 452.2554882256329 239.90391890542952 L 455.22685374426453 240.31742459425013 M 455.22685374426453 240.31742459425013 M 458.19821926289615 240.73093028307073 L 461.16958478152776 241.14443597189134 M 461.16958478152776 241.14443597189134 M 464.1409503001594 241.55794166071195 L 467.112315818791 241.97144734953255 M 467.112315818791 241.97144734953255 M 470.0836813374226 242.38495303835316 L 473.0550468560542 242.79845872717377 M 473.0550468560542 242.79845872717377 M 476.02641237468583 243.21196441599437 L 478.99777789331745 243.62547010481498 M 478.99777789331745 243.62547010481498 M 481.96914341194906 244.0389757936356 L 484.9405089305807 244.4524814824562 M 484.9405089305807 244.4524814824562 M 487.9118744492123 244.86598717127683 L 490.8832399678439 245.27949286009743 M 490.8832399678439 245.27949286009743 M 493.8546054864755 245.69299854891807 L 496.82597100510714 246.10650423773868 M 496.82597100510714 246.10650423773868 M 499.79733652373875 246.52000992655928 L 502.76870204237036 246.93351561537992 M 502.76870204237036 246.93351561537992 M 505.740067561002 247.34702130420055 L 508.7114330796336 247.76052699302116 M 508.7114330796336 247.76052699302116 M 511.6827985982652 248.17403268184177 L 514.6541641168968 248.5875383706624 M 514.6541641168968 248.5875383706624 M 517.6255296355284 249.001044059483 L 520.59689515416 249.41454974830364 M 520.59689515416 249.41454974830364 M 523.5682606727917 249.82805543712425 L 526.5396261914233 250.24156112594488 M 526.5396261914233 250.24156112594488 M 529.5109917100549 250.6550668147655 L 532.4823572286865 251.0685725035861 M 532.4823572286865 251.0685725035861 M 535.4537227473181 251.48207819240673 L 538.4250882659497 251.89558388122734 M 538.4250882659497 251.89558388122734 M 541.3964537845814 252.30908957004797 L 544.367819303213 252.72259525886858 M 544.367819303213 252.72259525886858 M 547.3391848218446 253.13610094768921 L 550.3105503404762 253.54960663650982 M 550.3105503404762 253.54960663650982 M 553.2819158591078 253.96311232533046 L 556.2532813777394 254.37661801415106 M 556.2532813777394 254.37661801415106 M 559.224646896371 254.7901237029717 L 562.1960124150027 255.2036293917923 M 562.1960124150027 255.2036293917923 M 565.1673779336343 255.6171350806129 L 568.1387434522659 256.03064076943355 M 568.1387434522659 256.03064076943355 M 571.1101089708975 256.4441464582542 L 574.0814744895291 256.8576521470748 M 574.0814744895291 256.8576521470748 M 577.0528400081607 257.27115783589545 L 580.0242055267923 257.6846635247161 M 580.0242055267923 257.6846635247161 M 582.995571045424 258.0981692135367 L 585.9669365640556 258.51167490235736 M 585.9669365640556 258.51167490235736 M 588.9383020826872 258.925180591178 L 591.9096676013188 259.3386862799986 M 591.9096676013188 259.3386862799986 M 594.8810331199504 259.75219196881926 L 597.852398638582 260.1656976576399 M 597.852398638582 260.1656976576399 M 600.8237641572136 260.57920334646053 L 603.7951296758453 260.99270903528117 M 603.7951296758453 260.99270903528117 M 606.7664951944769 261.4062147241018 L 609.7378607131085 261.81972041292244 M 609.7378607131085 261.81972041292244 M 612.7092262317401 262.23322610174307 L 615.6805917503717 262.6467317905637 M 615.6805917503717 262.6467317905637 M 618.6519572690033 263.06023747938434 L 621.623322787635 263.4737431682049 M 621.623322787635 263.4737431682049 M 624.5946883062666 263.88724885702555 L 627.5660538248982 264.30075454584613 M 627.5660538248982 264.30075454584613 M 630.5374193435298 264.71426023466677 L 633.5087848621614 265.12776592348735 M 633.5087848621614 265.12776592348735 M 636.480150380793 265.541271612308 L 639.4515158994246 265.95477730112856 M 639.4515158994246 265.95477730112856 M 642.4228814180562 266.3682829899492 L 645.3942469366879 266.7817886787698 M 645.3942469366879 266.7817886787698 M 648.3656124553195 267.19529436759035 L 651.3369779739511 267.608800056411 M 651.3369779739511 267.608800056411 M 654.3083434925827 268.02230574523156 L 657.2797090112143 268.4358114340522 M 657.2797090112143 268.4358114340522 M 660.2510745298459 268.8493171228728 L 663.2224400484776 269.2628228116934 M 663.2224400484776 269.2628228116934 M 666.1938055671092 269.676328500514 L 669.1651710857408 270.0898341893346 M 669.1651710857408 270.0898341893346" stroke-miterlimit="10" stroke-width="3"/></g></g></g></g><g transform="matrix(1,0,0,1,373.66664632161456,222.7879785817978)"><g transform="translate(0,0)"><g transform="translate(-107.99998474121094,-177.1527709960937) translate(-265.6666615804036,-45.63520758570411) matrix(1,0,0,1,0,0)"><g><path fill="none" stroke="#254356" d="M 378.66664632161456 270 M 378.66664632161456 270 L 378.66664632161456 267 M 378.66664632161456 267 M 378.66664632161456 264 L 378.66664632161456 261 M 378.66664632161456 261 M 378.66664632161456 258 L 378.66664632161456 255 M 378.66664632161456 255 M 378.66664632161456 252 L 378.66664632161456 249 M 378.66664632161456 249 M 378.66664632161456 246 L 378.66664632161456 243 M 378.66664632161456 243 M 378.66664632161456 240 L 378.66664632161456 237 M 378.66664632161456 237 M 378.66664632161456 234 L 378.66664632161456 231 M 378.66664632161456 231 M 378.66664632161456 228 L 378.66664632161456 227.7879785817978" stroke-miterlimit="10" stroke-width="3"/></g></g></g></g><g transform="matrix(1,0,0,1,253,184)"><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="271" height="40" fill-opacity="0"/></g></g><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="271" height="20" fill-opacity="0"/></g></g><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="105" y="-1" width="63" height="21" fill-opacity="0"/></g></g><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="105" y="-1" width="63" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="105" y="15">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="129" y="15">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="134" y="15">web</text></g><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="20" width="271" height="20" fill-opacity="0"/></g></g><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="84" y="19" width="104" height="21" fill-opacity="0"/></g></g><g transform="translate(378,56) matrix(1,0,0,1,0,0) translate(-378,-56)"><g><rect fill="rgb(0,0,0)" stroke="none" x="84" y="19" width="104" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="84" y="35">VIP</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="113" y="35">:</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="123" y="35">10</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="143" y="35">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="148" y="35">0</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="158" y="35">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="163" y="35">9</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="173" y="35">.</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="178" y="35">2</text></g></g><g transform="matrix(1,0,0,1,103,287)"><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="210" height="20" fill-opacity="0"/></g></g><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="210" height="20" fill-opacity="0"/></g></g><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="59" y="-1" width="93" height="21" fill-opacity="0"/></g></g><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="59" y="-1" width="93" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="59" y="15">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="83" y="15">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="89" y="15">network</text></g></g><g transform="matrix(1,0,0,1,400,286)"><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="210" height="20" fill-opacity="0"/></g></g><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="210" height="20" fill-opacity="0"/></g></g><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="59" y="-1" width="93" height="21" fill-opacity="0"/></g></g><g transform="translate(118,-2) matrix(1,0,0,1,0,0) translate(-118,2)"><g><rect fill="rgb(0,0,0)" stroke="none" x="59" y="-1" width="93" height="21" fill-opacity="0"/></g><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="59" y="15">my</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="83" y="15">-</text><text fill="rgb(37, 67, 86)" stroke="none" font-family="Arial" font-size="18px" font-style="normal" font-weight="normal" text-decoration="" line-height="20.5px" x="89" y="15">network</text></g></g></g></svg>
0 1
\ No newline at end of file
1 2
new file mode 100644
... ...
@@ -0,0 +1,308 @@
0
+<!--[metadata]>
1
+title = "Attach services to an overlay network"
2
+description = "Use swarm mode networking features"
3
+keywords = ["guide", "swarm mode", "swarm", "network"]
4
+[menu.main]
5
+identifier="networking-guide"
6
+parent="engine_swarm"
7
+weight=16
8
+<![end-metadata]-->
9
+
10
+# Attach services to an overlay network
11
+
12
+Docker Engine swarm mode natively supports **overlay networks**, so you can
13
+enable container-to-container networks. When you use swarm mode, you don't need
14
+an external key-value store. Features of swarm mode overlay networks include the
15
+following:
16
+
17
+* You can attach multiple services to the same network.
18
+* By default, **service discovery** assigns a virtual IP address (VIP) and DNS
19
+entry to each service in the swarm, making it available by its service name to
20
+containers on the same network.
21
+* You can configure the service to use DNS round-robin instead of a VIP.
22
+
23
+In order to use overlay networks in the swarm, you need to have the following
24
+ports open between the swarm nodes before you enable swarm mode:
25
+
26
+* Port `7946` TCP/UDP for container network discovery.
27
+* Port `4789` UDP for the container overlay network.
28
+
29
+## Create an overlay network in a swarm
30
+
31
+When you run Docker Engine in swarm mode, you can run `docker network create`
32
+from a manager node to create an overlay network. For instance, to create a
33
+network named `my-network`:
34
+
35
+```
36
+$ docker network create \
37
+  --driver overlay \
38
+  --subnet 10.0.9.0/24 \
39
+  --opt encrypted \
40
+  my-network
41
+
42
+273d53261bcdfda5f198587974dae3827e947ccd7e74a41bf1f482ad17fa0d33
43
+```
44
+
45
+By default nodes in the swarm encrypt traffic between themselves and other
46
+nodes. The optional `--opt encrypted` flag enables an additional layer of
47
+encryption in the overlay driver for vxlan traffic between containers on
48
+different nodes. For more information, refer to [Docker swarm mode overlay network security model](../userguide/networking/overlay-security-model.md).
49
+
50
+The `--subnet` flag specifies the subnet for use with the overlay network. When
51
+you don't specify a subnet, the swarm manager automatically chooses a subnet and
52
+assigns it to the network. On some older kernels, including kernel 3.10,
53
+automatically assigned adresses may overlap with another subnet in your
54
+infrastructure. Such overlaps can cause connectivity issues or failures with containers connected to the network.
55
+
56
+Before you attach a service to the network, the network only extends to manager
57
+nodes. You can run `docker network ls` to view the network:
58
+
59
+```bash
60
+$ docker network ls
61
+
62
+NETWORK ID          NAME        DRIVER   SCOPE
63
+f9145f09b38b        bridge      bridge   local
64
+..snip..
65
+bd0befxwiva4        my-network  overlay  swarm
66
+```
67
+
68
+The `swarm` scope indicates that the network is available for use with services
69
+deployed to the swarm. After you create a service attached to the network, the
70
+swarm only extends the network to worker nodes where the scheduler places tasks
71
+for the service. On workers without tasks running for a service attached to the
72
+network, `network ls` does not display the network.
73
+
74
+## Attach a service to an overlay network
75
+
76
+To attach a service to an overlay network, pass the `--network` flag when you
77
+create a service. For example to create an nginx service attached to a
78
+network called `my-network`:
79
+
80
+```bash
81
+$ docker service create \
82
+  --replicas 3 \
83
+  --name my-web \
84
+  --network my-network \
85
+  nginx
86
+```
87
+
88
+>**Note:** You have to create the network before you can attach a service to it.
89
+
90
+The containers for the tasks in the service can connect to one another on the
91
+overlay network. The swarm extends the network to all the nodes with `Running`
92
+tasks for the service.
93
+
94
+From a manager node, run `docker service ps <SERVICE>` to view the nodes where
95
+tasks are running for the service:
96
+
97
+```bash
98
+$ docker service ps my-web
99
+
100
+ID                         NAME      IMAGE  NODE   DESIRED STATE  CURRENT STATE               ERROR
101
+63s86gf6a0ms34mvboniev7bs  my-web.1  nginx  node1  Running        Running 58 seconds ago
102
+6b3q2qbjveo4zauc6xig7au10  my-web.2  nginx  node2  Running        Running 58 seconds ago
103
+66u2hcrz0miqpc8h0y0f3v7aw  my-web.3  nginx  node3  Running        Running about a minute ago
104
+```
105
+
106
+![service vip image](images/service-vip.png)
107
+
108
+You can inspect the network from any node with a `Running` task for a service
109
+attached to the network:
110
+
111
+```bash
112
+$ docker network inspect <NETWORK>
113
+```
114
+
115
+The network information includes a list of the containers on the node that are
116
+attached to the network. For instance:
117
+
118
+```bash
119
+$ docker network inspect my-network
120
+[
121
+    {
122
+        "Name": "my-network",
123
+        "Id": "7m2rjx0a97n88wzr4nu8772r3",
124
+        "Scope": "swarm",
125
+        "Driver": "overlay",
126
+        "EnableIPv6": false,
127
+        "IPAM": {
128
+            "Driver": "default",
129
+            "Options": null,
130
+            "Config": [
131
+                {
132
+                    "Subnet": "10.0.9.0/24",
133
+                    "Gateway": "10.0.9.1"
134
+                }
135
+            ]
136
+        },
137
+        "Internal": false,
138
+        "Containers": {
139
+            "404d1dec939a021678132a35259c3604b9657649437e59060621a17edae7a819": {
140
+                "Name": "my-web.1.63s86gf6a0ms34mvboniev7bs",
141
+                "EndpointID": "3c9588d04db9bc2bf8749cb079689a3072c44c68e544944cbea8e4bc20eb7de7",
142
+                "MacAddress": "02:42:0a:00:09:03",
143
+                "IPv4Address": "10.0.9.3/24",
144
+                "IPv6Address": ""
145
+            }
146
+        },
147
+        "Options": {
148
+            "com.docker.network.driver.overlay.vxlanid_list": "257"
149
+        },
150
+        "Labels": {}
151
+    }
152
+]
153
+```
154
+
155
+In the example above, the container `my-web.1.63s86gf6a0ms34mvboniev7bs` for the
156
+`my-web` service is attached to the `my-network` network on node2.
157
+
158
+## Use swarm mode service discovery
159
+
160
+By default, when you create a service attached to a network, the swarm assigns
161
+the service a VIP. The VIP maps to a DNS alias based upon the service name.
162
+Containers on the network share DNS mappings for the service via gossip so any container on the network can access the service via its service
163
+name.
164
+
165
+You don't need to expose service-specific ports to make the service
166
+available to other services on the same overlay network. The swarm's internal
167
+load balancer automatically distributes requests to the service VIP among the
168
+active tasks.
169
+
170
+You can inspect the service to view the virtual IP. For example:
171
+
172
+```bash
173
+$ docker service inspect \
174
+  --format='{{json .Endpoint.VirtualIPs}}' \
175
+  my-web
176
+
177
+[{"NetworkID":"7m2rjx0a97n88wzr4nu8772r3" "Addr":"10.0.0.2/24"}]
178
+```
179
+
180
+The following example shows how you can add a `busybox` service on the same
181
+network as the `nginx` service and the busybox service is able to access `nginx`
182
+using the DNS name `my-web`:
183
+
184
+1. From a manager node, deploy a busybox service to the same network as
185
+`my-web`:
186
+
187
+    ```bash
188
+    $ docker service create \
189
+      --name my-busybox \
190
+      --network my-network \
191
+      busybox \
192
+      sleep 3000
193
+    ```
194
+
195
+2. Lookup the node where `my-busybox` is running:
196
+
197
+    ```bash
198
+    $ docker service ps my-busybox
199
+
200
+    ID                         NAME          IMAGE    NODE   DESIRED STATE  CURRENT STATE          ERROR
201
+    1dok2cmx2mln5hbqve8ilnair  my-busybox.1  busybox  node1  Running        Running 5 seconds ago
202
+    ```
203
+
204
+3. From the node where the busybox task is running, open an interactive shell to
205
+the busybox container:
206
+
207
+    ```bash
208
+    $ docker exec -it my-busybox.1.1dok2cmx2mln5hbqve8ilnair /bin/sh
209
+    ```
210
+
211
+    You can deduce the container name as `<TASK-NAME>`+`<ID>`. Alternatively,
212
+    you can run `docker ps` on the node where the task is running.
213
+
214
+4. From inside the busybox container, query the DNS to view the VIP for the
215
+`my-web` service:
216
+
217
+    ```bash
218
+    $ nslookup my-web
219
+
220
+    Server:    127.0.0.11
221
+    Address 1: 127.0.0.11
222
+
223
+    Name:      my-web
224
+    Address 1: 10.0.9.2 ip-10-0-9-2.us-west-2.compute.internal
225
+    ```
226
+
227
+    >**Note:** the examples here use `nslookup`, but you can use `dig` or any
228
+    available DNS query tool.
229
+
230
+5. From inside the busybox container, query the DNS using a special query
231
+<tasks.SERVICE-NAME> to find the IP addresses of all the containers for the
232
+`my-web` service:
233
+
234
+    ```bash
235
+    $ nslookup tasks.my-web
236
+
237
+    Server:    127.0.0.11
238
+    Address 1: 127.0.0.11
239
+
240
+    Name:      tasks.my-web
241
+    Address 1: 10.0.9.4 my-web.2.6b3q2qbjveo4zauc6xig7au10.my-network
242
+    Address 2: 10.0.9.3 my-web.1.63s86gf6a0ms34mvboniev7bs.my-network
243
+    Address 3: 10.0.9.5 my-web.3.66u2hcrz0miqpc8h0y0f3v7aw.my-network
244
+    ```
245
+
246
+6. From inside the busybox container, run `wget` to access the nginx web server
247
+running in the `my-web` service:
248
+
249
+    ```bash
250
+    $ wget -O- my-web
251
+
252
+    Connecting to my-web (10.0.9.2:80)
253
+    <!DOCTYPE html>
254
+    <html>
255
+    <head>
256
+    <title>Welcome to nginx!</title>
257
+    ...snip...
258
+    ```
259
+
260
+    The swarm load balancer automatically routes the HTTP request to the
261
+    service's VIP to an active task. It distributes subsequent requests to
262
+    other tasks using round-robin selection.
263
+
264
+## Use DNS round-robin for a service
265
+
266
+You can configure the service to use DNS round-robin directly without using a
267
+VIP, by setting the `--endpoint-mode dnsrr` when you create the service. DNS round-robin is useful in cases where you want to use your own load balancer.
268
+
269
+The following example shows a service with `dnsrr` endpoint mode:
270
+
271
+```bash
272
+$ docker service create \
273
+  --replicas 3 \
274
+  --name my-dnsrr-service \
275
+  --network my-network \
276
+  --endpoint-mode dnsrr \
277
+  nginx
278
+```
279
+
280
+When you query the DNS for the service name, the DNS service returns the IP
281
+addresses for all the task containers:
282
+
283
+```bash
284
+$ nslookup my-dnsrr-service
285
+Server:    127.0.0.11
286
+Address 1: 127.0.0.11
287
+
288
+Name:      my-dnsrr
289
+Address 1: 10.0.9.8 my-dnsrr-service.1.bd3a67p61by5dfdkyk7kog7pr.my-network
290
+Address 2: 10.0.9.10 my-dnsrr-service.3.0sb1jxr99bywbvzac8xyw73b1.my-network
291
+Address 3: 10.0.9.9 my-dnsrr-service.2.am6fx47p3bropyy2dy4f8hofb.my-network
292
+```
293
+
294
+## Confirm VIP connectivity
295
+
296
+In genaral we recommend you use `dig`, `nslookup`, or another DNS query tool to
297
+test access to the service name via DNS. Because a VIP is a logical IP, `ping`
298
+is not the right tool to confirm VIP connectivity.
299
+
300
+## Learn More
301
+
302
+* [Deploy services to a swarm](services.md)
303
+* [Swarm administration guide](admin_guide.md)
304
+* [Docker Engine command line reference](../reference/commandline/index.md)
305
+* [Swarm mode tutorial](swarm-tutorial/index.md)
... ...
@@ -213,8 +213,9 @@ $ docker service create \
213 213
 
214 214
 The swarm extends `my-network` to each node running the service.
215 215
 
216
-<!-- TODO when overlay-security-model is published
217
-For more information, refer to [Note on Docker 1.12 Overlay Network Security Model](../userguide/networking/overlay-security-model.md).-->
216
+For more information on overlay networking and service discovery, refer to
217
+[Attach services to an overlay network](networking.md). See also
218
+[Docker swarm mode overlay network security model](../userguide/networking/overlay-security-model.md).
218 219
 
219 220
 ## Configure update behavior
220 221
 
221 222
deleted file mode 100644
... ...
@@ -1,538 +0,0 @@
1
-<!--[metadata]>
2
-+++
3
-title = "Docker container networking"
4
-description = "How do we connect docker containers within and across hosts ?"
5
-keywords = ["Examples, Usage, network, docker, documentation, user guide, multihost, cluster"]
6
-[menu.main]
7
-parent = "smn_networking"
8
-weight = -5
9
-+++
10
-<![end-metadata]-->
11
-
12
-# Understand Docker container networks
13
-
14
-To build web applications that act in concert but do so securely, use the Docker
15
-networks feature. Networks, by definition, provide complete isolation for
16
-containers. So, it is important to have control over the networks your
17
-applications run on. Docker container networks give you that control.
18
-
19
-This section provides an overview of the default networking behavior that Docker
20
-Engine delivers natively. It describes the type of networks created by default
21
-and how to create your own, user-defined networks. It also describes the
22
-resources required to create networks on a single host or across a cluster of
23
-hosts.
24
-
25
-## Default Networks
26
-
27
-When you install Docker, it creates three networks automatically. You can list
28
-these networks using the `docker network ls` command:
29
-
30
-```
31
-$ docker network ls
32
-
33
-NETWORK ID          NAME                DRIVER
34
-7fca4eb8c647        bridge              bridge
35
-9f904ee27bf5        none                null
36
-cf03ee007fb4        host                host
37
-```
38
-
39
-Historically, these three networks are part of Docker's implementation. When
40
-you run a container you can use the `--network` flag to specify which network you
41
-want to run a container on. These three networks are still available to you.
42
-
43
-The `bridge` network represents the `docker0` network present in all Docker
44
-installations. Unless you specify otherwise with the `docker run
45
-by default. You can see this bridge as part of a host's network stack by using
46
-the `ifconfig` command on the host.
47
-
48
-```
49
-$ ifconfig
50
-
51
-docker0   Link encap:Ethernet  HWaddr 02:42:47:bc:3a:eb  
52
-          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
53
-          inet6 addr: fe80::42:47ff:febc:3aeb/64 Scope:Link
54
-          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
55
-          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
56
-          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
57
-          collisions:0 txqueuelen:0
58
-          RX bytes:1100 (1.1 KB)  TX bytes:648 (648.0 B)
59
-```
60
-
61
-The `none` network adds a container to a container-specific network stack. That container lacks a network interface. Attaching to such a container and looking at its stack you see this:
62
-
63
-```
64
-$ docker attach nonenetcontainer
65
-
66
-root@0cb243cd1293:/# cat /etc/hosts
67
-127.0.0.1	localhost
68
-::1	localhost ip6-localhost ip6-loopback
69
-fe00::0	ip6-localnet
70
-ff00::0	ip6-mcastprefix
71
-ff02::1	ip6-allnodes
72
-ff02::2	ip6-allrouters
73
-root@0cb243cd1293:/# ifconfig
74
-lo        Link encap:Local Loopback  
75
-          inet addr:127.0.0.1  Mask:255.0.0.0
76
-          inet6 addr: ::1/128 Scope:Host
77
-          UP LOOPBACK RUNNING  MTU:65536  Metric:1
78
-          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
79
-          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
80
-          collisions:0 txqueuelen:0
81
-          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
82
-
83
-root@0cb243cd1293:/#
84
-```
85
->**Note**: You can detach from the container and leave it running with `CTRL-p CTRL-q`.
86
-
87
-The `host` network adds a container on the hosts network stack. You'll find the
88
-network configuration inside the container is identical to the host.
89
-
90
-With the exception of the `bridge` network, you really don't need to
91
-interact with these default networks. While you can list and inspect them, you
92
-cannot remove them. They are required by your Docker installation. However, you
93
-can add your own user-defined networks and these you can remove when you no
94
-longer need them. Before you learn more about creating your own networks, it is
95
-worth looking at the default `bridge` network a bit.
96
-
97
-
98
-### The default bridge network in detail
99
-The default `bridge` network is present on all Docker hosts. The `docker network inspect`
100
-command returns information about a network:
101
-
102
-```
103
-$ docker network inspect bridge
104
-
105
-[
106
-   {
107
-       "Name": "bridge",
108
-       "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f",
109
-       "Scope": "local",
110
-       "Driver": "bridge",
111
-       "IPAM": {
112
-           "Driver": "default",
113
-           "Config": [
114
-               {
115
-                   "Subnet": "172.17.0.1/16",
116
-                   "Gateway": "172.17.0.1"
117
-               }
118
-           ]
119
-       },
120
-       "Containers": {},
121
-       "Options": {
122
-           "com.docker.network.bridge.default_bridge": "true",
123
-           "com.docker.network.bridge.enable_icc": "true",
124
-           "com.docker.network.bridge.enable_ip_masquerade": "true",
125
-           "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
126
-           "com.docker.network.bridge.name": "docker0",
127
-           "com.docker.network.driver.mtu": "9001"
128
-       }
129
-   }
130
-]
131
-```
132
-The Engine automatically creates a `Subnet` and `Gateway` to the network.
133
-The `docker run` command automatically adds new containers to this network.
134
-
135
-```
136
-$ docker run -itd --name=container1 busybox
137
-
138
-3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c
139
-
140
-$ docker run -itd --name=container2 busybox
141
-
142
-94447ca479852d29aeddca75c28f7104df3c3196d7b6d83061879e339946805c
143
-```
144
-
145
-Inspecting the `bridge` network again after starting two containers shows both newly launched containers in the network. Their ids show up in the "Containers" section of `docker network inspect`:
146
-
147
-```
148
-$ docker network inspect bridge
149
-
150
-{[
151
-    {
152
-        "Name": "bridge",
153
-        "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f",
154
-        "Scope": "local",
155
-        "Driver": "bridge",
156
-        "IPAM": {
157
-            "Driver": "default",
158
-            "Config": [
159
-                {
160
-                    "Subnet": "172.17.0.1/16",
161
-                    "Gateway": "172.17.0.1"
162
-                }
163
-            ]
164
-        },
165
-        "Containers": {
166
-            "3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c": {
167
-                "EndpointID": "647c12443e91faf0fd508b6edfe59c30b642abb60dfab890b4bdccee38750bc1",
168
-                "MacAddress": "02:42:ac:11:00:02",
169
-                "IPv4Address": "172.17.0.2/16",
170
-                "IPv6Address": ""
171
-            },
172
-            "94447ca479852d29aeddca75c28f7104df3c3196d7b6d83061879e339946805c": {
173
-                "EndpointID": "b047d090f446ac49747d3c37d63e4307be745876db7f0ceef7b311cbba615f48",
174
-                "MacAddress": "02:42:ac:11:00:03",
175
-                "IPv4Address": "172.17.0.3/16",
176
-                "IPv6Address": ""
177
-            }
178
-        },
179
-        "Options": {
180
-            "com.docker.network.bridge.default_bridge": "true",
181
-            "com.docker.network.bridge.enable_icc": "true",
182
-            "com.docker.network.bridge.enable_ip_masquerade": "true",
183
-            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
184
-            "com.docker.network.bridge.name": "docker0",
185
-            "com.docker.network.driver.mtu": "9001"
186
-        }
187
-    }
188
-]
189
-```
190
-
191
-The `docker network inspect` command above shows all the connected containers and their network resources on a given network. Containers in this default network are able to communicate with each other using IP addresses. Docker does not support automatic service discovery on the default bridge network. If you want to communicate with container names in this default bridge network, you must connect the containers via the legacy `docker run --link` option.
192
-
193
-You can `attach` to a running `container` and investigate its configuration:
194
-
195
-```
196
-$ docker attach container1
197
-
198
-root@0cb243cd1293:/# ifconfig
199
-ifconfig
200
-eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
201
-          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
202
-          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
203
-          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
204
-          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
205
-          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
206
-          collisions:0 txqueuelen:0
207
-          RX bytes:1296 (1.2 KiB)  TX bytes:648 (648.0 B)
208
-
209
-lo        Link encap:Local Loopback  
210
-          inet addr:127.0.0.1  Mask:255.0.0.0
211
-          inet6 addr: ::1/128 Scope:Host
212
-          UP LOOPBACK RUNNING  MTU:65536  Metric:1
213
-          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
214
-          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
215
-          collisions:0 txqueuelen:0
216
-          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
217
-```
218
-
219
-Then use `ping` for about 3 seconds to test the connectivity of the containers on this `bridge` network.
220
-
221
-```
222
-root@0cb243cd1293:/# ping -w3 172.17.0.3
223
-
224
-PING 172.17.0.3 (172.17.0.3): 56 data bytes
225
-64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.096 ms
226
-64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.080 ms
227
-64 bytes from 172.17.0.3: seq=2 ttl=64 time=0.074 ms
228
-
229
-3 packets transmitted, 3 packets received, 0% packet loss
230
-round-trip min/avg/max = 0.074/0.083/0.096 ms
231
-```
232
-
233
-Finally, use the `cat` command to check the `container1` network configuration:
234
-
235
-```
236
-root@0cb243cd1293:/# cat /etc/hosts
237
-
238
-172.17.0.2	3386a527aa08
239
-127.0.0.1	localhost
240
-::1	localhost ip6-localhost ip6-loopback
241
-fe00::0	ip6-localnet
242
-ff00::0	ip6-mcastprefix
243
-ff02::1	ip6-allnodes
244
-ff02::2	ip6-allrouters
245
-```
246
-To detach from a `container1` and leave it running use `CTRL-p CTRL-q`.Then, attach to `container2` and repeat these three commands.
247
-
248
-```
249
-$ docker attach container2
250
-
251
-root@0cb243cd1293:/# ifconfig
252
-
253
-eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
254
-          inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
255
-          inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
256
-          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
257
-          RX packets:15 errors:0 dropped:0 overruns:0 frame:0
258
-          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
259
-          collisions:0 txqueuelen:0
260
-          RX bytes:1166 (1.1 KiB)  TX bytes:1026 (1.0 KiB)
261
-
262
-lo        Link encap:Local Loopback  
263
-          inet addr:127.0.0.1  Mask:255.0.0.0
264
-          inet6 addr: ::1/128 Scope:Host
265
-          UP LOOPBACK RUNNING  MTU:65536  Metric:1
266
-          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
267
-          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
268
-          collisions:0 txqueuelen:0
269
-          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
270
-
271
-root@0cb243cd1293:/# ping -w3 172.17.0.2
272
-
273
-PING 172.17.0.2 (172.17.0.2): 56 data bytes
274
-64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.067 ms
275
-64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.075 ms
276
-64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.072 ms
277
-
278
-3 packets transmitted, 3 packets received, 0% packet loss
279
-round-trip min/avg/max = 0.067/0.071/0.075 ms
280
-/ # cat /etc/hosts
281
-172.17.0.3	94447ca47985
282
-127.0.0.1	localhost
283
-::1	localhost ip6-localhost ip6-loopback
284
-fe00::0	ip6-localnet
285
-ff00::0	ip6-mcastprefix
286
-ff02::1	ip6-allnodes
287
-ff02::2	ip6-allrouters
288
-```
289
-
290
-The default `docker0` bridge network supports the use of port mapping and `docker run --link` to allow communications between containers in the `docker0` network. These techniques are cumbersome to set up and prone to error. While they are still available to you as techniques, it is better to avoid them and define your own bridge networks instead.
291
-
292
-## User-defined networks
293
-
294
-You can create your own user-defined networks that better isolate containers.
295
-Docker provides some default **network drivers** for creating these
296
-networks. You can create a new **bridge network** or **overlay network**. You
297
-can also create a **network plugin** or **remote network**  written to your own
298
-specifications.
299
-
300
-You can create multiple networks. You can add containers to more than one
301
-network. Containers can only communicate within networks but not across
302
-networks. A container attached to two networks can communicate with member
303
-containers in either network. When a container is connected to multiple
304
-networks, its external connectivity is provided via the first non-internal
305
-network, in lexical order.
306
-
307
-The next few sections describe each of Docker's built-in network drivers in
308
-greater detail.
309
-
310
-### A bridge network
311
-
312
-The easiest user-defined network to create is a `bridge` network. This network
313
-is similar to the historical, default `docker0` network. There are some added
314
-features and some old features that aren't available.
315
-
316
-```
317
-$ docker network create --driver bridge isolated_nw
318
-1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b
319
-
320
-$ docker network inspect isolated_nw
321
-
322
-[
323
-    {
324
-        "Name": "isolated_nw",
325
-        "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b",
326
-        "Scope": "local",
327
-        "Driver": "bridge",
328
-        "IPAM": {
329
-            "Driver": "default",
330
-            "Config": [
331
-                {
332
-                    "Subnet": "172.21.0.0/16",
333
-                    "Gateway": "172.21.0.1"
334
-                }
335
-            ]
336
-        },
337
-        "Containers": {},
338
-        "Options": {}
339
-    }
340
-]
341
-
342
-$ docker network ls
343
-
344
-NETWORK ID          NAME                DRIVER
345
-9f904ee27bf5        none                null
346
-cf03ee007fb4        host                host
347
-7fca4eb8c647        bridge              bridge
348
-c5ee82f76de3        isolated_nw         bridge
349
-
350
-```
351
-
352
-After you create the network, you can launch containers on it using  the `docker run --network=<NETWORK>` option.
353
-
354
-```
355
-$ docker run --network=isolated_nw -itd --name=container3 busybox
356
-
357
-8c1a0a5be480921d669a073393ade66a3fc49933f08bcc5515b37b8144f6d47c
358
-
359
-$ docker network inspect isolated_nw
360
-[
361
-    {
362
-        "Name": "isolated_nw",
363
-        "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b",
364
-        "Scope": "local",
365
-        "Driver": "bridge",
366
-        "IPAM": {
367
-            "Driver": "default",
368
-            "Config": [
369
-                {}
370
-            ]
371
-        },
372
-        "Containers": {
373
-            "8c1a0a5be480921d669a073393ade66a3fc49933f08bcc5515b37b8144f6d47c": {
374
-                "EndpointID": "93b2db4a9b9a997beb912d28bcfc117f7b0eb924ff91d48cfa251d473e6a9b08",
375
-                "MacAddress": "02:42:ac:15:00:02",
376
-                "IPv4Address": "172.21.0.2/16",
377
-                "IPv6Address": ""
378
-            }
379
-        },
380
-        "Options": {}
381
-    }
382
-]
383
-```
384
-
385
-The containers you launch into this network must reside on the same Docker host.
386
-Each container in the network can immediately communicate with other containers
387
-in the network. Though, the network itself isolates the containers from external
388
-networks.
389
-
390
-![An isolated network](images/bridge_network.png)
391
-
392
-Within a user-defined bridge network, linking is not supported. You can
393
-expose and publish container ports on containers in this network. This is useful
394
-if you want to make a portion of the `bridge` network available to an outside
395
-network.
396
-
397
-![Bridge network](images/network_access.png)
398
-
399
-A bridge network is useful in cases where you want to run a relatively small
400
-network on a single host. You can, however, create significantly larger networks
401
-by creating an `overlay` network.
402
-
403
-
404
-### An overlay network
405
-
406
-Docker's `overlay` network driver supports multi-host networking natively
407
-out-of-the-box. This support is accomplished with the help of `libnetwork`, a
408
-built-in VXLAN-based overlay network driver, and Docker's `libkv` library.
409
-
410
-The `overlay` network requires a valid key-value store service. Currently,
411
-Docker's `libkv` supports Consul, Etcd, and ZooKeeper (Distributed store). Before
412
-creating a network you must install and configure your chosen key-value store
413
-service. The Docker hosts that you intend to network and the service must be
414
-able to communicate.
415
-
416
-![Key-value store](images/key_value.png)
417
-
418
-Each host in the network must run a Docker Engine instance. The easiest way to
419
-provision the hosts are with Docker Machine.
420
-
421
-![Engine on each host](images/engine_on_net.png)
422
-
423
-You should open the following ports between each of your hosts.
424
-
425
-| Protocol | Port | Description           |
426
-|----------|------|-----------------------|
427
-| udp      | 4789 | Data plane (VXLAN)    |
428
-| tcp/udp  | 7946 | Control plane         |
429
-
430
-Your key-value store service may require additional ports.
431
-Check your vendor's documentation and open any required ports.
432
-
433
-Once you have several machines provisioned, you can use Docker Swarm to quickly
434
-form them into a swarm which includes a discovery service as well.
435
-
436
-To create an overlay network, you configure options on  the `daemon` on each
437
-Docker Engine for use with `overlay` network. There are three options to set:
438
-
439
-<table>
440
-    <thead>
441
-    <tr>
442
-        <th>Option</th>
443
-        <th>Description</th>
444
-    </tr>
445
-    </thead>
446
-    <tbody>
447
-    <tr>
448
-        <td><pre>--cluster-store=PROVIDER://URL</pre></td>
449
-        <td>Describes the location of the KV service.</td>
450
-    </tr>
451
-    <tr>
452
-        <td><pre>--cluster-advertise=HOST_IP|HOST_IFACE:PORT</pre></td>
453
-        <td>The IP address or interface of the HOST used for clustering.</td>
454
-    </tr>
455
-    <tr>
456
-        <td><pre>--cluster-store-opt=KEY-VALUE OPTIONS</pre></td>
457
-        <td>Options such as TLS certificate or tuning discovery Timers</td>
458
-    </tr>
459
-    </tbody>
460
-</table>
461
-
462
-Create an `overlay` network on one of the machines in the swarm.
463
-
464
-    $ docker network create --driver overlay my-multi-host-network
465
-
466
-This results in a single network spanning multiple hosts. An `overlay` network
467
-provides complete isolation for the containers.
468
-
469
-![An overlay network](images/overlay_network.png)
470
-
471
-Then, on each host, launch containers making sure to specify the network name.
472
-
473
-    $ docker run -itd --network=my-multi-host-network busybox
474
-
475
-Once connected, each container has access to all the containers in the network
476
-regardless of which Docker host the container was launched on.
477
-
478
-![Published port](images/overlay-network-final.png)
479
-
480
-If you would like to try this for yourself, see the [Getting started for
481
-overlay](get-started-overlay.md).
482
-
483
-### Custom network plugin
484
-
485
-If you like, you can write your own network driver plugin. A network
486
-driver plugin makes use of Docker's plugin infrastructure. In this
487
-infrastructure, a plugin is a process running on the same Docker host as the
488
-Docker `daemon`.
489
-
490
-Network plugins follow the same restrictions and installation rules as other
491
-plugins. All plugins make use of the plugin API. They have a lifecycle that
492
-encompasses installation, starting, stopping and activation.
493
-
494
-Once you have created and installed a custom network driver, you use it like the
495
-built-in network drivers. For example:
496
-
497
-    $ docker network create --driver weave mynet
498
-
499
-You can inspect it, add containers to and from it, and so forth. Of course,
500
-different plugins may make use of different technologies or frameworks. Custom
501
-networks can include features not present in Docker's default networks. For more
502
-information on writing plugins, see [Extending Docker](../../extend/index.md) and
503
-[Writing a network driver plugin](../../extend/plugins_network.md).
504
-
505
-### Docker embedded DNS server
506
-
507
-Docker daemon runs an embedded DNS server to provide automatic service discovery
508
-for containers connected to user defined networks. Name resolution requests from
509
-the containers are handled first by the embedded DNS server. If the embedded DNS
510
-server is unable to resolve the request it will be forwarded to any external DNS
511
-servers configured for the container. To facilitate this when the container is
512
-created, only the embedded DNS server reachable at `127.0.0.11` will be listed
513
-in the container's `resolv.conf` file. More information on embedded DNS server on
514
-user-defined networks can be found in the [embedded DNS server in user-defined networks]
515
-(configure-dns.md)
516
-
517
-## Links
518
-
519
-Before the Docker network feature, you could use the Docker link feature to
520
-allow containers to discover each other.  With the introduction of Docker networks,
521
-containers can be discovered by its name automatically. But you can still create
522
-links but they behave differently when used in the default `docker0` bridge network
523
-compared to user-defined networks. For more information, please refer to
524
-[Legacy Links](default_network/dockerlinks.md) for link feature in default `bridge` network
525
-and the [linking containers in user-defined networks](work-with-networks.md#linking-containers-in-user-defined-networks) for links
526
-functionality in user-defined networks.
527
-
528
-## Related information
529
-
530
-- [Work with network commands](work-with-networks.md)
531
-- [Get started with multi-host networking](get-started-overlay.md)
532
-- [Managing Data in Containers](../../tutorials/dockervolumes.md)
533
-- [Docker Machine overview](https://docs.docker.com/machine)
534
-- [Docker Swarm overview](https://docs.docker.com/swarm)
535
-- [Investigate the LibNetwork project](https://github.com/docker/libnetwork)
... ...
@@ -54,6 +54,7 @@ $ $ docker service create --replicas 2 --network my-multi-host-network --name my
54 54
 
55 55
 Overlay networks for a swarm are not available to unmanaged containers. For more information refer to [Docker swarm mode overlay network security model](overlay-security-model.md).
56 56
 
57
+See also [Attach services to an overlay network](../../swarm/networking.md). 
57 58
 
58 59
 ## Overlay networking with an external key-value store
59 60
 
... ...
@@ -437,6 +437,8 @@ Overlay networks for a swarm are not available to containers started with
437 437
 `docker run` that don't run as part of a swarm mode service. For more
438 438
 information refer to [Docker swarm mode overlay network security model](overlay-security-model.md).
439 439
 
440
+See also [Attach services to an overlay network](../../swarm/networking.md).
441
+
440 442
 ### An overlay network with an external key-value store
441 443
 
442 444
 If you are not using Docker Engine in swarm mode, the `overlay` network requires