1<!DOCTYPE html> 2<html lang=zh> 3<head> 4 <meta charset="utf-8"> 5 6 <title>Docker Swarm 容å¨é群ï¼ä¸ï¼ | Blog</title> 7 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> 8 <meta name="description" content="å ¥é¨ç¯ï¼ç®åä»ç»äºåºäº Docker Machine æå»º Swarm éç¾¤çæ¹æ³ãä½¿ç¨ Docker �warm å¯ä»¥è®©æä»¬æ´å®¹æç对åºç¨ãæå¡è¿è¡ç¼æã管çï¼å¹¶è§£å³å¾å¤ Runtime é®é¢ã"> 9<meta property="og:type" content="article"> 10<meta property="og:title" content="Docker Swarm 容å¨é群ï¼ä¸ï¼"> 11<meta property="og:url" content="https://saekiraku.github.io/article/53786/index.html"> 12<meta property="og:site_name" content="Blog"> 13<meta property="og:description" content="å ¥é¨ç¯ï¼ç®åä»ç»äºåºäº Docker Machine æå»º Swarm éç¾¤çæ¹æ³ãä½¿ç¨ Docker �warm å¯ä»¥è®©æä»¬æ´å®¹æç对åºç¨ãæå¡è¿è¡ç¼æã管çï¼å¹¶è§£å³å¾å¤ Runtime é®é¢ã"> 14<meta property="og:locale" content="zh-CN"> 15<meta property="og:image" content="https://saekiraku-1253597019.coscd.myqcloud.com/image/m4cz7.png"> 16<meta property="og:updated_time" content="2018-11-12T10:03:28.760Z"> 17<meta name="twitter:card" content="summary"> 18<meta name="twitter:title" content="Docker Swarm 容å¨é群ï¼ä¸ï¼"> 19<meta name="twitter:description" content="å ¥é¨ç¯ï¼ç®åä»ç»äºåºäº Docker Machine æå»º Swarm éç¾¤çæ¹æ³ãä½¿ç¨ Docker �warm å¯ä»¥è®©æä»¬æ´å®¹æç对åºç¨ãæå¡è¿è¡ç¼æã管çï¼å¹¶è§£å³å¾å¤ Runtime é®é¢ã"> 20<meta name="twitter:image" content="https://saekiraku-1253597019.coscd.myqcloud.com/image/m4cz7.png"> 21 22 23 24 25 26 27 <link rel="stylesheet" href="/libs/font-awesome/css/font-awesome.min.css"> 28 <link rel="stylesheet" href="/libs/open-sans/styles.css"> 29 <link rel="stylesheet" href="/libs/source-code-pro/styles.css"> 30 31 <link rel="stylesheet" href="/css/style.css"> 32 33
33<script src="/libs/jquery/2.1.3/jquery.min.js"></script>
33 34 35 36 <link rel="stylesheet" href="/libs/lightgallery/css/lightgallery.min.css"> 37 38 39 <link rel="stylesheet" href="/libs/justified-gallery/justifiedGallery.min.css"> 40 41 42 43 44 45 46</head> 47 48<body> 49
49<script type="text/javascript" src="https://tajs.qq.com/stats?sId=65846734" charset="UTF-8"></script>
49 50 <div id="container"> 51 <header id="header"> 52 <div id="header-main" class="header-inner"> 53 <div class="outer"> 54 <a href="/" id="logo"> 55 <i class="logo"></i> 56 <span class="site-title">Blog</span> 57 </a> 58 <nav id="main-nav"> 59 60 <a class="main-nav-link" href="/.">é¦é¡µ</a> 61 62 <a class="main-nav-link" href="/archives">彿¡£</a> 63 64 <a class="main-nav-link" href="/about">å ³äº</a> 65 66 </nav> 67 68 69 <nav id="sub-nav"> 70 <div class="profile" id="profile-nav"> 71 <a id="profile-anchor" href="javascript:;"> 72 <img class="avatar" src="http://saekiraku-1253597019.coscd.myqcloud.com/image/dr0bm.png" /> 73 <i class="fa fa-caret-down"></i> 74 </a> 75 </div> 76 </nav> 77 78 <div id="search-form-wrap"> 79 80 <form class="search-form"> 81 <input type="text" class="ins-search-input search-form-input" placeholder="æç´¢" /> 82 <button type="submit" class="search-form-submit"></button> 83 </form> 84 <div class="ins-search"> 85 <div class="ins-search-mask"></div> 86 <div class="ins-search-container"> 87 <div class="ins-input-wrapper"> 88 <input type="text" class="ins-search-input" placeholder="æ³è¦æ¥æ¾ä»ä¹..." /> 89 <span class="ins-close ins-selectable"><i class="fa fa-times-circle"></i></span> 90 </div> 91 <div class="ins-section-wrapper"> 92 <div class="ins-section-container"></div> 93 </div> 94 </div> 95</div>
96<script> 97(function (window) { 98 var INSIGHT_CONFIG = { 99 TRANSLATION: { 100 POSTS: 'æç« ', 101 PAGES: '页é¢', 102 CATEGORIES: 'åç±»', 103 TAGS: 'æ ç¾', 104 UNTITLED: '(æªå½å)', 105 }, 106 ROOT_URL: '/', 107 CONTENT_URL: '/content.json', 108 }; 109 window.INSIGHT_CONFIG = INSIGHT_CONFIG; 110})(window); 111</script>
vendor: 1 bytes, line 111
111
112<script src="/js/insight.js"></script>
112 113 114</div> 115 </div> 116 </div> 117 <div id="main-nav-mobile" class="header-sub header-inner"> 118 <table class="menu outer"> 119 <tr> 120 121 <td><a class="main-nav-link" href="/.">é¦é¡µ</a></td> 122 123 <td><a class="main-nav-link" href="/archives">彿¡£</a></td> 124 125 <td><a class="main-nav-link" href="/about">å ³äº</a></td> 126 127 <td> 128 129 <div class="search-form"> 130 <input type="text" class="ins-search-input search-form-input" placeholder="æç´¢" /> 131 </div> 132 133 </td> 134 </tr> 135 </table> 136 </div> 137</header> 138 139 <div class="outer"> 140 141 142 143<aside id="profile" class="profile-fixed"> 144 <div class="inner profile-inner"> 145 <div class="base-info profile-block"> 146 <img id="avatar" src="http://saekiraku-1253597019.coscd.myqcloud.com/image/dr0bm.png" /> 147 <h2 id="name">ä½ä¼¯æ¥½</h2> 148 <h3 id="title">Web Developer & Designer</h3> 149 <span id="location"><i class="fa fa-map-marker"></i>Hebei, China</span> 150 <a id="follow" target="_blank" href="https://github.com/saekiraku/">å ³æ³¨æ</a> 151 </div> 152 <div class="article-info profile-block"> 153 <div class="article-info-block"> 154 7 155 <span>æç« </span> 156 </div> 157 <div class="article-info-block"> 158 4 159 <span>æ ç¾</span> 160 </div> 161 </div> 162 163 <div class="profile-block social-links"> 164 <table> 165 <tr> 166 167 168 <td> 169 <a href="https://github.com/saekiraku/" target="_blank" title="github" class=tooltip> 170 <i class="fa fa-github"></i> 171 </a> 172 </td> 173 174 <td> 175 <a href="https://weibo.com/5179454493/" target="_blank" title="weibo" class=tooltip> 176 <i class="fa fa-weibo"></i> 177 </a> 178 </td> 179 180 </tr> 181 </table> 182 </div> 183 184 </div> 185</aside> 186 187 188 <section id="main"><article id="post-Docker-Swarm-容å¨é群ï¼ä¸ï¼" class="article article-type-post" itemscope itemprop="blogPost"> 189 <div class="article-inner"> 190 191 192 193 <img src="https://saekiraku-1253597019.coscd.myqcloud.com/image/m4cz7.png" class="article-banner" /> 194 195 196 197 198 199 200 <header class="article-header"> 201 202 203 <h1 class="article-title" itemprop="name"> 204 Docker Swarm 容å¨é群ï¼ä¸ï¼ 205 </h1> 206 207 208 209 <div class="article-meta"> 210 211 <div class="article-date"> 212 <i class="fa fa-calendar"></i> 213 <a href="/article/53786/"> 214 <time datetime="2018-10-29T01:34:11.000Z" itemprop="datePublished">2018-10-29</time> 215 </a> 216 </div> 217 218 219 220 221 </div> 222 223 </header> 224 225 226 <div class="article-entry" itemprop="articleBody"> 227 228 229 <p>å ¥é¨ç¯ï¼ç®åä»ç»äºåºäº Docker Machine æå»º Swarm éç¾¤çæ¹æ³ãä½¿ç¨ Docker �warm å¯ä»¥è®©æä»¬æ´å®¹æç对åºç¨ãæå¡è¿è¡ç¼æã管çï¼å¹¶è§£å³å¾å¤ Runtime é®é¢ã</p> 230<a id="more"></a> 231<hr> 232<blockquote> 233<p>æ¬æç« åºäºä»¥ä¸CCåè®®è¿è¡ç¥è¯å ±äº«ï¼ç½²åï¼BYï¼-éå䏿§ä½¿ç¨ï¼NCï¼-ç¦æ¢æ¼ç»ï¼NDï¼</p> 234</blockquote> 235<hr> 236<p>é è¯»æ¬æéè¦æ LinuxãDockerãDocker Compose çåºç¡ã</p> 237<h1 id="ç®ä»"><a href="#ç®ä»" class="headerlink" title="ç®ä»"></a>ç®ä»</h1><p>Docker Swarm å Docker Compose 䏿 ·ï¼é½æ¯ Docker 宿¹å®¹å¨ç¼æé¡¹ç®ï¼ä½ä¸åçæ¯ï¼Docker Compose æ¯ä¸ä¸ªå¨å个æå¡å¨æä¸»æºä¸å建å¤ä¸ªå®¹å¨çå·¥å ·ï¼è Docker Swarm 忝å°è¥å¹²å°ä¸»æºæ½è±¡ä¸ºä¸ä¸ªæ´ä½ï¼å¹¶ä¸éè¿ä¸ä¸ªå ¥å£ç»ä¸ç®¡çè¿äºä¸»æºä¸çåç§ Docker èµæºãSwarm å Kubernetes æ¯è¾ç±»ä¼¼ï¼ä½æ¯æ´å è½»ï¼å ·æçåè½ä¹è¾ Kubernetes æ´å°ä¸äºã</p> 238<h1 id="Docker-Machine"><a href="#Docker-Machine" class="headerlink" title="Docker Machine"></a>Docker Machine</h1><p>
238Docker Machine æ¯è¿è¡å¨æ¡é¢ç³»ç»ï¼WindowsãMacOSï¼ç Docker Toolbox ä¸çä¸ä¸ªå·¥å ·ï¼ä¸»è¦çåè½æ¯ç¨æ¥å¿«éå建å å« Docker ç¯å¢ç Linux èææºãå®é ä¸ä¸ä½¿ç¨ Docker Machine 乿¯å¯ä»¥ä½¿ç¨ Swarm é群çï¼ä½¿ç¨ Docker Machine åªæ¯ä¸ºäºæ¨¡æçå®çæå¡å¨ç¯å¢ã</p> 239<h2 id="åºæ¬ç¯å¢æå»º"><a href="#åºæ¬ç¯å¢æå»º" class="headerlink" title="åºæ¬ç¯å¢æå»º"></a>åºæ¬ç¯å¢æå»º</h2><p>�Docker Machine æ¬èº«å¹¶ä¸å å«èææºç¯å¢ï¼å®åªè´è´£è°ç¨ç¸å ³çèææºæ¥å£ï¼Microsoft Hyper-VãVirtual Boxï¼ï¼èªå¨ä¸è½½å¹¶é¨ç½²å å« Docker å ¨å®¶æ¡¶ç¯å¢çç³»ç»�éåãå æ¤ï¼å¨å¼å§åæä»¬éè¦å®è£ 以ä¸èææºè½¯ä»¶ã</p> 240<h3 id="MacOSï¼Virtual-Box"><a href="#MacOSï¼Virtual-Box" class="headerlink" title="MacOSï¼Virtual Box"></a>MacOSï¼Virtual Box</h3><p>Virtual Box æ¯å¼æºçèææºè½¯ä»¶ãå¨ MacOS ç³»ç»ä¸ï¼Docker Machine ä¼é»è®¤ä½¿ç¨è¯¥èææºè½¯ä»¶ã</p> 241<p><a href="https://www.virtualbox.org" target="_blank" rel="noopener">Virtualbox.org å®ç½ä¸è½½</a></p> 242<h3 id="Windowsï¼Microsoft-Hyper-V"><a href="#Windowsï¼Microsoft-Hyper-V" class="headerlink" title="Windowsï¼Microsoft Hyper-V"></a>Windowsï¼Microsoft Hyper-V</h3><p>å¨ Windows ä¸ä¼é»è®¤ä½¿ç¨ Hyper-V 使¯éè¿ <code>--driver</code> åæ°å¯ä»¥å¼ºå¶æå®ä½¿ç¨å ¶ä»èææºè½¯ä»¶ãå¦æä½ ä½¿ç¨çæ¯ Windows 10 ä¸ä¸çï¼é£ä¹è¿ä¸ªèææºè½¯ä»¶å·²ç»éæå¨è¯¥çæ¬çç³»ç»ä¸äºã</p> 243<h2 id="常ç¨å½ä»¤è¡¨"><a href="#常ç¨å½ä»¤è¡¨" class="headerlink" title="常ç¨å½ä»¤è¡¨"></a>常ç¨å½ä»¤è¡¨</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">docker-machine create <èææºåç§°></span><br><span class="line"><span class="comment"># åå»ºèææº</span></span><br><span class="line"></span><br><span class="line">docker-machine ls</span><br><span class="line"><span class="comment"># æ¾ç¤ºèæä¸»æºå表</span></span><br><span class="line"></span><br><span class="line">docker-machine ssh <èææºåç§°></span><br><span class="line"><span class="comment"># ä½¿ç¨ SSH è¿æ¥å°èææº</span></span><br><span class="line"></span><br><span class="line">docker-machine ip <èææºåç§°></span><br><span class="line"><span class="comment"># è·åèææºIPå°å</span></span><br><span class="line"></span><br><span class="line">docker-machine start <èææºåç§°></span><br><span class="line"><span class="comment"># å¯å¨èææº</span></span><br><span class="line"></span><br><span class="line">docker-machine stop <èææºåç§°></span><br><span class="line"><span class="comment"># åæ¢èææº</span></span><br><span class="line"></span><br><span class="line">docker-machine <span class="built_in">kill</span> <èææºåç§°></span><br><span class="line"><span class="comment"># 强å¶åæ¢èææº</span></span><br><span class="line"></span><br><span class="line">docker-machine rm <èææºåç§°></span><br><span class="line"><span class="comment"># å é¤èææº</span></span><br></pre></td></tr></table></figure> 244<h2 id="å建èæä¸»æº"><a href="#å建èæä¸»æº" class="headerlink" title="å建èæä¸»æº"></a>å建èæä¸»æº</h2><p>
244ä¸ºäºæ¨¡æçå®ç¯å¢ï¼æä»¬å建 3 个èç¹ï¼å ¶ä¸ 1 ä¸ªæ¯ <code>管çèç¹</code> è¿æ 2 个 <code>å·¥ä½èç¹</code> ã</p> 245<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker-machine create manager</span><br><span class="line">docker-machine create worker1</span><br><span class="line">docker-machine create worker2</span><br><span class="line"><span class="comment"># managerãworker1ãworker2 ä¸ºèææºåç§°</span></span><br></pre></td></tr></table></figure> 246<h2 id="æè½½ç®å½"><a href="#æè½½ç®å½" class="headerlink" title="æè½½ç®å½"></a>æè½½ç®å½</h2><p>为äºå¨ Docker Machine çèææºä¸é¨ç½²åºç¨ï¼æä»¬å¯ä»¥éè¿ <code>docker-machine scp</code> å½ä»¤å°é¡¹ç®æä»¶ä¼ å ¥ãæè ä¸ºäºæ¹ä¾¿æä»¬éæ¶ä¿®æ¹ï¼æä»¬å¯ä»¥éè¿æè½½ç®å½çæ¹å¼ï¼å°æ¬å°æä»¶çä»»æä¿®æ¹ï¼åæ¶åæ¥å°èææºä¸ã</p> 247<p>* ç±äº mount å½ä»¤æè½½ç®å½æ¯åºäº <code>sshfs</code> çï¼å æ¤ï¼éè¦å å®è£ è¯¥å·¥å ·åå ¶åç½®ä¾èµï¼ä»¥ MacOS 为ä¾ï¼<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">brew install osxfuse</span><br><span class="line">brew install gettext</span><br><span class="line">brew install sshfs</span><br></pre></td></tr></table></figure></p> 248<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">mkdir manager</span><br><span class="line">mkdir worker1b</span><br><span class="line">mkdir worker2</span><br><span class="line"><span class="comment"># 卿¬å°ä¸º 3 ä¸ªèææºåå«å建ç®å½</span></span><br><span class="line"></span><br><span class="line">docker-machine mount manager:/home/docker ./manager</span><br><span class="line"><span class="comment"># æè½½ç®å½ mount å½ä»¤ç第ä¸ä¸ªåæ°ææäºèææºåç§°åèææºç®å½ï¼ç¬¬äºä¸ªåæ°ææäºæ¬å°ç®å½</span></span><br><span class="line"></span><br><span class="line">touch manager/README.md</span><br><span class="line"><span class="comment"># 卿¬å°ç®å½æ°å»ºä¸ä¸ªæä»¶</span></span><br><span class="line">docker-machine ssh manager ls</span><br><span class="line"><span class="comment"># ä½¿ç¨ ssh å½ä»¤æ¥çå·¥ä½èç¹ä¸çæä»¶æ¯å¦åå¨</span></span><br></pre></td></tr></table></figure> 249<p>OKï¼å°è¿é Docker Machine çåå¤å·¥ä½å°±å·²ç»å®æäºã</p> 250<h1 id="Docker-Swarm"><a href="#Docker-Swarm" class="headerlink" title="Docker Swarm"></a>Docker Swarm</h1><p>Swarm æ¯ä¸ç»åºäº Docker çç©ç主æºé群ï¼è½ç¶é群模å¼ç¸å¯¹ä»¥å¾çè¿è¡æ¨¡å¼ä¸åï¼ä½æ¯ä½ ä»ç¶å¯ä»¥ä½¿ç¨ä½ æçæç Docker API è¿è¡ç®¡çãå¹¶ä¸å¤æ°æ åµä¸ï¼ä½ åªéè¦å¨ <code>管çèç¹</code> ä¸è¿è¡é¨ç½²æä½ï¼èæ éç»å½å°æå®çæºå¨ä¸ã</p> 251<h2 id="å建é群"><a href="#å建é群" class="headerlink" title="å建é群"></a>å建é群</h2><p>é¦å ï¼æä»¬ä½¿ç¨ <code>docker-machine ls</code> å½ä»¤ï¼æ¥çæä»¬å·²ç»å建好çèææºï¼å¹¶è®°ä¸ <code>管çèç¹</code> manager ç IP å°åã</p> 252<table> 253<thead> 254<tr> 255<th style="text-align:center">NAME</th> 256<th style="text-align:center">ACTIVE</th> 257<th style="text-align:center">DRIVER</th> 258<th style="text-align:center">STATE</th> 259<th style="text-align:center">URL</th> 260<th style="text-align:center">â¦</th> 261</tr> 262</thead> 263<tbody> 264<tr> 265<td style="text-align:center">manager</td> 266<td style="text-align:center">-</td> 267<td style="text-align:center">virtualbox</td> 268<td style="text-align:center">Running</td> 269<td style="text-align:center">tcp://192.168.99.100:2376</td> 270<td style="text-align:center">â¦</td> 271</tr> 272<tr> 273<td style="text-align:center">worker1</td> 274<td style="text-align:center">-</td> 275<td style="text-align:center">virtualbox</td> 276<td style="text-align:center">Running</td> 277<td style="text-align:center">tcp://192.168.99.101:2376</td> 278<td style="text-align:center">â¦</td> 279</tr> 280<tr> 281<td style="text-align:center">worker2</td> 282<td style="text-align:center">-</td> 283<td style="text-align:center">virtualbox</td> 284<td style="text-align:center">Running</td> 285<td style="text-align:center">tcp://192.168.99.102:2376</td> 286<td style="text-align:center">â¦</td> 287</tr> 288</tbody> 289</table> 290<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">docker-machine ssh manager</span><br><span class="line"><span class="comment"># è¿å ¥ç®¡çèç¹</span></span><br><span class="line"></span><br><span class="line">docker swarm init --advertise-addr 192.168.99.100</span><br><span class="line"><span class="comment"># åå§å swarm éè¿ --advertise-addr åæ°ç¡®å®é群管çèç¹æç»å®çç½å¡</span></span><br><span class="line"></span><br><span class="line">docker swarm join-token worker</span><br><span class="line"><span class="comment">
290# 使ç¨� join-token å½ä»¤çæä¾å·¥ä½èç¹ä½¿ç¨çå å ¥é群ç Token 串ï¼å¹¶å¤å¶ä¸æ¥ã</span></span><br><span class="line"></span><br><span class="line"><span class="comment">####### Ctrl + D 离å¼ç®¡çèç¹ #######</span></span><br><span class="line"></span><br><span class="line">docker-machine ssh worker1</span><br><span class="line"><span class="comment"># è¿å ¥ worker1 å·¥ä½èç¹</span></span><br><span class="line"></span><br><span class="line">docker swarm join --token SWMTKN-1-1zcuycf2uqevg5zfg91sorwnyi2itcm99wj1evr8h8mvtt0vtg-blnoyanjibhkmlw6cdubn2dnl 192.168.99.100:2377</span><br><span class="line"><span class="comment"># ç²è´´åæå¨ä¸»èç¹è·å¾ç Token 串</span></span><br><span class="line"></span><br><span class="line"><span class="comment">####### Ctrl + D ç¦»å¼ worker1 èç¹ï¼å¹¶å¯¹ worker2 éå¤ä¸è¿°æä½ #######</span></span><br></pre></td></tr></table></figure> 291<p>æåæä»¬åå° <code>管çèç¹</code> ä½¿ç¨ <code>docker node ls</code> æ¥æ¥çæä»¬å建çé群ã</p> 292<table> 293<thead> 294<tr> 295<th style="text-align:center">ID</th> 296<th style="text-align:center">HOSTNAME</th> 297<th style="text-align:center">STATUS</th> 298<th style="text-align:center">AVAILABILITY</th> 299<th style="text-align:center">MANAGER STATUS</th> 300<th style="text-align:center">ENGINE VERSION</th> 301</tr> 302</thead> 303<tbody> 304<tr> 305<td style="text-align:center">mmbh5fpw0mljoiddyzldwekwh *</td> 306<td style="text-align:center">manager</td> 307<td style="text-align:center">Ready</td> 308<td style="text-align:center">Active</td> 309<td style="text-align:center">Leader</td> 310<td style="text-align:center">18.06.1-ce</td> 311</tr> 312<tr> 313<td style="text-align:center">w68ntsp3l8vcqns6doma5hqd4</td> 314<td style="text-align:center">worker1</td> 315<td style="text-align:center">Ready</td> 316<td style="text-align:center">Active</td> 317<td style="text-align:center"></td> 318<td style="text-align:center">18.06.1-ce</td> 319</tr> 320<tr> 321<td style="text-align:center">ilq3qvycdp4739ghtvty02lsf</td> 322<td style="text-align:center">worker2</td> 323<td style="text-align:center">Ready</td> 324<td style="text-align:center">Active</td> 325<td style="text-align:center"></td> 326<td style="text-align:center">18.06.1-ce</td> 327</tr> 328</tbody> 329</table> 330<p>妿ä¸è¿°æ¥éª¤ä¸æä»»ä½çæä½é®é¢ï¼é½å¯ä»¥ä½¿ç¨ <code>docker swarm leave</code> å½ä»¤æ¥ç¦»å¼é群并é建ã</p> 331<h2 id="é¨ç½²åºç¨"><a href="#é¨ç½²åºç¨" class="headerlink" title="é¨ç½²åºç¨"></a>é¨ç½²åºç¨</h2><p>ç¡®å®å®æä»¥ä¸æ¥éª¤åï¼åå»ºèææºãå建� Swarm é群ãæè½½ç®å½ï¼ï¼æä»¬å¼å§é¨ç½²åºç¨ã为äºéä½å¦ä¹ ææ¬ï¼æä»¬ç¼åä¸ä¸ªç®åç <code>Docker Compose</code> æä»¶ã</p> 332<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 该æä»¶å为ï¼docker-compose.yml</span></span><br><span class="line"><span class="attr">version:</span> <span class="string">"3"</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line"><span class="attr"> service-manager:</span></span><br><span class="line"><span class="attr"> image:</span> <span class="attr">alpine:3.8</span></span><br><span class="line"><span class="attr"> command:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">top</span></span><br></pre></td></tr></table></figure> 333<p>ç¶åå°è¯¥æä»¶æ¾å ¥æä»¬æè½½çç®å½ä¸ï¼ä½¿ç¨ <code>docker-machine ssh manager</code> å½ä»¤è¿å ¥ç®¡çèç¹ãï¼<strong>请注æï¼</strong> é对 Swarm é群è¿è¡çæä½ï¼é½å¿ é¡»å¨<strong>管çèç¹ä¸è¿è¡</strong>ï¼</p> 334<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker swarm deploy -c docker-compose.yml swarm-manager</span><br><span class="line"><span class="comment">
334# ä½¿ç¨ docker swarm deploy å½ä»¤é¨ç½²åºç¨</span></span><br><span class="line"><span class="comment"># -c åæ°ææäº Docker Compose çé ç½®æä»¶</span></span><br><span class="line"><span class="comment"># ç»å°¾çåæ°ææäºè¯¥ stack çå å</span></span><br></pre></td></tr></table></figure> 335<p>æåä½¿ç¨ <code>docker ps -a</code> å½ä»¤ï¼å°±å¯ä»¥ç尿们é¨ç½²çæå¡å®¹å¨äºã</p> 336<table> 337<thead> 338<tr> 339<th style="text-align:center">CONTAINER ID</th> 340<th style="text-align:center">IMAGE</th> 341<th style="text-align:center">COMMAND</th> 342<th style="text-align:center">CREATED</th> 343<th style="text-align:center">STATUS</th> 344<th style="text-align:center">â¦</th> 345</tr> 346</thead> 347<tbody> 348<tr> 349<td style="text-align:center">3aa35fe94403</td> 350<td style="text-align:center">alpine:3.8</td> 351<td style="text-align:center">âtopâ</td> 352<td style="text-align:center">49 seconds ago</td> 353<td style="text-align:center">Up 48 seconds</td> 354<td style="text-align:center">â¦</td> 355</tr> 356</tbody> 357</table> 358<p>ä½¿ç¨ <code>docker stack ls</code> å½ä»¤å¯ä»¥æ¥çå½åé群ä¸é¨ç½²çææåºç¨å </p> 359<table> 360<thead> 361<tr> 362<th style="text-align:center">NAME</th> 363<th style="text-align:center">SERVICES</th> 364<th style="text-align:center">ORCHESTRATOR</th> 365</tr> 366</thead> 367<tbody> 368<tr> 369<td style="text-align:center">swarm-manager</td> 370<td style="text-align:center">1</td> 371<td style="text-align:center">Swarm</td> 372</tr> 373</tbody> 374</table> 375<p>å¦æä½ ç容卿²¡æè¿è¡èµ·æ¥ï¼å¯ä»¥ä½¿ç¨ <code>docker stack ps swarm-manager --no-trunc</code> å½ä»¤æ¥çå ·ä½æ¯å 为ä»ä¹åå èåºéçã</p> 376<h2 id="å°åºç¨é¨ç½²è³ç¹å®ç主æºèç¹"><a href="#å°åºç¨é¨ç½²è³ç¹å®ç主æºèç¹" class="headerlink" title="å°åºç¨é¨ç½²è³ç¹å®ç主æºèç¹"></a>å°åºç¨é¨ç½²è³ç¹å®ç主æºèç¹</h2><p>é¨ç½²ç¹å®ä¸»æºèç¹ï¼éè¦éè¿ Docker Compose æä»¶ä¸ç <code>deploy.placement.constraints</code> é ç½®è¿è¡çº¦æï¼ä¾å¦æä»¬å¯ä»¥å°æå¡é¨ç½²è³ææ <code>Ubuntu</code> ç³»ç»ä¸ï¼æè åªå¨ <code>å·¥ä½èç¹</code> ä¸é¨ç½²ãå½ç¶ï¼ä¸ºäºå®å ¨ç¡®å®é¨ç½²è³åªä¸ªèç¹ï¼æä»¬éè¦ç»ä¸»æºèç¹å¢å <code>Labels</code> æ ç¾ï¼å¹¶éè¿æ ç¾è¿è¡çº¦æã</p> 377<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">docker-machine ssh manager</span><br><span class="line">docker node update --label-add role=manager</span><br><span class="line"><span class="comment"># --label-add åæ°ä¼ å ¥ç弿¯ KV ç±»åçï¼= 符å·ä¹åç role 为é®åï¼= 符å·ä¹åç manager 为é®å¼</span></span><br><span class="line"></span><br><span class="line">docker-machine ssh worker1</span><br><span class="line">docker node update --label-add role=worker1</span><br><span class="line"></span><br><span class="line">docker-machine ssh worker2</span><br><span class="line">docker node update --label-add role=worker2</span><br></pre></td></tr></table></figure> 378<p>ç¶åï¼æä»¬å为 <code>å·¥ä½èç¹</code> ç¼å 2 个 Docker Compose é ç½®æä»¶ï¼</p> 379<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># worker1.yml</span></span><br><span class="line"><span class="attr">version:</span> <span class="string">"3"</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line"><span class="attr"> service-worker1:</span></span><br><span class="line"><span class="attr"> image:</span> <span class="attr">alpine:3.8</span></span><br><span class="line"><span class="attr"> deploy:</span></span><br><span class="line"><span class="attr"> placement:</span></span><br><span class="line"><span class="attr"> constraints:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">node.labels.role</span> <span class="string">==</span> <span class="string">worker1</span></span><br><span class="line"><span class="attr"> command:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">top</span></span><br><span class="line"></span><br><span class="line"><span class="attr"> service-worker2:</span></span><br><span class="line"><span class="attr"> image:</span> <span class="attr">alpine:3.8</span></span><br><span class="line"><span class="attr"> deploy:</span></span><br><span class="line"><span class="attr"> placement:</span></span><br><span class="line"><span class="attr"> constraints:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">node.labels.role</span> <span class="string">==</span> <span class="string">worker1</span></span><br><span class="line"><span class="attr"> command:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">top</span></span><br></pre></td></tr></table></figure> 380<p>æåï¼å¨ç®¡çèç¹æ§è¡é¨ç½²å½ä»¤ã</p> 381<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker swarm deploy -c worker1.yml swarm-worker1</span><br></pre></td></tr></table></figure> 382<p>æ¤æ¶ï¼å¦æä½ å¨ <code>管çèç¹</code> ä½¿ç¨ <code>docker ps -a</code> å½ä»¤ä¼åç° Docker 并没æå建æ°ç容å¨ãå 为æä»¬çº¦æäºåºç¨çé¨ç½²ä½ç½®ï¼ä¹åæä»¬è¿å ¥ <code>worker1</code> èç¹ï¼æ¥ç容å¨å表就å¯ä»¥ç尿们é¨ç½²çåºç¨äºã</p> 383<h2 id="ä¼é çç¼å-Nginx-è´è½½åè¡¡"><a href="#ä¼é çç¼å-Nginx-è´è½½åè¡¡" class="headerlink" title="ä¼é çç¼å Nginx è´è½½åè¡¡"></a>ä¼é çç¼å Nginx è´è½½åè¡¡</h2><p>宿åºç¨é¨ç½²åï¼ç°å¨æä»¬è¿å ¥ <code>管çèç¹</code>ï¼ä½¿ç¨ <code>docker ps -a</code> è·å¾å®¹å¨ IDï¼ç¶åä½¿ç¨ <code>docker exec -it 容å¨ID /bin/sh</code> è¿å ¥å®¹å¨å é¨ãç¶åæ§è¡ <code>ping service-worker1</code> ä¼åç°æ¯å¯ä»¥ ping éçï¼å®é ä¸å½æ²¡æç¹æ®é ç½®æ¶ï¼å®¹å¨ä¼é¨ç½²å¨ Swarm èªå¸¦ç Ingress ç½ç»ç¯å¢ä¸ï¼Overlayç±»åï¼ï¼å¨è¯¥ç½ç»ç¯å¢ä¸çææå®¹å¨æå¡ï¼æ¯å¯ä»¥ <code>跨主æº</code> è¿è¡éä¿¡çï¼å¹¶ä¸ä¼èªå¨å°æå¡åæ å°ä¸º Hostnameãç°å¨ï¼å设æä»¬æ 5 个工ä½èç¹ï¼
383è¿è¡äºä¸æ¹æå¡ï¼éè¦ä½¿ç¨ Nginx è¿è¡è´è½½åè¡¡ï¼è¦æä¹åï¼</p> 384<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">upstream my-load-balance{</span><br><span class="line"> server service-worker1:80;</span><br><span class="line"> server service-worker2:80;</span><br><span class="line"> server service-worker3:80;</span><br><span class="line"> server service-worker4:80;</span><br><span class="line"> server service-worker5:80;</span><br><span class="line"> ...</span><br><span class="line">}</span><br></pre></td></tr></table></figure> 385<p>ç®ç´ç½çäºææ²¡æï¼å¯¹äºè´è½½åè¡¡å¨æ¥è¯´ï¼æä»¬å®å ¨ä¸éè¦�å»ç®¡�æå¡èç¹å°åºé¨ç½²å°äºåªä¸ªä¸»æºä¸æè ç¯å¢æ¯ææ ·çã�æä»¬åªéè¦ç¥éæå¡åå³å¯ã</p> 386<h2 id="é群å ç½®çè´è½½åè¡¡"><a href="#é群å ç½®çè´è½½åè¡¡" class="headerlink" title="é群å ç½®çè´è½½åè¡¡"></a>é群å ç½®çè´è½½åè¡¡</h2><p>ç±»ä¼¼ä¸æ¹�ç®åçç¥çè´è½½åè¡¡ï¼Swarm é群æ¬èº«ä¹æ¯å¯ä»¥åå°çï¼ä½ å¯ä»¥äº²èªè¯ä¸è¯ï¼å°ç¸åæå¡åçæå¡ï¼é¨ç½²å¨ä¸åç主æºä¸ï¼ç¶åå¨ç®¡çèç¹ä½¿ç¨ ping å½ä»¤ï¼å ¶è¯·æ±ä¼éæºè½¬åå° 2 å°ä¸»æºèç¹ä¸ã</p> 387<h1 id="THE-END"><a href="#THE-END" class="headerlink" title="THE END"></a>THE END</h1><p>å ³äºæå¡èç¹ç管çãåºç¨å ç管çãé群å 容å¨ç管ççæç« ï¼è¯·åèæç�ä¸ä¸ç¯æç« ï¼ææ ï¼ã</p> 388 389 390 </div> 391 <footer class="article-footer"> 392 <div class="share-container"> 393 394 395 396</div> 397 398 <a data-url="https://saekiraku.github.io/article/53786/" data-id="cjoe225m50000i79kctcb8yba" class="article-share-link"><i class="fa fa-share"></i>å享å°</a>
399<script> 400 (function ($) { 401 // Prevent duplicate binding 402 if (typeof(__SHARE_BUTTON_BINDED__) === 'undefined' || !__SHARE_BUTTON_BINDED__) { 403 __SHARE_BUTTON_BINDED__ = true; 404 } else { 405 return; 406 } 407 $('body').on('click', function() { 408 $('.article-share-box.on').removeClass('on'); 409 }).on('click', '.article-share-link', function(e) { 410 e.stopPropagation(); 411 412 var $this = $(this), 413 url = $this.attr('data-url'), 414 encodedUrl = encodeURIComponent(url), 415 id = 'article-share-box-' + $this.attr('data-id'), 416 offset = $this.offset(), 417 box; 418 419 if ($('#' + id).length) { 420 box = $('#' + id); 421 422 if (box.hasClass('on')){ 423 box.removeClass('on'); 424 return; 425 } 426 } else { 427 var html = [ 428 '<div id="' + id + '" class="article-share-box">', 429 '<input class="article-share-input" value="' + url + '">', 430 '<div class="article-share-links">', 431 '<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="fa fa-twitter article-share-twitter" target="_blank" title="Twitter"></a>', 432 '<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="fa fa-facebook article-share-facebook" target="_blank" title="Facebook"></a>', 433 '<a href="http://pinterest.com/pin/create/button/?url=' + encodedUrl + '" class="fa fa-pinterest article-share-pinterest" target="_blank" title="Pinterest"></a>', 434 '<a href="https://plus.google.com/share?url=' + encodedUrl + '" class="fa fa-google article-share-google" target="_blank" title="Google+"></a>', 435 '</div>', 436 '</div>' 437 ].join(''); 438 439 box = $(html); 440 441 $('body').append(box); 442 } 443 444 $('.article-share-box.on').hide(); 445 446 box.css({ 447 top: offset.top + 25, 448 left: offset.left 449 }).addClass('on'); 450 451 }).on('click', '.article-share-box', function (e) { 452 e.stopPropagation(); 453 }).on('click', '.article-share-box-input', function () { 454 $(this).select(); 455 }).on('click', '.article-share-box-link', function (e) { 456 e.preventDefault(); 457 e.stopPropagation(); 458 459 window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); 460 }); 461 })(jQuery); 462</script>
462 463 464 465 466 467 </footer> 468 </div> 469 470 471<nav id="article-nav"> 472 473 474 <a href="/article/18577/" id="article-nav-older" class="article-nav-link-wrap"> 475 <strong class="article-nav-caption">ä¸ä¸ç¯</strong> 476 <div class="article-nav-title">ãè¯ãMacOSä¸ç交åç¼è¯</div> 477 </a> 478 479</nav> 480 481 482 483</article> 484 485 486 487 488 489</section> 490 491 492<aside id="sidebar"> 493 494 495 <div class="widget-wrap"> 496 <h3 class="widget-title">ææ°æç« </h3> 497 <div class="widget"> 498 <ul id="recent-post" class=""> 499 500 <li> 501 502 <div class="item-thumbnail"> 503 <a href="/article/53786/" class="thumbnail"> 504 505 506 <span style="background-image:url(https://saekiraku-1253597019.coscd.myqcloud.com/image/m4cz7.png)" alt="Docker Swarm 容å¨é群ï¼ä¸ï¼" class="thumbnail-image"></span> 507 508</a> 509 510 </div> 511 512 <div class="item-inner"> 513 <p class="item-category"></p> 514 <p class="item-title"><a href="/article/53786/" class="title">Docker Swarm 容å¨é群ï¼ä¸ï¼</a></p> 515 <p class="item-date"><time datetime="2018-10-29T01:34:11.000Z" itemprop="datePublished">2018-10-29</time></p> 516 </div> 517 </li> 518 519 <li> 520 521 <div class="item-thumbnail"> 522 <a href="/article/18577/" class="thumbnail"> 523 524 525 <span style="background-image:url(https://saekiraku-1253597019.coscd.myqcloud.com/image/z4c9z.png)" alt="ãè¯ãMacOSä¸ç交åç¼è¯" class="thumbnail-image"></span> 526 527</a> 528 529 </div> 530 531 <div class="item-inner"> 532 <p class="item-category"><a class="article-category-link" href="/categories/Linux/">Linux</a></p> 533 <p class="item-title"><a href="/article/18577/" class="title">ãè¯ãMacOSä¸ç交åç¼è¯</a></p> 534 <p class="item-date"><time datetime="2018-09-08T12:09:52.000Z" itemprop="datePublished">2018-09-08</time></p> 535 </div> 536 </li> 537 538 <li> 539 540 <div class="item-thumbnail"> 541 <a href="/article/20538/" class="thumbnail"> 542 543 544 <span class="thumbnail-image thumbnail-none"></span> 545 546</a> 547 548 </div> 549 550 <div class="item-inner"> 551 <p class="item-category"><a class="article-category-link" href="/categories/å¾®æå¡/">å¾®æå¡</a></p> 552 <p class="item-title"><a href="/article/20538/" class="title">å¯åç½å¾®æå¡æ¶æå®è·µ</a></p> 553 <p class="item-date"><time datetime="2018-07-31T02:20:53.000Z" itemprop="datePublished">2018-07-31</time></p> 554 </div> 555 </li> 556 557 <li> 558 559 <div class="item-thumbnail"> 560 <a href="/article/21343/" class="thumbnail"> 561 562 563 <span style="background-image:url(https://saekiraku-1253597019.coscd.myqcloud.com/image/9zx2j.png)" alt="Linux åºæ¬å®å ¨çç¥" class="thumbnail-image"></span> 564 565</a> 566 567 </div> 568 569 <div class="item-inner"> 570 <p class="item-category"><a class="article-category-link" href="/categories/è¿ç»´/">è¿ç»´</a></p> 571 <p class="item-title"><a href="/article/21343/" class="title">Linux åºæ¬å®å ¨çç¥</a></p> 572 <p class="item-date"><time datetime="2018-07-11T08:07:40.000Z" itemprop="datePublished">2018-07-11</time></p> 573 </div> 574 </li> 575 576 <li> 577 578 <div class="item-thumbnail"> 579 <a href="/article/23722/" class="thumbnail"> 580 581
582 <span style="background-image:url(https://saekiraku-1253597019.coscd.myqcloud.com/image/jsope.png)" alt="åºäº Ansible çåå¸å¼ç¬è«èªå¨åé¨ç½²" class="thumbnail-image"></span> 583 584</a> 585 586 </div> 587 588 <div class="item-inner"> 589 <p class="item-category"><a class="article-category-link" href="/categories/è¿ç»´/">è¿ç»´</a></p> 590 <p class="item-title"><a href="/article/23722/" class="title">åºäº Ansible çåå¸å¼ç¬è«èªå¨åé¨ç½²</a></p> 591 <p class="item-date"><time datetime="2018-06-14T07:24:10.000Z" itemprop="datePublished">2018-06-14</time></p> 592 </div> 593 </li> 594 595 </ul> 596 </div> 597 </div> 598 599 600 601 <div class="widget-wrap"> 602 <h3 class="widget-title">åç±»</h3> 603 <div class="widget"> 604 <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/产å/">产å</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/å端/">å端</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/å¾®æå¡/">å¾®æå¡</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/è¿ç»´/">è¿ç»´</a><span class="category-list-count">2</span></li></ul> 605 </div> 606 </div> 607 608 609 610 <div class="widget-wrap"> 611 <h3 class="widget-title">彿¡£</h3> 612 <div class="widget"> 613 <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/10/">åæ 2018</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/09/">乿 2018</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/07/">䏿 2018</a><span class="archive-list-count">2</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/06/">å æ 2018</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2018/05/">äºæ 2018</a><span class="archive-list-count">2</span></li></ul> 614 </div> 615 </div> 616 617 618 619 <div class="widget-wrap"> 620 <h3 class="widget-title">æ ç¾äº</h3> 621 <div class="widget tagcloud"> 622 <a href="/tags/Linux/" style="font-size: 20px;">Linux</a> <a href="/tags/webpack/" style="font-size: 10px;">webpack</a> <a href="/tags/å®å ¨/" style="font-size: 10px;">å®å ¨</a> <a href="/tags/å¾®æå¡/" style="font-size: 10px;">å¾®æå¡</a> 623 </div> 624 </div> 625 626 627 628 <div class="widget-wrap widget-list"> 629 <h3 class="widget-title">龿¥</h3> 630 <div class="widget"> 631 <ul> 632 633 <li> 634 <a href="http://www.change.tm">å¯åç½</a> 635 </li> 636 637 </ul> 638 </div> 639 </div> 640 641 642 643 <div id="toTop" class="fa fa-angle-up"></div> 644</aside> 645 646 647 </div> 648 <footer id="footer"> 649 <div class="outer"> 650 <div id="footer-info" class="inner"> 651 © 2018 ä½ä¼¯æ¥½<br> 652 Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>. Theme by <a href="http://github.com/ppoffice">PPOffice</a> 653 </div> 654 </div> 655</footer> 656 657 658 659 660
660<script src="/libs/lightgallery/js/lightgallery.min.js"></script>
660 661
661<script src="/libs/lightgallery/js/lg-thumbnail.min.js"></script>
661 662
662<script src="/libs/lightgallery/js/lg-pager.min.js"></script>
662 663
663<script src="/libs/lightgallery/js/lg-autoplay.min.js"></script>
663 664
664<script src="/libs/lightgallery/js/lg-fullscreen.min.js"></script>
664 665
665<script src="/libs/lightgallery/js/lg-zoom.min.js"></script>
665 666
666<script src="/libs/lightgallery/js/lg-hash.min.js"></script>
666 667
667<script src="/libs/lightgallery/js/lg-share.min.js"></script>
667 668
668<script src="/libs/lightgallery/js/lg-video.min.js"></script>
668 669 670 671
671<script src="/libs/justified-gallery/jquery.justifiedGallery.min.js"></script>
671 672 673 674 675 676 677<!-- Custom Scripts -->
678<script src="/js/main.js"></script>
678 679 680 </div> 681</body> 682</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.