-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
537 lines (286 loc) · 306 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Wrecked</title>
<subtitle>Holding You Back As I Breath You In</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://yoursite.com/"/>
<updated>2020-05-25T06:35:14.697Z</updated>
<id>http://yoursite.com/</id>
<author>
<name>Wrecked</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Alibaba Arthas</title>
<link href="http://yoursite.com/2020/05/25/Alibaba%20Arthas/"/>
<id>http://yoursite.com/2020/05/25/Alibaba Arthas/</id>
<published>2020-05-25T06:49:08.000Z</published>
<updated>2020-05-25T06:35:14.697Z</updated>
<content type="html"><![CDATA[<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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">文档地址[https://alibaba.github.io/arthas/advanced-use.html]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ curl -O https://alibaba.github.io/arthas/arthas-boot.jar</span><br><span class="line"></span><br><span class="line">#Demo进程是第2个,则输入2,再输入回车/enter。Arthas会attach到目标进程上,并输出日志</span><br><span class="line">$ java -jar arthas-boot.jar</span><br><span class="line">* [1]: 35542</span><br><span class="line"> [2]: 71560 arthas-demo.jar</span><br><span class="line"> </span><br><span class="line">[INFO] Try to attach process 71560</span><br><span class="line">[INFO] Attach process 71560 success.</span><br><span class="line">[INFO] arthas-client connect 127.0.0.1 3658</span><br><span class="line"> ,---. ,------. ,--------.,--. ,--. ,---. ,---.</span><br><span class="line"> / O \ | .--. ''--. .--'| '--' | / O \ ' .-'</span><br><span class="line">| .-. || '--'.' | | | .--. || .-. |`. `-.</span><br><span class="line">| | | || |\ \ | | | | | || | | |.-' |</span><br><span class="line">`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'</span><br><span class="line"> </span><br><span class="line">wiki: https://alibaba.github.io/arthas</span><br><span class="line">version: 3.0.5.20181127201536</span><br><span class="line">pid: 71560</span><br><span class="line">time: 2018-11-28 19:16:24</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#当前系统的实时数据面板</span><br><span class="line">$ dashboard </span><br><span class="line"> </span><br><span class="line">#arthas-demo进程的Main Class </span><br><span class="line">$ thread 1 | grep 'main(' </span><br><span class="line"> at demo.MathGame.main(MathGame.java:17)</span><br><span class="line"></span><br><span class="line">#反编译python</span><br><span class="line">$ jad demo.MathGame </span><br><span class="line"> </span><br><span class="line">#通过watch命令来查看demo.MathGame#primeFactors函数的返回值 </span><br><span class="line">$ watch demo.MathGame primeFactors returnObj </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">#返回当前的工作目录,和linux命令类似 </span><br><span class="line">$ pwd</span><br><span class="line"> /data/alpha-market/jars</span><br><span class="line"> </span><br><span class="line">#查看当前会话的信息 </span><br><span class="line">$ session</span><br><span class="line"> Name Value </span><br><span class="line">-------------------------------------------------- </span><br><span class="line"> JAVA_PID 7276 </span><br><span class="line"> SESSION_ID 8af7f372-0c5d-4d6a-972b-33840aa6d2fb</span><br><span class="line"> </span><br><span class="line"># 打印命令历史</span><br><span class="line"> $ history</span><br><span class="line"> 1 dashboard</span><br><span class="line"> 2 dashboard</span><br><span class="line"> 3 thread 1 | grep 'main('</span><br><span class="line"> 4 jad demo.MathGame</span><br><span class="line"> 5 watch demo.MathGame primeFactors returnObj</span><br><span class="line"> 6 jvm</span><br><span class="line"> </span><br><span class="line">#关闭 Arthas 服务端,所有 Arthas 客户端全部退出</span><br><span class="line">$ stop</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">#查看当前 JVM 的线程堆栈信息</span><br><span class="line">$ thread</span><br><span class="line"> Threads Total: 90, NEW: 0, RUNNABLE: 21, BLOCKED: 0, WAITING: 44, TIMED_WAITING: 25, TERMINATED: 0 </span><br><span class="line">ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON </span><br><span class="line">75 Thread-2 main 5 RUNNABLE 29 4:12 false false </span><br><span class="line">1511 as-command-execute-daemon system 10 RUNNABLE 20 0:0 false true </span><br><span class="line">82 SendDepth-pool-2 main 5 RUNNABLE 17 28:22 false false </span><br><span class="line">79 Thread-4 main 5 TIMED_WAITING 14 12:20 false false </span><br><span class="line">1456 task-56 main 5 TIMED_WAITING 4 0:1 false false </span><br><span class="line">1453 task-53 main 5 TIMED_WAITING 3 0:1 false false </span><br><span class="line">1454 task-54 main 5 TIMED_WAITING 3 0:1 false fal</span><br><span class="line"> </span><br><span class="line">#查看当前 JVM 的信息</span><br><span class="line">$ jvm</span><br><span class="line"></span><br><span class="line">#通过getstatic命令可以方便的查看类的静态属性</span><br><span class="line">$ getstatic com.alpha.market.service.impl.QueryServiceImpl logger</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class
</summary>
<category term="Arthas" scheme="http://yoursite.com/categories/Arthas/"/>
<category term="Arthas" scheme="http://yoursite.com/tags/Arthas/"/>
</entry>
<entry>
<title>Docker常用命令</title>
<link href="http://yoursite.com/2020/05/25/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/"/>
<id>http://yoursite.com/2020/05/25/Docker常用命令/</id>
<published>2020-05-25T01:39:31.000Z</published>
<updated>2020-05-25T06:29:03.985Z</updated>
<content type="html"><![CDATA[<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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br></pre></td><td class="code"><pre><span class="line">[容器]</span><br><span class="line"> $ docker run -ite --name runoob ubuntu:15.10 //-t: 在新容器内指定一个伪终端或终端。 -i: 允许你对容器内的标准输入 (STDIN) 进行交互。 --name 标识来命名容器,配置名称来与虚拟ip做映射 d 后台运行容器</span><br><span class="line"> </span><br><span class="line"> $ docker pull ubuntu //获取镜像</span><br><span class="line"> </span><br><span class="line"> $ docker ps -a //查看所有的容器命令</span><br><span class="line"> </span><br><span class="line"> $ docker start <容器 ID> //使用 docker start 启动一个已停止的容器:</span><br><span class="line"> </span><br><span class="line"> $ docker stop <容器 ID> //停止容器的命令</span><br><span class="line"> </span><br><span class="line"> $ docker restart <容器 ID> //重启容器的命令</span><br><span class="line"> </span><br><span class="line"> $ docker exec <容器 ID> //在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令 ex:docker exec -it 243c32535da7 /bin/bash</span><br><span class="line"> </span><br><span class="line"> $ docker rm -f <容器 ID> //删除容器使用 docker rm 命令 </span><br><span class="line"> </span><br><span class="line"> $ docker port <容器 ID> //可以查看指定(ID 或者名字)容器的某个确定端口映射到宿主机的端口号</span><br><span class="line"> </span><br><span class="line"> $ docker logs -f <容器 ID> //可以查看容器内部的标准输出。 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。</span><br><span class="line"> </span><br><span class="line"> $ docker top <容器 ID> //查看容器内部运行的进程</span><br><span class="line"> </span><br><span class="line"> $ docker inspect <容器 ID> //查看 Docker 的底层信息</span><br><span class="line"> </span><br><span class="line">[镜像]</span><br><span class="line"> </span><br><span class="line"> $ docker images //本地主机上的镜像</span><br><span class="line"> </span><br><span class="line"> $ docker search httpd //查找镜像 </span><br><span class="line"> </span><br><span class="line"> $ docker pull ubuntu:13.10 //拖取镜像</span><br><span class="line"> </span><br><span class="line"> $ docker rmi hello-world //删除镜像</span><br><span class="line"> </span><br><span class="line"> $ docker build -t runoob/centos:6.7 . //-t :指定要创建的目标镜像名 .表示 Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径</span><br><span class="line"> </span><br><span class="line"> $ docker tag 860c279d2fec runoob/centos:dev, // 为镜像添加一个新的标签</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">[容器链接]</span><br><span class="line"></span><br><span class="line"> $ docker run -d -p 5000:5000 training/webapp python app.py //网络端口映射 -P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定的主机端口。</span><br><span class="line"> </span><br><span class="line"> $ docker network create -d bridge test-net //创建一个新的 Docker 网络 -d 参数指定 Docker 网络类型,有 bridge、overlay</span><br><span class="line"> </span><br><span class="line"> $ docker run -itd --name test1 --network test-net ubuntu /bin/bash //运行一个容器并连接到新建的 test-net 网络</span><br><span class="line"> </span><br><span class="line"> $ docker run -itd --name test2 --network test-net ubuntu /bin/bash //运行一个容器并连接到新建的 test-net 网络</span><br><span class="line"> </span><br><span class="line">[单向通信] (容器创建完成后都会生成一个唯一的ip,这个ip外界不能直接访问,他只用于容器之间进行通信交互用。这就是虚拟ip 容器之间的虚拟ip是互通的)</span><br><span class="line"> </span><br><span class="line"> $ docker run -d --name mytomcat tomcat //创建tomcat容器 --name就是给docker配置名称来与虚拟ip做映射</span><br><span class="line"> </span><br><span class="line"> $ docker run -d --name database -it mysql /bin/bash //创建mysql容器</span><br><span class="line"> </span><br><span class="line"> $ docker inspect <容器 ID> //容器的虚拟ip怎么查 进入mytomcat的容器然后去ping database的ip看看是否通</span><br><span class="line"> </span><br><span class="line"> $ docker exec -it mytomcat /bin/bash </span><br><span class="line"> ping 172.17.0.6</span><br><span class="line"> </span><br><span class="line">[单向通信使用容器昵称] </span><br><span class="line"> </span><br><span class="line"> $ docker rm -f mytomcat //强制删除老的</span><br><span class="line"> </span><br><span class="line"> $ docker run -d --name mytomcat --link database tomcat //创建新的容器,用--link指定我们想连的配置的数据库“域名”</span><br><span class="line"> </span><br><span class="line"> $ docker exec -it mytomcat /bin/bash //进入mytomcat容器</span><br><span class="line"> </span><br><span class="line"> $ ping database</span><br><span class="line"></span><br><span class="line">[双向通信]</span><br><span class="line"></span><br><span class="line"> 暂无</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">[容器间数据共享]</span><br><span class="line"></span><br><span class="line"> $ docker run -v /home/main/programe:/usr/local/tomcat/webapps tomcat //比如如下:他会把/home/main/programe下面的所有目录都挂载到容器的/usr/local/tomcat/webapps下</span><br><span class="line"></span><br><span class="line">[共享容器概念]</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"> $ docker create --name <共享容器名称> -v <宿主机路径>:<容器内挂载路径> 镜像名称 /bin/true </span><br><span class="line"> </span><br><span class="line"> $ docker run --volumes-from <共享容器名称> --name xxx -d <镜像名称> </span><br><span class="line"> </span><br><span class="line"> $ docker create --name webpage -v /home/docker:/usr/local/ tomcat /bin/true //创建共享容器</span><br><span class="line"> </span><br><span class="line"> $ docker run -p 8300:8080 --volumes-from webpage --name t3 -d tomcat //采取共享容器的配置来启动容器</span><br><span class="line"> </span><br><span class="line"> $ docker run -p 8400:8080 --volumes-from webpage --name t4 -d tomcat</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">[DockerCompose] </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">[Docker File ]</span><br><span class="line"></span><br><span class="line"> 1.FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。</span><br><span class="line"> </span><br><span class="line"> 2.RUN:用于执行后面跟着的命令行命令。构建镜像时运行,有以下俩种格式:</span><br><span class="line"> </span><br><span class="line"> Shell 格式:</span><br><span class="line"> RUN <命令行命令></span><br><span class="line"> # <命令行命令> 等同于,在终端操作的 shell 命令</span><br><span class="line"></span><br><span class="line"> exec 格式:</span><br><span class="line"> RUN ["可执行文件", "参数1", "参数2"]</span><br><span class="line"> # 例如:</span><br><span class="line"> # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline </span><br><span class="line"> </span><br><span class="line"> 3.COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径</span><br><span class="line"> </span><br><span class="line"> 4.ADD: ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径> </span><br><span class="line"> ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效</span><br><span class="line"> </span><br><span class="line"> 5.CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:</span><br><span class="line"> </span><br><span class="line"> 1.CMD 在docker run 时运行。RUN 是在 docker build。为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束</span><br><span class="line"> 2.CMD 指令指定的程序可被 docker run命令行参数中指定要运行的程序所覆盖,即如果容器启动的时候有其他额外的附加指令,则CMD指令不生效</span><br><span class="line"> 3.如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效</span><br><span class="line"> </span><br><span class="line"> 6.ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。</span><br><span class="line"> 说明:ENTRYPOINT和CMD可以共用,若共用则他会一起合并执行</span><br><span class="line"> ENTRYPOINT ["ps"]</span><br><span class="line"> CMD ["-ef"]</span><br><span class="line"> 他给我们合并执行了:ps -ef,这么做的好处在于如果容器启动的时候添加额外指令,CMD会失效,可以理解成我们可以动态的改变CMD内容而不需要重新构建镜像等操作。比如</span><br><span class="line"> docker run chentongwei.com/docker-run -aux</span><br><span class="line"> 结果直接变成了 ps -aux</span><br><span class="line"> </span><br><span class="line"> 7.ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量,${xxx}来引用</span><br><span class="line"> </span><br><span class="line"> 8.ARG:构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。</span><br><span class="line"> </span><br><span class="line"> 9.VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。避免重要的数据,因容器重启而丢失,这是非常致命的</span><br><span class="line"> </span><br><span class="line"> 10.EXPOSE:声明端口,帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射,在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。</span><br><span class="line"> </span><br><span class="line"> 11.WORKDIR:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,</span><br><span class="line"> 每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。</span><br><span class="line"></span><br><span class="line"> 12.USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。</span><br><span class="line"> </span><br><span class="line"> 13.HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态</span><br><span class="line"></span><br><span class="line"> 14.ONBUILD:用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。</span><br><span class="line"> 当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。</span><br><span class="line"> 15.MAINTAINER:一般写个人id或组织id</span><br><span class="line"> 16.LABEL:就是注释,方便阅读的,纯注释说明</span><br><span class="line"> 17.</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">[Docker Redis ](开启Redis(修改Redis.conf daemonize为no))</span><br><span class="line"> </span><br><span class="line"> $ docker run -itd --name redis-demo -p:6378:6378 -v /usr/redis-5.0.8/redis.conf:/etc/redis/redis.conf -v /usr/redis-5.0.8/data:/data -d redis redis-server /etc/redis/redis.conf</span><br><span class="line"> </span><br><span class="line"> $ docker exec -it <容器 ID> /bin/bash //进入容器</span><br><span class="line"> </span><br><span class="line"> $ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 //打包提交为新容器 -m: 提交的描述信息 -a: 指定镜像作者 e218edb10161:容器 ID runoob/ubuntu:v2: 指定要创建的目标镜像名 </span><br><span class="line"> </span><br><span class="line"> $ docker run -itd runoob/ubuntu:v2 /bin/bash //使用我们的新镜像 runoob/ubuntu 来启动一个容器 使用新镜像(docker images 命令来查看我们的新镜像runoob/ubuntu:v2)</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">[Docker Mysql ] </span><br><span class="line"></span><br><span class="line"> $ docker search mysql //查询镜像 </span><br><span class="line"> </span><br><span class="line"> $ docker pull mysql //拉取镜像 </span><br><span class="line"> </span><br><span class="line"> $ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql //设置 MySQL 服务 root 用户的密码</span><br><span class="line"> </span><br><span class="line"> $ docker exec -it <容器 ID> /bin/bash //进入镜像 </span><br><span class="line"> </span><br><span class="line"> $ mysql -h localhost -u root -p //登录mysql</span><br><span class="line"> </span><br><span class="line"> $ ALTER USER 'root'@'%' IDENTIFIED BY '123456'; //修改Root 不能远程登录</span><br><span class="line"></span><br><span class="line"> $ CREATE USER 'liaozesong'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!'; //添加远程登录用户</span><br><span class="line"> </span><br><span class="line"> $ GRANT ALL PRIVILEGES ON *.* TO 'liaozesong'@'%'; //给用户所有权限</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[Docker Mongo] </span><br><span class="line"> </span><br><span class="line"> $ docker search mongo //查询镜像 </span><br><span class="line"> </span><br><span class="line"> $ docker pull mongo:latest //拉取镜像 </span><br><span class="line"> </span><br><span class="line"> $ docker run -itd --name mongo -p 27017:27017 mongo --auth //运行容器 </span><br><span class="line"> </span><br><span class="line"> $ docker exec -it mongo mongo admin //进入容器 </span><br><span class="line"></span><br><span class="line"> $ db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]}); //创建一个名为 admin,密码为 123456 的用户。 </span><br><span class="line"> </span><br><span class="line"> $ db.auth('admin', '123456')</span><br><span class="line"></span><br><span class="line">:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: </span><br><span class="line"></span><br><span class="line">提示:</span><br><span class="line"></span><br><span class="line"> Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大 以 && 符号连接命令,这样执行后,只会创建 1 层镜像] </span><br><span class="line"></span><br><span class="line">FROM centos</span><br><span class="line">RUN yum install wget</span><br><span class="line">RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"</span><br><span class="line">RUN tar -xvf redis.tar.gz</span><br><span class="line">以上执行会创建 3 层镜像。可简化为以下格式:</span><br><span class="line">FROM centos</span><br><span class="line">RUN yum install wget \</span><br><span class="line"> && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \</span><br><span class="line"> && tar -xvf redis.tar.gz</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class
</summary>
<category term="Docker" scheme="http://yoursite.com/categories/Docker/"/>
<category term="Docker" scheme="http://yoursite.com/tags/Docker/"/>
</entry>
<entry>
<title>分布式CAP理论和模型</title>
<link href="http://yoursite.com/2020/05/25/%E5%88%86%E5%B8%83%E5%BC%8FCAP%E7%90%86%E8%AE%BA%E5%92%8C%E6%A8%A1%E5%9E%8B/"/>
<id>http://yoursite.com/2020/05/25/分布式CAP理论和模型/</id>
<published>2020-05-25T01:39:31.000Z</published>
<updated>2020-05-25T06:26:47.833Z</updated>
<content type="html"><![CDATA[<h5 id="分布式CAP理论"><a href="#分布式CAP理论" class="headerlink" title="分布式CAP理论"></a>分布式CAP理论</h5><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></pre></td><td class="code"><pre><span class="line">1.CAP 理论可以表述为,一个分布式系统最多只能同时满足两者。并且P是确定的</span><br><span class="line"> 一致性(Consistency)所有节点同时看到相同的数据</span><br><span class="line"> 可用性(Availability)任何时候,读写都是成功的</span><br><span class="line"> 分区容忍性(Partition Tolerance)当部分节点出现消息丢失或者分区故障的时候,分布式系统仍然能够继续运行</span><br><span class="line"> ex:P 分布式 C 强一致性就不能保证A,比如 由于节点存在故障所以一致性不能保证。</span><br></pre></td></tr></table></figure><h5 id="不同数据一致性模型有哪些应用?"><a href="#不同数据一致性模型有哪些应用?" class="headerlink" title="不同数据一致性模型有哪些应用?"></a>不同数据一致性模型有哪些应用?</h5><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><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"></span><br><span class="line"> [ Base]</span><br><span class="line"> Base理论的核心思想是最终一致性,Base 理论则是对 CAP 理论的实际应用,即使无法做到强一致性(StrongConsistency),</span><br><span class="line"> 但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual Consistency)。 </span><br><span class="line"> 三要素:</span><br><span class="line"> 1.基本可用(允许损失部分可用性,相比正常的系统,可能是响应时间延长,或者是服务被降级)</span><br><span class="line"> ex:举个例子,在双十一秒杀活动中,如果抢购人数太多超过了系统的 QPS 峰值,可能会排队或者提示限流,这就是通过合理的手段保护系统的稳定性,保证主要的服务正常,保证基本可用</span><br><span class="line"> 2.软状态(允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时)</span><br><span class="line"> 3.最终一致性(在一个时间期限之后达到各个节点的一致性,在期限过后,应当保证所有副本保持数据一致性,也就是达到数据的最终一致性)</span><br><span class="line"> </span><br><span class="line">不同数据一致性模型:</span><br><span class="line"> 1.强一致性:当更新操作完成之后,任何多个后续进程的访问都会返回最新的更新过的值,需要牺牲可用性</span><br><span class="line"> 2.弱一致性:在数据写入成功之后,不承诺立即可以读到最新写入的值</span><br><span class="line"> 3.最终一致性:需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性</span><br><span class="line"> 1.因果一致性:因果关系的操作顺序得到保证,非因果关系的操作顺序则无所谓</span><br><span class="line">2.会话一致性:你的一次访问中,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值</span><br><span class="line"></span><br><span class="line">[ACID] 是一种强一致性模型,强调原子性、一致性、隔离性和持久性,主要用于在数据库实现中,适合传统金融等业务</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h5 id="分布式CAP理论"><a href="#分布式CAP理论" class="headerlink" title="分布式CAP理论"></a>分布式CAP理论</h5><figure class="highlight plain"><table><tr><td cl
</summary>
<category term="分布式" scheme="http://yoursite.com/categories/%E5%88%86%E5%B8%83%E5%BC%8F/"/>
<category term="CAP" scheme="http://yoursite.com/tags/CAP/"/>
</entry>
<entry>
<title>Java 执行Linux Command</title>
<link href="http://yoursite.com/2020/05/21/Java%20%E6%89%A7%E8%A1%8CLinux%20Command/"/>
<id>http://yoursite.com/2020/05/21/Java 执行Linux Command/</id>
<published>2020-05-21T09:39:31.000Z</published>
<updated>2020-05-21T09:11:26.859Z</updated>
<content type="html"><![CDATA[<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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"> </span><br><span class="line">import org.springframework.util.StringUtils;</span><br><span class="line">import org.springframework.web.bind.annotation.RequestMapping;</span><br><span class="line">import org.springframework.web.bind.annotation.RequestMethod;</span><br><span class="line">import org.springframework.web.bind.annotation.RestController;</span><br><span class="line"></span><br><span class="line">import java.io.BufferedInputStream;</span><br><span class="line">import java.io.BufferedReader;</span><br><span class="line">import java.io.IOException;</span><br><span class="line">import java.io.InputStreamReader;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">@RestController</span><br><span class="line">public class ExecuteController {</span><br><span class="line"> /**</span><br><span class="line"> * 执行指定命令</span><br><span class="line"> */</span><br><span class="line"> @RequestMapping(value = "/executeMult", method = RequestMethod.GET)</span><br><span class="line"> public Object executeMult(String command) throws IOException {</span><br><span class="line"> if (StringUtils.isEmpty(command))</span><br><span class="line"> return "Error Command ";</span><br><span class="line"> String[] strings = new String[3];</span><br><span class="line"> strings[0] = "/bin/sh";</span><br><span class="line"> strings[1] = "-c";</span><br><span class="line"> strings[2] = command;</span><br><span class="line"> StringBuffer stringBuffer = new StringBuffer();</span><br><span class="line"> int exitValue = -1;</span><br><span class="line"> BufferedReader bufferedReader = null;</span><br><span class="line"> try {</span><br><span class="line"> // command process</span><br><span class="line"> Process process = Runtime.getRuntime().exec(strings);</span><br><span class="line"> BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());</span><br><span class="line"> bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));</span><br><span class="line"> // command log</span><br><span class="line"> String line;</span><br><span class="line"> while ((line = bufferedReader.readLine()) != null) {</span><br><span class="line"> stringBuffer.append(line);</span><br><span class="line"> stringBuffer.append(System.getProperty("line.separator"));</span><br><span class="line"> System.out.println(line);</span><br><span class="line"> }</span><br><span class="line"> // command exit</span><br><span class="line"> process.waitFor();</span><br><span class="line"> exitValue = process.exitValue();</span><br><span class="line"> } catch (Exception e) {</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> } finally {</span><br><span class="line"> if (bufferedReader != null) {</span><br><span class="line"> bufferedReader.close();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> if (exitValue == 0) {</span><br><span class="line"> return stringBuffer.toString();</span><br><span class="line"> } else {</span><br><span class="line"> return "command exit value(" + exitValue + ") is failed";</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class
</summary>
<category term="Java" scheme="http://yoursite.com/categories/Java/"/>
<category term="Java Linux" scheme="http://yoursite.com/tags/Java-Linux/"/>
</entry>
<entry>
<title>快速查询日志命令</title>
<link href="http://yoursite.com/2020/05/20/%E5%BF%AB%E9%80%9F%E6%9F%A5%E8%AF%A2%E6%97%A5%E5%BF%97%E5%91%BD%E4%BB%A4/"/>
<id>http://yoursite.com/2020/05/20/快速查询日志命令/</id>
<published>2020-05-20T08:49:42.000Z</published>
<updated>2020-05-21T09:13:02.614Z</updated>
<content type="html"><![CDATA[<h6 id="tail-sh-filename-linenumber-seratchText"><a href="#tail-sh-filename-linenumber-seratchText" class="headerlink" title="./tail.sh filename linenumber seratchText"></a>./tail.sh filename linenumber seratchText</h6><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">#字体颜色</span><br><span class="line">blue_font="\E[34m\033[01m"</span><br><span class="line">green_font="\033[1;32m"</span><br><span class="line">yellow_font="\033[33m"</span><br><span class="line">light_green_font_withbackcolor="\033[42;30m\033[01m"</span><br><span class="line">light_green_font="\033[32m\033[01m"</span><br><span class="line">red_font="\033[1;31m"</span><br><span class="line"></span><br><span class="line">color_end="\033[0m"</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#参数校验</span><br><span class="line">if [ ! -n "$1" ] ;then</span><br><span class="line"> echo -e "${blue_font} 请指定日志文件目录 ! ${color_end}"</span><br><span class="line"> exit 1;</span><br><span class="line"> fi</span><br><span class="line"></span><br><span class="line"> line=$2</span><br><span class="line"></span><br><span class="line"> if [ ! -n "$2" ] ;then</span><br><span class="line"> line=20</span><br><span class="line"> fi</span><br><span class="line"></span><br><span class="line"> if [ ! -n "$3" ] ;then</span><br><span class="line"> echo -e "${yellow_font} 执行:tail -"$line"f $1 ${color_end}"</span><br><span class="line"> tail -"$line"f $1</span><br><span class="line"> </span><br><span class="line"> else</span><br><span class="line"> echo -e "${yellow_font} 执行:tail -"$line"f $1 |grep "$3" ${color_end}"</span><br><span class="line"></span><br><span class="line"> tail -"$line"f $1 |grep "$3"</span><br><span class="line"> fi</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h6 id="tail-sh-filename-linenumber-seratchText"><a href="#tail-sh-filename-linenumber-seratchText" class="headerlink" title="./tail.sh fil
</summary>
<category term="Linux" scheme="http://yoursite.com/categories/Linux/"/>
<category term="Linux" scheme="http://yoursite.com/tags/Linux/"/>
</entry>
<entry>
<title>正则表达式案例</title>
<link href="http://yoursite.com/2019/12/18/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%A1%88%E4%BE%8B/"/>
<id>http://yoursite.com/2019/12/18/正则表达式案例/</id>
<published>2019-12-18T02:39:31.000Z</published>
<updated>2019-12-18T08:11:49.329Z</updated>
<content type="html"><![CDATA[<h4 id="替换文本格式的数据为-hashmap-put-“a1”-”b1”"><a href="#替换文本格式的数据为-hashmap-put-“a1”-”b1”" class="headerlink" title="替换文本格式的数据为 hashmap.put(“a1”,”b1”);"></a>替换文本格式的数据为 hashmap.put(“a1”,”b1”);</h4><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></pre></td><td class="code"><pre><span class="line">a1 b1 </span><br><span class="line">23g sdfs</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">正则表达式:([A-Z0-9]+)[ ]+(.*)</span><br><span class="line"> </span><br><span class="line">hashmap.put("$1","$2")</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h4 id="替换文本格式的数据为-hashmap-put-“a1”-”b1”"><a href="#替换文本格式的数据为-hashmap-put-“a1”-”b1”" class="headerlink" title="替换文本格式的数据为 hashmap.put(“a1”,
</summary>
<category term="Java" scheme="http://yoursite.com/categories/Java/"/>
<category term="正则" scheme="http://yoursite.com/tags/%E6%AD%A3%E5%88%99/"/>
</entry>
<entry>
<title>Docker入门文档</title>
<link href="http://yoursite.com/2019/12/18/Docker%E5%85%A5%E9%97%A8%E6%96%87%E6%A1%A3/"/>
<id>http://yoursite.com/2019/12/18/Docker入门文档/</id>
<published>2019-12-18T01:39:31.000Z</published>
<updated>2019-12-18T08:11:24.314Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/docker.png" alt="如图"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Docker是一个开源的应用容器引擎。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制相互之间不会有任何接口(类似 iPhone的app),更重要的是容器性能开销极低。</span><br></pre></td></tr></table></figure><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br></pre></td><td class="code"><pre><span class="line"> 本内容整理来源于《微服务架构基础 Spring Boot+Spring Cloud+Docker.pdf》 下载地址在 http://www.86clouds.com/detail/383366928 </span><br><span class="line"></span><br><span class="line"> ####【Docker安装】 ####</span><br><span class="line"></span><br><span class="line">#更新apt索引包</span><br><span class="line">$ apt-get update </span><br><span class="line"></span><br><span class="line">#使用Docker库</span><br><span class="line">$ apt-get install apt-transport-https ca-certificates curl software-properties-common</span><br><span class="line"></span><br><span class="line">#添加Docker官网的GPG key</span><br><span class="line">$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - </span><br><span class="line"></span><br><span class="line">#添加Docker稳定的仓库源(根据Ubuntu镜像版本的不同进行选择安装)</span><br><span class="line"></span><br><span class="line">amd64:</span><br><span class="line">$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"</span><br><span class="line"></span><br><span class="line">armhf:</span><br><span class="line">$ add-apt-repository "deb [arch=armhf] https://download.docker.com/linux/ubuntu $ (lsb___release -cs) stable"</span><br><span class="line"></span><br><span class="line">s390x:</span><br><span class="line">$ add-apt-repository "deb [arch=s390x] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"</span><br><span class="line"></span><br><span class="line">2.安装 DockerCE</span><br><span class="line">设置好Docker仓库之后,就可以从存储库中安装和更新Docker,其实现步骤如下。</span><br><span class="line">(1 )更新apt的索引包。</span><br><span class="line">$ apt-get update</span><br><span class="line">(2)安装不同版本的Docker。在安装Docker时,通常会根据个人情况选择安装不同的版 本。为此,Docker提供了两种安装方式,一是安装默认的最新版本的Docker,二是安装指定版 本的Docker,具体如下。</span><br><span class="line">・安装最新版本的Docker,具体指令如下。</span><br><span class="line">$ apt-get install docker-ce</span><br><span class="line">需要注意的是,执行上述指令后,之前存在的任何版本的Docker都会被替换。安装指定版本的Docker,具体指令如下。</span><br><span class="line">$ apt-get install docker-ce=<VERSION></span><br><span class="line">从上述指令可以看出,安装指定版本的Docker时,需要通过“=”将版本字符串附加到安 装包后。为了更好地选择指定版本的Docker,可以使用apt-cache madison指令查看Docker仓库 中的Docker版本信息,具体指令如下。</span><br><span class="line">$ apt-cache madison docker-ce</span><br><span class="line"> docker-ce | 5:19.03.3~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:19.03.2~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:19.03.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:19.03.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:18.09.9~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:18.09.8~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:18.09.7~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> docker-ce | 5:18.09.6~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages</span><br><span class="line"> ................................................................................................................</span><br><span class="line">执行上述指令后,就会显示出当前Docker仓库提供的在线的Docker的版本信息,其中第二列是版本字符串,第三列是存储库名称,用于指示安装包来自哪个存储库。</span><br><span class="line">(3)安装完成后,可以使用 docker run hello-world指令运行测试,具体指令如下。</span><br><span class="line">$ docker run hello-world</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">在没有网络或者网络条件较差的情况下,我们可以选择离线安装Docker (使用DEB格式的 安装文件)。这种安装方式的好处是不依赖于网络,但其缺点是后期使用时需要手动升级和维护, 并且每次升级时都需要下载一个新的.deb文件。</span><br><span class="line">离线安装方式的具体实现步骤如下。</span><br><span class="line">1.下载离线安装文件</span><br><span class="line">通过官方提供的地址 https://download.docker.com/linux/ubuntu/dists/,下载安装 Docker的.deb</span><br><span class="line">Ubuntu Xenial 16.04 ( LTS )版本,所以要单击图中的xenial链接并进入到pool/stable/目录下,然后根据情况选择amd64、armhf或者s390x版本的.deb文件</span><br><span class="line">2.使用离线文件安装Docker</span><br><span class="line">通过下载的.deb文件进行Docker离线安装非常简单,只需要在Ubuntu系统的终端中执行 如下指令。</span><br><span class="line">$ dpkg -i /path/to/package.deb</span><br><span class="line">需要注意的是,使用sudo dpkg -i指令安装Docker时,一定要指定读者下载的.deb文件 所在地址,例如上面指令表示执行/path/to/路径下的package.deb文件。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">(4) docker version 查看 docker版本 </span><br><span class="line">Client: Docker Engine - Community</span><br><span class="line"> Version: 19.03.3</span><br><span class="line"> API version: 1.40</span><br><span class="line"> Go version: go1.12.10</span><br><span class="line"> Git commit: a872fc2</span><br><span class="line"> Built: Tue Oct 8 00:59:54 2019</span><br><span class="line"> OS/Arch: linux/amd64</span><br><span class="line"> Experimental: false</span><br><span class="line"></span><br><span class="line">Server: Docker Engine - Community</span><br><span class="line"> Engine:</span><br><span class="line"> Version: 19.03.3</span><br><span class="line"> API version: 1.40 (minimum version 1.12)</span><br><span class="line"> Go version: go1.12.10</span><br><span class="line"> Git commit: a872fc2</span><br><span class="line"> Built: Tue Oct 8 00:58:28 2019</span><br><span class="line"> OS/Arch: linux/amd64</span><br><span class="line"> Experimental: false</span><br><span class="line"> containerd:</span><br><span class="line"> Version: 1.2.10</span><br><span class="line"> GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339</span><br><span class="line"> runc:</span><br><span class="line"> Version: 1.0.0-rc8+dev</span><br><span class="line"> GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657</span><br><span class="line"> docker-init:</span><br><span class="line"> Version: 0.18.0</span><br><span class="line"> GitCommit: fec3683</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">############【Docker基本的使用介绍】################</span><br><span class="line"> </span><br><span class="line">$ 编写Dockerfile文件</span><br><span class="line"></span><br><span class="line">$ docker build -t hellodocker . -t参数指定了生成的镜像名称为 hellodocker 指令最后的点[•]代表的是当前目录下的应用上下文 如果Dockerfile不在则需要替换为Dockerfile的路径地址</span><br><span class="line"></span><br><span class="line">$ docker images 查看镜像</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker run -d -p 5000:80 hellodocker 访问程序,查看结果。使用宿主机的浏览器通过地址http://localhost:5000来访问容器中运行的程序</span><br><span class="line"> 创建并启动容器,镜像就类似一个Java类,必须有具体的实例才能使用</span><br><span class="line"> docker run是Docker创建并启动容器的指令,-d参数表示在后台运行容器, -p参数将容器暴露的80端口映射到宿主机的 5000 端口</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">$ docker ps 查看Docker运行中的容器效果</span><br><span class="line"></span><br><span class="line">$ docker stop 653347ecc6df 停止容器</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">############【Dockerfile基本的介绍】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">指令 说明</span><br><span class="line">FROM 指定基础镜像</span><br><span class="line">MAINTAINER 指定镜像维护者信息</span><br><span class="line">RUN 用于执行指定脚本命令</span><br><span class="line">CMD 指定启动容器时执行的命令</span><br><span class="line">EXPOSE 指定容器暴露的端口</span><br><span class="line">ENV 指定环境变量</span><br><span class="line">ADD 将文件从宿主机复制到容器指定位置,同时对压缩文件有自动解压功能</span><br><span class="line">COPY 将文件从宿主机复制到容器指定位置</span><br><span class="line">ENTRYPOINT 设置容器启动时需要运行的命令</span><br><span class="line">WORKDIR 为后续的如RUN、CMD、ENTRYPOINT, COPY、ADD指定工作目录</span><br><span class="line"></span><br><span class="line">############【Docker常用操作指令】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">docker images 列岀镜像</span><br><span class="line">docker search 搜索镜像</span><br><span class="line">docker pull 拉取镜像</span><br><span class="line">docker build 构建镜像</span><br><span class="line">docker rmi 删除镜像</span><br><span class="line">docker run 创建并启动容器</span><br><span class="line">docker ps 列岀容器</span><br><span class="line">docker exec 执行容器</span><br><span class="line">docker stop 停止容器</span><br><span class="line">docker start 启动容器</span><br><span class="line">docker rm 删除容器</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">$ docker images 执行上述指令后,系统会将所有本地镜像都展示出来</span><br><span class="line"> </span><br><span class="line">REPOSITORY 镜像名称 </span><br><span class="line">TAG 镜像的参数,类似于版本号,默认是latesto</span><br><span class="line">IMAGE ID 镜像ID,是唯一值。此处看到的是一个长度为12的字符串,实际上它是64 位完整镜像ID的缩写形式</span><br><span class="line">CREATED 距今创建镜像的时间</span><br><span class="line">SIZE 镜像大小</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">$ docker search ubuntu 执行上述指令后,系统终端就会将搜索到的有关Ubuntu的镜像展示出来</span><br><span class="line"> </span><br><span class="line">NAME 表示镜像的名称,这里有两种格式的名称,其中不带有"/”的表示官方镜像,而带有7"的表示其他用户的公开镜像。公开镜像"/”前面是用户在±的用户名(后面是对应的镜像</span><br><span class="line">DESCRIPTION 表示镜像的描述,这里只显示了一小部分。</span><br><span class="line">STARS 表示该镜像的收藏数,用户可以在Docker Hub ±对镜像进行收藏,一般可以通 过该数字反映出该镜像的受欢迎程度。</span><br><span class="line">OFFICIAL: 表示是否为官方镜像。</span><br><span class="line">AUTOMATED 表示是否自动构建镜像。例如,用户可以将自己的Docker Hub绑定到如 Github上,当代码提交更新后,可以自动构建镜像。</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">$ docker pull ubuntu Docker会自动从Docker Hub上下载最新版本的Ubuntu到本地 </span><br><span class="line"> </span><br><span class="line">$ docker pull ubuntu:14.04 拉取指定版本的镜像到本地</span><br><span class="line"> </span><br><span class="line">$ cd workspace/dockerspace/ 在Dockerfile文件所在目录构建镜像</span><br><span class="line"> </span><br><span class="line">$ docker build -t hellodocker2 . 进入Dockerfile文件所在目录后,可以使用docker build指令进行镜像构建</span><br><span class="line"> </span><br><span class="line">$ cd ~ 在其他目录构建镜像</span><br><span class="line">$ docker build -t hellodocker3 /home/shitou/workspace/dockerspace/.</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker rmi -f hellodocker2 hellodocker3 当本地存放过多不需要的镜像时</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker run -d -p 5000:80 --name test hellodocker 创建并启动容器</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker ps 列出容器</span><br><span class="line"></span><br><span class="line">CONTAINER ID 表示生成的容器ID。</span><br><span class="line">IMAGE 表示生成该容器的镜像名称。</span><br><span class="line">COMMAND 表示启动容器时运行的命令,Docker要求在启动容器时必须运行一个命令。</span><br><span class="line">CREATED 表示容器创建的时间。</span><br><span class="line">STATUS 表示容器运行状态,例如Up表示运行中,Exited表示已停止。</span><br><span class="line">PORTS 表示容器内部暴露的端口映射到主机的端口。</span><br><span class="line">NAMES 表小生成容器的名称,由Docker引擎自动生成,可以像上述不例中使用—name 参数指定生成容器的名称。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker stop f0c9a8b6e8c5 停止容器</span><br><span class="line"></span><br><span class="line">$ docker ps -a 查看该容器</span><br><span class="line"></span><br><span class="line">$ docker start f0c9a8b6e8c5 启动容器</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker restart f0c9a8b6e8c5 重启容器</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">############【Docke管理指令】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">docker container 用于管理容器</span><br><span class="line">docker image 用于管理镜像</span><br><span class="line">docker network 用于管理Docker网络</span><br><span class="line">docker node 用于管理Swarm集群节点</span><br><span class="line">docker plugin 用于管理插件</span><br><span class="line">docker secret 用于管理Docker机密</span><br><span class="line">docker service 用于管理Docke一些服务</span><br><span class="line">docker stack 用于管理Docker堆栈</span><br><span class="line">docker swarm 用于管理Swa「m</span><br><span class="line">docker system 用于管理Docke「</span><br><span class="line">docker volume 用于管理数据卷</span><br><span class="line"></span><br><span class="line">############【 Docker Hub远程镜像管理】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">1.登录 Docker Hub </span><br><span class="line"></span><br><span class="line"> 要使用Docker Hub就需要先在其官网https://hub.docker.com/注册一个账号(需要用户名、 邮箱和密码),通过邮件认证后,即可登录到Docker Hub中心</span><br><span class="line">Docker Hub的仓库分为Public (公开)和Private (私有)两种,公开仓库 可以被其他开发者查看和拉取资源;而私有仓库不对外公开,只对内部创建组织的</span><br><span class="line">成员公开。Docker Hub为免费用户只提供了一个私有仓库,如果需要使用更多的私有仓库,则可以单击上 图中的“Get more”链接通过付费的方式进行获取。</span><br><span class="line"></span><br><span class="line">其他功能</span><br><span class="line"> 1.镜像管理:可以从社区或官方搜索、拉取、管理、推送镜像等。</span><br><span class="line"> 2.自动构建镜像:Docker Hub支持连接到源代码仓库,如GitHub和Bitbucket,当源代码 进行修改后可以进行自动化构建镜像。</span><br><span class="line"> 3.Webhooks (监测工具):属于自动构建的一个特性,Webhooks能够让开发者成功推送仓 库后触发一些行为。Organizations (组织):可以创建工作组,来协同开发、管理一个镜像仓库。</span><br><span class="line"> 4.GitHub和Bitbucket集成:支持集成代码仓库GitHub和Bitbucket到工作流中。</span><br><span class="line"></span><br><span class="line">2.修改镜像名称</span><br><span class="line"></span><br><span class="line">$ docker tag hellodocker:latest itheima/hellodocker:latest 修改镜像名称</span><br><span class="line"></span><br><span class="line">3.登录认证</span><br><span class="line"></span><br><span class="line">$ docker login </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">4.推送镜像</span><br><span class="line"></span><br><span class="line">$ docker push itheima/hellodocker:latest</span><br><span class="line"></span><br><span class="line"> 如果想要将推送的镜像仓库设置为私有的,有两种方式:一种方式就是推送完成后立即进入 Docker Hub仓库面板,进入对应仓库详情中的Settings菜单/功能下,单击“Make Private”按钮设 置为私有仓库;另一种方式就是在推送镜像之前,先在Docker Hub上通过Create Repository (创建 仓库)链接创建一个私有仓库,然后再以该私有仓库为名重命名一个本地镜像,推送到该指定私有仓库上。</span><br><span class="line"> 相比Docker Hub而言,Docker Registry的功能就不够全面了,且需要自己手动配置、升 级、维护和管理,所以说对于Docker镜像管理不太熟悉的人员推荐使用Docker Hubo如果开 发者想要严格控制镜像存储位置,完全拥有自己的镜像分配渠道,或者要想将镜像存储和分布紧 密嵌入到自己开发的程序中,贝U选择Docker Registry更适合。接下来,本小节将针对Docker Registry本地私有镜像仓库的管理进行详细讲解。</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">############【 Docker网络管理】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ docker network ls </span><br><span class="line"></span><br><span class="line"> Docker中默认的三种网络分别为bridge.host和none,其中名为bridge 的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主 机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加到这两个网络时不能 与外界网络通信。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">############【 Docker数据管理】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">(1)Docker数据存储机制</span><br><span class="line"></span><br><span class="line"> 使用Docker时,我们操作的都是镜像和由镜像生成的容器,所以想要更好地了解Docker 内部的数据存储机制,就必须从镜像、容器与数据存储的关系出发。</span><br><span class="line">Docker镜像是通过读取Dockerfile文件中的指令构建的,Dockerfile中的每条指令都会创 建一个镜像层,并且每层都是只读的,这一系列的镜像层就构成了 Docker镜像</span><br><span class="line"></span><br><span class="line">(2)Docker数据存储方式</span><br><span class="line"></span><br><span class="line"> 在默认情况下,Docker中的数据都是存放在容器层的,但是这样存储数据却有较多的缺陷, 具体表现如下。当容器不再运行时,容器中的数据无法持久化保存,</span><br><span class="line">如果另一个进程需要这些数据,那么 将很难从容器中获取数据。容器层与正在运行的主机紧密耦合,不能轻易地移动数据。容器层需要一个存储驱动程序来管理文件</span><br><span class="line">系统,存储驱动程序提供了一个使用Linux内核 的联合文件系统,这种额外的抽象化降低了性能。</span><br><span class="line"> 基于上述种种原因,多数情况下Docker数据管理都不会直接将数据写入容器层,而是使用 另一种叫做Docker volume数据外部挂载的机制进行数据管理。</span><br><span class="line">针对Docker volume数据外部挂载机制,Docker提供了三种不同的方式将数据从容器映射 到Docker宿主机,它们分别为:volumes(数据卷)、bind mounts(绑定挂载)和tmpfs mounts (tmpfs挂载).这三种数据管理方式的具体选择,需要结合实际情况进行考虑,其中的volumes 数据卷是最常用也是官方推荐的数据管理方式。</span><br><span class="line">无论选择使用哪种数据管理方式,数据在容器内看起来都一样的,而在容器外则会被被挂载 到文件系统中的某个目录或文件中。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">(3)数据管理方式</span><br><span class="line">volumes 存储在主机文件系统中(在Linux系统 下是存在于/var/lib/Docker/volumes/目录),并由 Docker 管理,非Docker进程无法修改文件系统的这个部分。</span><br><span class="line">bind mounts 可以存储在主机系统的任意位置,甚至可能是重要的系统文件或目录,在 Docker主机或容器上的非Docker进程可以对它们进行任意修改。</span><br><span class="line">tmpfs mounts 只存储在主机系统的内存中,并没有写入到主机的文件系统中。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">==========================================================================================================================================================</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">############【 Docker Compose】################</span><br><span class="line"></span><br><span class="line"> Docker Compose,俗称Docker编排工具,是用来定义和运行多容器应用的Docker工具。 通过该编排工具,可以使用yml文件来配置应用程序服务,</span><br><span class="line">然后只需要一条简单的服 务部署指令就可以从配置中创建并启动所有服务</span><br><span class="line"> 对于简单的个别服务应用可以使用Dockerfile构建镜像,然后使用docker run或者 docker service create命令启动容器服务;对于多容器服务</span><br><span class="line">如微服务架构项目,最好使用 Docker Compose编排工具进行统一管理。</span><br><span class="line"></span><br><span class="line">1.安装</span><br><span class="line"></span><br><span class="line"> (1)安装条件</span><br><span class="line"> Docker Compose是依赖于Docker引擎的,所以在安装Docker Compose之前要确保机 器上已经安装了 Docker (可以使用docker -v指令查看)。</span><br><span class="line"> </span><br><span class="line"> (2)安装 Compose</span><br><span class="line"> </span><br><span class="line"> 使用curl命令从GitHub的Compose仓库拉取Docker Compose,具体操作指令如下。</span><br><span class="line"> $ sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/ docker-compose-'uname -s'-'uname -m' -o /usr/local/bin/docker-compose</span><br><span class="line"> </span><br><span class="line"> 执行上述指令后,就会从GitHub下载并安装Docker Compose工具,该过程需要耗时几分 钟。从上述指令也可以看出,指定下载的Docker Compose版本为1.16.1 读可以根据实际情况选择下载对应的版本,各个版本的信息可参考地址https://github.com/docker/compose/releases 查看。 </span><br><span class="line"> </span><br><span class="line"> $ sudo chmod +x /usr/local/bin/docker-compose 更改Docker Compose的可执行文件权限</span><br><span class="line"> </span><br><span class="line"> $ docker-compose --version 查看安装的Docker Compose效果及版本,具体操作指令如下。</span><br><span class="line"> </span><br><span class="line"> (3)卸载 Compose</span><br><span class="line"> $ rm /usr/local/bin/docker-compose </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">2.Compose file文件的使用说明</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">(1)编写Dockerfile文件。使用Dockerfile定义应用程序的环境,这样可以在任何地方使用它,Dockerfile的作用就是为每个服务构建镜像。</span><br><span class="line">(2)定义yml文件(通常是docker-compose.yml )就是将前面介绍的服务部署指令及相 关参数都统一在该文件中编写和配置,这样就省去了针对不同服务各自运行的麻烦。</span><br><span class="line">(3)运行服务部署指令。根据具体的部署需求,来执行相应的部署指令,Docker会读取 docker-compose.yml文件内容启动整个应用服务。</span><br><span class="line"> 在上述三步中,第一步中Dockerfile文件的编写已经在第7章有过讲解,而第三步的服务部 署指令会在后面服务部署环节进行说明,所以现在需要掌握的就是如何编写docker-compose.yml文件。接下来,将针对Compose file文件的定义和配置进行详细讲解。 https://docs.docker.eom/compose/compose-file 配置文档地址</span><br><span class="line"> </span><br><span class="line">【docker-compose.yml】</span><br><span class="line">version: * 3 *</span><br><span class="line">services:</span><br><span class="line"> web:</span><br><span class="line"> image: id/imagename:lable</span><br><span class="line">restart: on-failure</span><br><span class="line">container_name: my-web-container</span><br><span class="line">ports:</span><br><span class="line"> - 8080:8080</span><br><span class="line">networks:</span><br><span class="line"> - example-net</span><br><span class="line">depends_on:</span><br><span class="line"> - db</span><br><span class="line">deploy:</span><br><span class="line"> replicas: 2</span><br><span class="line"> restart__policy:</span><br><span class="line"> condition: on-failure</span><br><span class="line">db:</span><br><span class="line"> image: mysql:5.6</span><br><span class="line"> restart: on-failure</span><br><span class="line"> container_name: my-mysql-container</span><br><span class="line"> ports:</span><br><span class="line"> - 3306:3306</span><br><span class="line"> volumes:</span><br><span class="line"> - example-mysql:/var/lib/mysql</span><br><span class="line"> networks:</span><br><span class="line"> - example-net</span><br><span class="line"> environment:</span><br><span class="line"> MYSQL_ROOT_PASSWORD: root</span><br><span class="line"> MYSQL_DATABASE: mysql_database</span><br><span class="line"> deploy:</span><br><span class="line"> replicas: 1</span><br><span class="line"> restart__policy:</span><br><span class="line"> condition: on-failure</span><br><span class="line"> placement:</span><br><span class="line"> constraints: [node.role == manager]</span><br><span class="line">networks:</span><br><span class="line"> example-net:</span><br><span class="line">volumes:</span><br><span class="line"> example-mysql:</span><br><span class="line"></span><br><span class="line">总体来看:</span><br><span class="line"> version "3''表示文件是使用3版本的约束进行编写的。</span><br><span class="line"> services 下面包含有web和db两个服务配置项,每一个服务配置项都有镜像image、 端口 ports.网络networks和部署deploy等配置信息,同时web服务配置依赖于db服务配置。</span><br><span class="line"> networks (网络)和volumes (数据卷):在服务部署时会自动创建example-net网络和 example-mysql 数据卷。</span><br><span class="line">结合上述示例进行整体介绍后,相信大家已经对Compose file文件的配置和样式已经有了 一个初步的了解。下面将对Compose file文件中一些常用的配置进行更详细的解释,具体说明 如下。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">1.version (版本)</span><br><span class="line">version通常在一个docker-compose.yml文件的最顶部,用来表示文件内容的约束版本(类似于XML文件约束),本书编写时的最新版本为3.3版本。</span><br><span class="line"></span><br><span class="line">2.services (服务)</span><br><span class="line">services用来声明服务,在services下的所有同缩进的应用名称都代表一个服务,如上面 示例中的web和db。在进行多服务部署的时候,有多少个服务需要同时部署,就需要在services 参数下面声明并配置多少个服务。</span><br><span class="line"></span><br><span class="line">3.image (镜像)</span><br><span class="line">所有启动的服务都是依赖镜像构建的,所以每一个服务下面首先要声明依赖的镜像名称,- 般都是xxx/xxx:lable的形式。如果是本地私有仓库镜像,一般为IP:PORT/xxx:lable (如果省略 了 lable标签,则默认是latest)的形式。</span><br><span class="line"></span><br><span class="line">4.restart (重启策略)</span><br><span class="line">restart 表示服务重启策略,在使用Compose file文件启动所有服务过程中,有些服务由于 个别原因可能会启动失败。为了保证服务正常启动,需要使用该参数来确保服务重启(在集群环 境下该属性会被忽略)。</span><br><span class="line">restart服务重启策略可以设为四个值,分别如下。</span><br><span class="line"> restart: "no" #服安默认值为n。,即服务失败后没有任何动作</span><br><span class="line"> restart: always #表示服务会一直重新启动</span><br><span class="line"> restart: on-failure #表示服务提示失败错误后会重新启动</span><br><span class="line"> restart: unless-stopped #表示只有服务柱停止后才会重启</span><br><span class="line"></span><br><span class="line">5.container_name (容器名称)</span><br><span class="line">container_name表示单个服务启动后的容器名称。在3版本以后,如果是在集群多实例环 境下部署,该参数就会被忽略。</span><br><span class="line"></span><br><span class="line">6.ports (端口)</span><br><span class="line">ports用于指定服务向外暴露的端口。Compose支持多种形式的ports端口映射,在上面示 例中使用了比较常规的端口映射方式(宿主机端口:容器端口)来暴露服务。</span><br><span class="line"></span><br><span class="line">7.networks (网络)</span><br><span class="line">networks用于配置服务网络。在前面介绍Docker时,已经介绍过在进行服务部署时最好使 用自定义网络,这里就可以使用networks参数。上面示例中指定了各个服务启动后的网络管理 为example-net,该网络会在服务启动时自动创建。</span><br><span class="line"></span><br><span class="line">8.depends_on (服务依赖)</span><br><span class="line">depends.on表示多个服务之间的依赖关系,用来确定服务启动的先后顺序。针对该参数, 需要特别注意以下两点。</span><br><span class="line">depends.on决定了服务的依赖关系,如示例中的web依赖db,所以db服务会先于web 服务启动,但并不表示db服务完全启动成功后才启动web服务,它只决定启动的先后顺序而已。在3版本中,depends_on参数将会被忽略。</span><br><span class="line"></span><br><span class="line">9.links (服务关联)</span><br><span class="line">links表示多个服务之间的相互访问关系,即可以通过服务名称或别名来访问关联的服务; 同时也具有depends.on参数一样的服务依赖关系,即可以确定服务启动的先后顺序。针对该参 数,也需要注意以下几点。</span><br><span class="line">同depends_on —样,links确定了服务的依赖关系,但它只决定服务启动的先后顺序而已。如果同时定义了 links和networks参数,使用links连接的服务必须有一个共同的网络。</span><br><span class="line">在3版本中,links参数也将会被忽略。</span><br><span class="line"></span><br><span class="line">10.deploy (服务集群部署)</span><br><span class="line">deploy参数是Docker Compose针对Swarm集群部署提供的(在非集群环境下该参数及其 子参数会被忽略)。该参数及其子参数专门用于指定与服务部署和运行相关的配置,并且该参数 只有在3版本以及部署到Swarm集群时才会生效。</span><br><span class="line"></span><br><span class="line">11.replicas (服务实例副本)</span><br><span class="line">replicas表示服务实例的副本数量。在Swarm集群环境下,为了实现服务器端的负载均衡, 通常会将一个服务实例复制多个副本运行,如上述实例中的web服务就提供了 2个副本。</span><br><span class="line"></span><br><span class="line">12.restart_policy (重启策略)</span><br><span class="line">restart_policy参数同前面介绍的restart类似,都是用来配置服务重启策略的,只是该属性 配置在deploy参数下,并只在集群环境下生效。该参数包含多个子属性及属性值,具体示例 如下。</span><br><span class="line"> restart_policy:'.</span><br><span class="line"> condition: on-failure #表示服务重启的条件,值有 none、on-failure 和 any </span><br><span class="line">delay: 5s #表示重启服务之间等待时间,默认为0 </span><br><span class="line">max_attempts : 3 #表示失败后尝试重启的次数</span><br><span class="line">window: 120s #表示等待多久来确定服务是否启动成功</span><br><span class="line"></span><br><span class="line">13.placement (位置约束)</span><br><span class="line">placement用来配置指定位置的约束,当服务在Swarm集群环境下部署时会随机分配到管 理节点和其他工作节点上。在上述示例中由于将mysql数据挂载到了本机example-mysql数据 卷中,所以使用了 placement的子参数constraints:[node.role == manager]指定该服务只在 manager管理节点上运行。</span><br><span class="line"></span><br><span class="line">14.volumes (数据卷)</span><br><span class="line">volumes表示数据卷,就是将容器中的数据备份到宿主机地址(具体可回顾前面章节介绍的 数据管理)□上述示例中是将mysql数据挂载到本地example-mysql数据卷中,如果该数据卷 不存在,服务启动时也会默认创建。</span><br><span class="line"></span><br><span class="line">15.environment (环境变量)</span><br><span class="line">environment用于配置服务启动时需要的环境变量,如上述示例中MYSQL_ROOT_ PASSWORD表示数据库root用户的密码,MYSQL_DATABASE表示数据库启动后自动创建的数据库。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">==========================================================================================================================================================</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">############【 微服务与Docker】################</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">1.[添加Dockerfile文件]</span><br><span class="line"></span><br><span class="line"> 在Docker中,应用都是部署在容器中的,而容器又由镜像生成,镜像则通常是通过Dockerfile 文件构建的,所以微服务与Docker整合的第一步就是要提供Dockerfile文件。</span><br><span class="line">第9章讲解整合时编写的微服务项目microservice-mallmanagement主要有4个子项目模 块(包括2个微服务模块和2个辅助服务模块),我们需要针对每一个子项目模块编写对应的 Dockerfile文件。这里以用户订单管理微服务模块为例,所编写的Dockerfile文件的具体内容如:</span><br><span class="line"></span><br><span class="line"> FROM java:8-jre</span><br><span class="line"> MAINTAINER shirx 〈[email protected]></span><br><span class="line"> ADD ./target/microservice-userservice-0.0.1-SNAPSHOT.jar \</span><br><span class="line"> /app/microservice-userservice.jar</span><br><span class="line"> CMD ["java", H-Xmx200mn, "-jar", "/app/microservice-userservice.jar"]</span><br><span class="line"> EXPOSE 8030</span><br><span class="line"></span><br><span class="line">具体说明如下:</span><br><span class="line">1~2行设置了一个基础镜像java:8-jre来提供项目的运行环境,并通过MAINTAINER配 置了该镜像的维护者信息。</span><br><span class="line">3~4行通过ADD命令将生成的项目jar包(在target目录下)复制到容器内部的app目 录下,并重命名为 microservice-userservice.jar。</span><br><span class="line">第5行通过CMD命令指定了由该镜像生成的容器的启动命令(其实就是java -jar microservice-userservice.jar 启动 jar 包的命令)o</span><br><span class="line">第6行通过EXPOSE指令指定容器暴露的端口号为8030 跟项目配置文件application, yml中指定的端口相同。</span><br><span class="line"></span><br><span class="line">将上述Dockerfile文件直接放在项目的根目录即可,其他服务编写的Dockerfile文件与文件基本相同,只需要将Dockerfile中的项目名称和版本号后缀,以及复制到容器内部的JAR包名称进行相应修改即可。</span><br><span class="line"></span><br><span class="line">2.[添加 dockerfile-maven 插件]</span><br><span class="line"></span><br><span class="line"> Dockerfile文件编写完成后,就可以使用Docker的相关指令构建镜像并运行容器,然后访 问容器中的应用了。只是上述所有的操作都是手动完成的,如果需要部署多个服务,将会非常麻烦。</span><br><span class="line">针对这种情况,MAVEN提供了一个dockerfile-maven-plugin插件,很好地支持了与Docker 的整合。该插件的使用非常简单,只需要在所有需要生成Docker容器项目的pom文件中添加该插件</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><build></span><br><span class="line"> <plugins></span><br><span class="line"> <plugin></span><br><span class="line"> <groupld>com.spotify</groupld> </span><br><span class="line"> <artifactld>dockerfile-maven-plugin</artifactld> </span><br><span class="line"> <version>l.3.6</version></span><br><span class="line"> <configuration></span><br><span class="line"> <!--生成的镜像名称--></span><br><span class="line"> <repository></span><br><span class="line"> ${docker.image.prefix}/${project.artifactld} </repository></span><br><span class="line"> <!―生成的镜像版本--></span><br><span class="line"> <tag>${project.version}</tag></span><br><span class="line"> <!--推送到私有镜像仓库或者DockerHub时需要开启用户认证--></span><br><span class="line"> <useMavenSettingsForAuth>true</useMavenSettingsForAuth> </span><br><span class="line"> </configuration></span><br><span class="line"> <!--直接使用mvn install命令打包项目,就会自动构建并推送镜像--></span><br><span class="line"> <executions></span><br><span class="line"> <execution></span><br><span class="line"> <id>default</id></span><br><span class="line"> <phase>install</phase></span><br><span class="line"> <goals></span><br><span class="line"> <goal>build</goal> </span><br><span class="line"> <goal>push</goal></span><br><span class="line"> </goals></span><br><span class="line"> </execution></span><br><span class="line"> </executions></span><br><span class="line"> </plugin></span><br><span class="line"> </plugins></span><br><span class="line"></build></span><br><span class="line"></span><br><span class="line"><properties></span><br><span class="line"><!- 配置镜像前缀(就是仓库服务地址)--></span><br><span class="line">〈docker.image.prefix>l92.168.197.143:5000</docker.image.prefix></span><br><span class="line"></properties></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> 通过<plugin>标签添加了一个版本为136的dockerfile-maven-plugin插件。</span><br><span class="line">分别使用<repository>和<tag>标签配置了生成的镜像名称和标签。其中${docker. image.prefix}用于指定镜像前缀(需要继续配置),${project.artifactld}用于将项目名称指定为镜 像名称;${project.version)用于将项目版本指定为镜像版本。</span><br><span class="line"></span><br><span class="line">使用<useMavenSettingsForAuth>标签开启仓库用户认证。生成的镜像不管是推送到 DockerHub,还是本地私有镜像仓库,都必须先登录认证并通过后才可推送。该标签的作用就是 在使用maven插件的时候开启用户认证(本地未创建认证的私有仓库或者后续手动推送镜像则 不需要配置此标签)</span><br><span class="line"></span><br><span class="line">在<execution>标签中分别使用<phase>和<goals>子标签配置了 mvn的执行命令和自动 化动作。其中上述配置表示在使用mvn install执行打包项目时,会先进行打包,然后自动执行 镜像构建和镜像推送任务,这种配置方式可以很好地完成项目与Docker的自动化整合工作(如 果想要手动构建和推送镜像则可以去除<executions>标签)。</span><br><span class="line">在<properties>标签中使用< docker.image.prefix>子标签配置了生成的镜像前缀(也就是本地私有仓库地址),来为${docker.image.prefix}赋值。</span><br><span class="line"></span><br><span class="line">上述配置文件指定了<docker.image.prefix>标签(即镜像仓库前缀),这里使用的地址 192.168.197.143:5000 就是第 8 章介绍 Docker Swarm 集群时搭建的 Docker 机器 managerl 中的私有仓库地址,后续项目将在该集群上进行部署。</span><br><span class="line"></span><br><span class="line">上述 dockerfile-maven-plugin 插件的配置,需要在 microservice-mallmanagement 项目 的4个子项目模块的pom文件中分别添加,并且无需任何更改。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">3.[添加 docker-compose.yml 编排文件]</span><br><span class="line"></span><br><span class="line">version: "3"</span><br><span class="line">services:</span><br><span class="line">mysql:</span><br><span class="line">image: mysql:5.6</span><br><span class="line">restart: on-failure</span><br><span class="line">ports:</span><br><span class="line">- 3306:3306</span><br><span class="line">volumes:</span><br><span class="line">- microservice-mysql:/var/lib/mysql</span><br><span class="line">networks:</span><br><span class="line">- microservice-net</span><br><span class="line">environment:</span><br><span class="line">MYSQL__ROOT_PASSWORD: root</span><br><span class="line">MYSQL_DATABASE: microservice__mallmanagement</span><br><span class="line">deploy:</span><br><span class="line">replicas: 1</span><br><span class="line">restart_policy:</span><br><span class="line">condition: on-failure</span><br><span class="line">placement:</span><br><span class="line">constraints: [node.role == manager]</span><br><span class="line">eureka-server:</span><br><span class="line">image: 192.168.197.143:5000/microservice-eureka-server:0.0.1-SNAPSHOT</span><br><span class="line">restart: on-failure</span><br><span class="line">ports:</span><br><span class="line">- 8761:8761</span><br><span class="line">networks:</span><br><span class="line">- microservice-net</span><br><span class="line">deploy:</span><br><span class="line">replicas: 1</span><br><span class="line">restart_policy:</span><br><span class="line">condition: on-failure</span><br><span class="line">gateway-zuul:</span><br><span class="line">image: 192.168.197.143:5000/microservice-gateway-zuul:0.0.1-SNAPSHOT</span><br><span class="line">restart: on-failure</span><br><span class="line">ports:</span><br><span class="line">-8050:8050</span><br><span class="line">networks:</span><br><span class="line">-microservice-net</span><br><span class="line">depends_on:</span><br><span class="line">-eureka-server</span><br><span class="line">deploy:</span><br><span class="line">replicas: 1 </span><br><span class="line">restart_policy:</span><br><span class="line">condition: on-failure</span><br><span class="line">placement:</span><br><span class="line">constraints: [node.role == manager]</span><br><span class="line">order-service:</span><br><span class="line">image: 192.168.197.143:5000/microservice-orderservice:0.0.1-SNAPSHOT</span><br><span class="line">restart: on-failure</span><br><span class="line">ports:</span><br><span class="line">-7900:7900</span><br><span class="line">networks:</span><br><span class="line">-microservice-net</span><br><span class="line">depends_on:</span><br><span class="line">-mysql</span><br><span class="line">-eureka-server</span><br><span class="line">deploy:</span><br><span class="line">replicas: 2 </span><br><span class="line">restart_policy:</span><br><span class="line">condition: on-failure</span><br><span class="line">user-service:</span><br><span class="line">image: 192.168.197.143:5000/microservice-userservice:0.0.1-SNAPSHOT</span><br><span class="line">restart: on-failure</span><br><span class="line">ports:</span><br><span class="line">-8030:8030</span><br><span class="line">networks:</span><br><span class="line">-microservice-net</span><br><span class="line">depends_on:</span><br><span class="line">-mysql</span><br><span class="line">-eureka-server</span><br><span class="line">deploy:</span><br><span class="line">replicas: 2 </span><br><span class="line">restart_policy:</span><br><span class="line">condition: on-failure</span><br><span class="line">visualizer:</span><br><span class="line">image: dockersamples/visualizer:stable</span><br><span class="line">ports:</span><br><span class="line">-8081:8080</span><br><span class="line">networks:</span><br><span class="line">-microservice-net</span><br><span class="line">volumes:</span><br><span class="line">-/var/run/docker.sock:/var/run/docker.sock</span><br><span class="line">networks:</span><br><span class="line">microservice-net:</span><br><span class="line">volumes:</span><br><span class="line">microservice-mysql:</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> 在文件中,提供了 6个启动服务,除包含了 microservice-mallmanagement项目自带的 eureka-server、gateway-zuuk order-service 和 user-service 4个子项目外,还包含了 mysql数据库服务和visualizer集群环境下可视化工具服务。这些服务都是通过networks配置了 —个指定的名称为microservice-net的自定义网络(服务部署时会自动创建该网络),</span><br><span class="line">服务之间 可以通过该网络实现通信。需要注意的是,构建服务的镜像名称要与微服务整合时生成的镜像名称一致,否则无法找到 ,微服务项目与Docker的整合配置就已经完成,剩下的就是如何将项目进行打包,并 通过Docker进行部署了 </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">4.[环境搭建以及镜像准备]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">1.搭建Docker主机</span><br><span class="line"></span><br><span class="line"> 要将微服务项目运行在Docker中,首先必须保证运行环境安装了Docker引擎,这里我们就选用前面第8章中的8.2小节搭建的名为manage"的Docker机器,作为本次微服务部署的主机,同时也是集群环境下的管理节点,</span><br><span class="line">而另两台名为worked和worker2的Docker机器仍作 为集群环境下的工作节点(在实际开发中,Docker Swarm集群可能会涉及更多的工作节点,并 且会设置多个管理节点)</span><br><span class="line"> 需要说明的是,此次演示为了方便查看和管理,在managerl服务主机上搭建了本地私有镜像仓库,其仓库服务地址为192.168.197.143:5000,这与前面项目配置和整合文件编写的镜像前缀地址都是一致的,</span><br><span class="line">否则无法推送到指定仓库。关于本地私有仓库的搭建,此处不再做详细说 明,具体内容可以参考第7章中7.4.4小节介绍的Docker Registry本地私有仓库配置。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">2.安装应用编译工具JDK</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> (1)下载Linux版本的JDK工具包,本书使用的是jdk-8u144-linux-x64.tar.gz版本,并 在Linux机器上使用tar命令进行解压,具体操作指令如下。</span><br><span class="line">$ sudo tar -zxvf jdk-8ul44-linux-x64.tar,gz</span><br><span class="line"> (2)将执行上述解压指令后产生的解压包移动到自定义目录下(这里将解压包直接移动到了 /usr/lib/jvm @录下,如果不存在,要先创建该目录),具体操作指令如下。</span><br><span class="line">$ sudo mv jdkl.8.0 144/ /usr/lib/jvm</span><br><span class="line"> (3)配置JDK环境变量。修改/etc/profile文件,在profile文件中添加以下配置(注意JDK 解压包名称和版本号)</span><br><span class="line"> #set java environment</span><br><span class="line"> export JAVA_H0ME=/usr/lib/jvm/jdkl.8.0_144/</span><br><span class="line"> export JRE_HOME=${JAVA_HOME}/j re</span><br><span class="line"> export CLASSPATH=.:${JAVA_HOME}/1ib:${JRE_HOME)/1ib</span><br><span class="line"> export PATH=${JAVA_HOME}/bin:$PATH</span><br><span class="line"> </span><br><span class="line"> 完成有关JDK的环境配置后,可以执行source/etc/profile指令使配置立即生效。我们可以 使用java -version命令查看安装后的效果。</span><br><span class="line"></span><br><span class="line">3.安装应用打包工具Maven</span><br><span class="line"></span><br><span class="line"> 在前面介绍微服务与Docker整合配置时就已经说明,此次整合部署是通过Maven的install 命令自动执行打包、镜像构建和推送的,所以在此必须先要安装并配置好Maveno其具体配置 过程如下。</span><br><span class="line">(1)下载Linux版本的Maven工具包,本书使用的是apache-maven-3.5.0-bin.tar.gz版 本,并在Linux机器上使用tar命令进行解压,具体操作指令如下:</span><br><span class="line"></span><br><span class="line">$ sudo tar -zxvf apache-maven-3.5.0-bin.tar.gz</span><br><span class="line"></span><br><span class="line">(2)将执行上述解压命令后产生的解压包移动到自定义目录下(这里将解压包直接移动到了 opt目录下),具体操作指令如下:</span><br><span class="line">$ sudo mv apache-maven-3.5.0/ /opt</span><br><span class="line"></span><br><span class="line">(3)配置Maven环境变量。修改/etc/profile文件,在profile文件中添加以下配置(注意 Maven解压包名称和版本号):</span><br><span class="line"></span><br><span class="line"> #set maven envirment</span><br><span class="line"> export M2_HOME=/opt/apache-maven-3.5.0/</span><br><span class="line"> export M2=$M2_HOME/bin</span><br><span class="line"> export MAVEN_OPTS=n-Xms2 5 6m -Xmx512mn</span><br><span class="line"> export PATH=$M2:$PATH</span><br><span class="line"></span><br><span class="line"> 完成有关Maven的环境配置后,同样可以执行source /etc/profile指令使配置立即生效,然 后通过mvn -v命令查看安装配置后的Maven信息</span><br><span class="line"></span><br><span class="line">4.镜像准备</span><br><span class="line"></span><br><span class="line"> 由于之前10.2小节中dockerfile-maven的配置,在完成打包后也会自动构建镜像并推送到指定仓库,但无论是推送到DockerHub还是本地私有镜像仓库,必须先登录认证才可进行推送。</span><br><span class="line">所以为了能够自动打包、构建镜像和推送镜,在使用mvn install命令打包之前,除了需要预 先在dockerfile-maven插件配置中配置<useMavenSettingsForAuth>标签属性值为true外,还 需要在Maven的settings.xml配置文件(参考上一小节基础环境搭建时Maven的安装位置,此 示例中的地址为/opt/apache-maven-3.5.0/conf/settings.xml)中配置服务认证信息,具体配置 内容如下(注意要配置在<servers>标签内)。</span><br><span class="line"> <server></span><br><span class="line"> <id>192.168.197.143:5000</id> </span><br><span class="line"> <username>shitou</username></span><br><span class="line"> <password>123</password></span><br><span class="line"> </server></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> 读者在配置上述服务认证信息时,注意修改自己本地私有仓库的地址id以及登录认证用户 的用户名和密码。</span><br><span class="line">配置完成后,就可以将微服务项目microservice-mallmanagement复制到managerl服 务主机的某个工作目录下,并进入到该项目pom文件所在位置(最外层的pom文件目录), </span><br><span class="line">然后使用mvn install指令进行打包(首次打包会进行pom依赖文件的下载,所以需要一定的 时间)</span><br><span class="line"> 如果出现 HBUILD SUCCESS信息,就表示打包、镜像构建和推送成功。 如果某个过程执行失败,也可以从终端页面查看错误信息。</span><br><span class="line">当确定全部执行成功后,我们还可以实际确认。先通过docker images指令查看镜像列表中 是否有生成的指定镜像,然后再次进入本地私有镜像仓库配置的挂载目录/mnt/registry/docker/ registry/v2/repositories进行确认,查看生成的镜像是否也推送到了本地仓库。在Docker机器上正式打包部署时,项目配置文件中的服务地址将不再是localhost的本地连接,需 要按照第9章介绍微服务项目整合时的配置文件提示进行相应修改。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">5.微服务的手动部署</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> 非集群环境下的服务部署就是将整个微服务项目运行在单个Docker主机环境下。这里先在managerl机器上安装DockerCompose编排工具(参考10.1.2小节),</span><br><span class="line">通过该编排工具执行docker-compose.yml文件进行非集群环境下的服务部。具体部署服务过程如下。</span><br><span class="line"></span><br><span class="line">1.登录私有仓库</span><br><span class="line"></span><br><span class="line"> 由于此次部署的微服务所需的镜像都存放在本地私有镜像仓库,并且本地私有仓库配置有用户认证,所以想要通过本地私有仓库的镜像部署服务,</span><br><span class="line">就必须先登录认证,获取镜像的使用权限(DockerHub远程仓库镜像则不需要登录认证)具体操作指令如下。</span><br><span class="line">$ docker login 192.168.197.143:5000</span><br><span class="line"></span><br><span class="line">执行上述指令就可以登录到指定服务地址的Docker Registry本地私有镜像仓库了。此后该 Docker机器就会处于持续认证状态,我们可以使用docker logout 192.168.197.143:5000指令 退出认证。</span><br><span class="line"></span><br><span class="line">2.部署服务</span><br><span class="line"></span><br><span class="line">进入到项目docker-compose.yml文件所在目录下,执行服务部署指令来部署整个微服务 项目,具体指令如下。</span><br><span class="line"></span><br><span class="line">$ docker-compose up</span><br><span class="line"></span><br><span class="line"> 使用docker-compose up指令是在前台部署整个服务,终端窗口会打印出所有启动信息。 如果不想看到这些信息,还可以使用docker-compose up -d指令在后台部署服务。</span><br><span class="line">当服务部署完成后,可以通过docker ps指令查看所有服务是否都已正常运行(多个相互依 赖的服务同时部署过程可能需要一定的时间),</span><br><span class="line"> 所有的服务都已正常启动。此时,容器中对应的应用也已可以正常访问(后续会介绍具体的测试方式)。当不再需要某个服务时,</span><br><span class="line">可以在项目docker-compose.yml文件所在同级目录下使用结束指令结束整个服务,具体操作指令下</span><br><span class="line"></span><br><span class="line">$ docker-compose down</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">6.使用Jenkins自动部署微服务</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> Jenkins官网提供了多种安装方式,包括基于Java的war包,Linux、MacOS和Windows系统等方式。这里我们选择比较通用的war包方式为例,在集群管理节点managerl机器上安装—Jenkins工具</span><br><span class="line">(由于Jenkins是由java开发的,所以在安装Jenkins之前要确保已</span><br><span class="line">安装了JDK并配置了系统环境),具体步骤如下。</span><br><span class="line"></span><br><span class="line">1.下载 Jenkins</span><br><span class="line">在浏览器中输入Jenkins官网地址https://jenkins.io/download/访问其下载页面,选中页面 中 Long-term Support ( LTS,长期支持)版本最下方的 Generic java package ( .war),进行 Jenkins的war包下载,如图10-13所示。</span><br><span class="line"></span><br><span class="line">2.启动Jenkins服务</span><br><span class="line">将下载好的jenkins.war放到managerl机器中的某个目录下,直接使用如下指令即可启动 Jenkins 服务。</span><br><span class="line">$ java -jar jenkins.war -一httpPort=49001</span><br><span class="line">执行上述指令后,就会在Linux系统上通过war包的方式启动Jenkins服务。需要注意的是,Jenkins内部默认配置的端口是8080 (这与开发中很多端口有冲突),所以 我们在启动Jenkins服务时,使用一httpPort参数指定了服务启动的端口为49001 </span><br><span class="line"></span><br><span class="line">3.Jenkins初始化安装</span><br><span class="line"> 通过浏览器访问地址http://192.168.197.143:49001就可以正式访问Jenkins服务,在首次安装访问Jenkins时,会涉及Jenkins的初始化安装</span><br><span class="line">输入初始化认证密码后,会进入一个Jenkins插件定制安装界面,这也是首次启动访问 Jenkins时会出现的页面,页面中会提供Install suggested plugins (安装建议插件)和Select plugins to install(自行选择插件安装)两种方式,通常情况下,都会选择左侧的Install suggested plugins进行初始化插件安装</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">5.Jenkins集成插件配置</span><br><span class="line"></span><br><span class="line">1,安装Maven插件</span><br><span class="line"> 因为我们之前创建的微服务是Maven项目,在使用Jenkins时也需要创建一个Maven项目 进行持续集成,所以这里需要配置Maven插件。</span><br><span class="line">依次单击主页面的“系统管理”今“插件管理”今“可选插件”面板,然后在右侧搜索框输 入"Maven Integration plugin"关键字进行搜索。搜索出结果后,选中该插件,并单击下方的“直 接安装”按钮,即可进行Maven插件安装,其效果如图10-18所示。</span><br><span class="line">2,系统全局插件配置</span><br><span class="line">完成所需插件的安装后,必须在Jenkins ±进行全局插件配置,这样才能让Jenkins与其他 软件关联工作,这里配置的全局插件主要有JDK (项目编译工具)、Git (代码仓库GitHub管理 工具)、Maven (项目打包工具)和Docker (项目部署工具)。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">6.服务自动化部署</span><br><span class="line"></span><br><span class="line">1.构建新任务</span><br><span class="line">构建一个maven项目</span><br><span class="line"></span><br><span class="line"> 2.源码管理”中选择Git</span><br><span class="line">并在Repository URL中输入该项目所在 的GitHub源码地址</span><br><span class="line">3.构建触发器</span><br><span class="line"></span><br><span class="line">Build periodically 表示在某个时间点进行自动任务构建,比如"H 2 * * *"表示每天凌 晨2点开始执行项目构建(不管项目是否更新)</span><br><span class="line">PollSCM 表示每隔一段时间会自动检查更新进行任务构建,比如“*/10****”表示每 10分钟开始检查源码,如果有更新就自动执行构建。</span><br><span class="line">当默认没有进行构建触发器配置时我们可以在对应的任务面板中选择“立即构建”按钮, 随时进行手工触发任务构建。</span><br><span class="line">4.服务发布配置</span><br><span class="line"> </span><br><span class="line"> 在Post Steps (服务发布配置)页面,选择"Add post-build step"下拉列表中的"Execute shell"选项,并在命令框中输入需要发布服务的shell指令</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> docker stack deploy -c docker-compose-swarm.yml --with-registry-auth mallmanagement</span><br><span class="line"> </span><br><span class="line"> docker stack deploy -c docker-compose-swarm.yml 表示使用当前目录下 的docker-compose-swarm.yml展件部署服务到当前主机所在集群中;</span><br><span class="line"> --with-registry-auth 参数是对该集群下的所有节点进行通知,表示所有节点要到指定的本地私有仓库拉取镜像来启动服务(如果使用的是Docker Hub镜像仓库,此参数可省略);</span><br><span class="line"> mallmanagement是自定义的整 个集群服务的总名称。</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/docker.png" alt="如图"></p>
<figure class="highlight plain"><t
</summary>
<category term="Docker" scheme="http://yoursite.com/categories/Docker/"/>
<category term="Docker" scheme="http://yoursite.com/tags/Docker/"/>
</entry>
<entry>
<title>Shell 常用脚本</title>
<link href="http://yoursite.com/2019/12/12/Shell%20%E5%B8%B8%E7%94%A8%E8%84%9A%E6%9C%AC/"/>
<id>http://yoursite.com/2019/12/12/Shell 常用脚本/</id>
<published>2019-12-12T03:49:08.000Z</published>
<updated>2019-12-13T02:04:30.707Z</updated>
<content type="html"><![CDATA[<h5 id="Shell-脚本-输入参数-并判断是否存在"><a href="#Shell-脚本-输入参数-并判断是否存在" class="headerlink" title="Shell 脚本 输入参数 并判断是否存在"></a>Shell 脚本 输入参数 并判断是否存在</h5><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">server_array[0]=server1</span><br><span class="line">server_array[1]=server2</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">font="\E[34m\033[01m"</span><br><span class="line"></span><br><span class="line">end="\E[0m"</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">if [ ! -n "$1" ] ;then</span><br><span class="line"> echo -e "${font} you have not enter a server name ! such like : sh xxx.sh servername ${end}"</span><br><span class="line"> exit 1;</span><br><span class="line">fi</span><br><span class="line"></span><br><span class="line">flag=0</span><br><span class="line"></span><br><span class="line">for var in ${server_array[@]};</span><br><span class="line">do</span><br><span class="line"> if [ $var == "$1" ];then</span><br><span class="line"> flag=1 </span><br><span class="line"> fi</span><br><span class="line">done</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">if [ "$flag" -eq 1 ];</span><br><span class="line">then</span><br><span class="line"> </span><br><span class="line"> echo -e "${font} $1 ${end}"</span><br><span class="line">else</span><br><span class="line"> echo -e "${font} Error Server Name!!!! ${end}"</span><br><span class="line">fi</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h5 id="Shell-脚本-输入参数-并判断是否存在"><a href="#Shell-脚本-输入参数-并判断是否存在" class="headerlink" title="Shell 脚本 输入参数 并判断是否存在"></a>Shell 脚本 输入参数 并判断是否存在</
</summary>
<category term="Shell" scheme="http://yoursite.com/categories/Shell/"/>
<category term="Shell" scheme="http://yoursite.com/tags/Shell/"/>
</entry>
<entry>
<title>Docker介绍</title>
<link href="http://yoursite.com/2019/11/20/Docker%E4%BB%8B%E7%BB%8D/"/>
<id>http://yoursite.com/2019/11/20/Docker介绍/</id>
<published>2019-11-20T01:39:31.000Z</published>
<updated>2019-11-20T03:46:58.280Z</updated>
<content type="html"><![CDATA[<h3 id="Docker-Docs"><a href="#Docker-Docs" class="headerlink" title="Docker Docs"></a><a href="https://docs.docker.com/get-started/" target="_blank" rel="noopener">Docker Docs</a></h3><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/docker.png" alt="如图"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Docker是一个开源的应用容器引擎。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制相互之间不会有任何接口(类似 iPhone的app),更重要的是容器性能开销极低。</span><br></pre></td></tr></table></figure><h2 id="Docker的应用场景"><a href="#Docker的应用场景" class="headerlink" title="Docker的应用场景"></a>Docker的应用场景</h2><ol><li>Web 应用的自动化打包和发布。</li><li>自动化测试和持续集成、发布。</li><li>在服务型环境中部署和调整数据库或其他的后台应用。</li><li>从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。</li></ol><h2 id="Docker-的优点"><a href="#Docker-的优点" class="headerlink" title="Docker 的优点"></a>Docker 的优点</h2><p>Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。</p><h4 id="1、快速,一致地交付您的应用程序"><a href="#1、快速,一致地交付您的应用程序" class="headerlink" title="1、快速,一致地交付您的应用程序"></a>1、快速,一致地交付您的应用程序</h4><p>Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。<br>容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:<br>您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。<br>他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。<br>当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。<br>测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。</p><h4 id="2、响应式部署和扩展"><a href="#2、响应式部署和扩展" class="headerlink" title="2、响应式部署和扩展"></a>2、响应式部署和扩展</h4><p>Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。<br>Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。</p><h4 id="3、在同一硬件上运行更多工作负载"><a href="#3、在同一硬件上运行更多工作负载" class="headerlink" title="3、在同一硬件上运行更多工作负载"></a>3、在同一硬件上运行更多工作负载</h4><p>Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。</p><h5 id="镜像-Image"><a href="#镜像-Image" class="headerlink" title="镜像(Image)"></a>镜像(Image)</h5><p>就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。</p><h5 id="容器-Container"><a href="#容器-Container" class="headerlink" title="容器(Container)"></a>容器(Container)</h5><p>镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。</p><h5 id="仓库-Repository"><a href="#仓库-Repository" class="headerlink" title="仓库(Repository)"></a>仓库(Repository)</h5><p>仓库可看着一个代码控制中心,用来保存镜像。</p>]]></content>
<summary type="html">
<h3 id="Docker-Docs"><a href="#Docker-Docs" class="headerlink" title="Docker Docs"></a><a href="https://docs.docker.com/get-started/" target
</summary>
<category term="Docker" scheme="http://yoursite.com/categories/Docker/"/>
<category term="Docker" scheme="http://yoursite.com/tags/Docker/"/>
</entry>
<entry>
<title>Logback</title>
<link href="http://yoursite.com/2019/11/19/Logback/"/>
<id>http://yoursite.com/2019/11/19/Logback/</id>
<published>2019-11-19T01:39:31.000Z</published>
<updated>2019-11-20T03:43:28.972Z</updated>
<content type="html"><![CDATA[<h4 id="标签"><a href="#标签" class="headerlink" title="标签"></a>标签</h4><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></pre></td><td class="code"><pre><span class="line">appender:定义了打印过滤的条件、打印输出方式、滚动策略、编码方式、打印格式等等</span><br><span class="line">root: 是根logger</span><br><span class="line">logger: 指定某些应用具体的日志输出方式</span><br><span class="line">scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。</span><br><span class="line">scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。</span><br><span class="line">debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。</span><br></pre></td></tr></table></figure><h4 id="Appender"><a href="#Appender" class="headerlink" title="Appender"></a>Appender</h4><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"> appender:种类</span><br><span class="line"> 1.ConsoleAppender:把日志添加到控制台</span><br><span class="line"> 2.FileAppender:把日志添加到文件</span><br><span class="line"> 3.RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。它是FileAppender的子类</span><br><span class="line"></span><br><span class="line">appender过滤器:</span><br><span class="line"> 1.ThresholdFilter临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝</span><br><span class="line"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"></span><br><span class="line"> <level>INFO</level></span><br><span class="line"> </filter></span><br><span class="line"></span><br><span class="line"> 2.LevelFilter级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath(用于配置符合过滤条件的操作) 和 onMismatch(用于配置不符合过滤条件的操作)接收或拒绝日志。</span><br><span class="line"> <filter class="ch.qos.logback.classic.filter.LevelFilter"></span><br><span class="line"> <level>INFO</level></span><br><span class="line"> <onMatch>ACCEPT</onMatch></span><br><span class="line"> <onMismatch>DENY</onMismatch></span><br><span class="line"> </filter></span><br><span class="line"> DENY:日志将立即被抛弃不再经过其他过滤器</span><br><span class="line"> NEUTRAL:有序列表里的下个过滤器过接着处理日志</span><br><span class="line"> ACCEPT:日志会被立即处理,不再经过剩余过滤器</span><br><span class="line"> appender file 子标签:</span><br><span class="line"> 标签用于指定被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。</span><br><span class="line"> <file></span><br><span class="line"> ${logging.path}/glmapper-spring-boot/SERVICE-USER.log</span><br><span class="line"> </file></span><br><span class="line">rollingPolicy 子标签</span><br><span class="line"> 这个子标签用来描述滚动策略的。这个只有appender的class是RollingFileAppender时才需要配置。这个也会涉及文件的移动和重命名(a.log->a.log.2018.07.22)。</span><br><span class="line"> TimeBasedRollingPolicy 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。这个下面又包括了</span><br><span class="line"> FileNamePattern 日志文件输出的文件名:按天回滚 daily</span><br><span class="line"> maxHistory 日志文件保留天数</span><br><span class="line">encoder 子标签</span><br><span class="line"> 记录事件进行格式化。它干了两件事:</span><br><span class="line"> 把日志信息转换成字节数组</span><br><span class="line"> 把字节数组写入到输出流</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"></span><br><span class="line"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}- %msg%n</pattern></span><br><span class="line"> <charset>UTF-8</charset></span><br><span class="line"> </encoder></span><br></pre></td></tr></table></figure><h4 id="logger"><a href="#logger" class="headerlink" title="logger"></a>logger</h4><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><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"> <logger name="com.spring.boot.controller"</span><br><span class="line"> level="${logging.level}" additivity="false"></span><br><span class="line"> <appender-ref ref="SERVICE-USER" /></span><br><span class="line"> </logger></span><br><span class="line"></span><br><span class="line">上面的这个配置文件描述的是:com.spring.boot.controller这个包下的${logging.level}级别的日志将会使用SERVICE-USER来打印。</span><br><span class="line"> name:用来指定受此logger约束的某一个包或者具体的某一个类。</span><br><span class="line"> level:用来设置打印级别(TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF),还有一个值INHERITED或者同义词NULL,代表强制执行上级的级别。如果没有设置此属性,那么当前logger将会继承上级的级别。</span><br><span class="line"> addtivity:用来描述是否向上级logger传递打印信息。默认是true。</span><br></pre></td></tr></table></figure><h4 id="示例"><a href="#示例" class="headerlink" title="示例"></a>示例</h4><pre><code><!--每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用contextName标签设置成其他名字,用于区分不同应用程序的记录--> <?xml version="1.0" encoding="UTF-8"?> <configuration scan="false" scanPeriod="60 seconds" debug="false"><!-- 定义日志的根目录 --><property name="LOG_HOME" value="/app/log" /><!-- 定义日志文件名称 --><property name="appName" value="nasus-springboot"></property><!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 --><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <!-- 日志输出格式: %d表示日期时间, %thread表示线程名, %-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n是换行符 --> <layout class="ch.qos.logback.classic.PatternLayout"> <springProfile name="dev"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern> </springProfile> </layout></appender><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 --> <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 指定日志文件的名称 --> <file>${LOG_HOME}/${appName}.log</file> <!-- 当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名 TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 --> <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动, 且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是, 那些为了归档而创建的目录也会被删除。 --> <MaxHistory>365</MaxHistory> <!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志输出格式: --> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern> </layout></appender><!-- logger主要用于存放日志对象,也可以定义日志类型、级别 name:表示匹配的logger类型前缀,也就是包的前半部分 level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出, false:表示只用当前logger的appender-ref,true: 表示当前logger的appender-ref和rootLogger的appender-ref都有效--><!-- hibernate logger --><logger name="com.nasus" level="debug" /><!-- Spring framework logger --><logger name="org.springframework" level="debug" additivity="false"></logger><!-- root 与 logger 是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。 --><root level="info"> <appender-ref ref="stdout" /> <appender-ref ref="appLogAppender" /></root> </configuration> </code></pre>]]></content>
<summary type="html">
<h4 id="标签"><a href="#标签" class="headerlink" title="标签"></a>标签</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span
</summary>
<category term="Logback" scheme="http://yoursite.com/categories/Logback/"/>
<category term="Logback" scheme="http://yoursite.com/tags/Logback/"/>
</entry>
<entry>
<title>Btrace 远程调试</title>
<link href="http://yoursite.com/2019/11/13/Btrace%20%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95/"/>
<id>http://yoursite.com/2019/11/13/Btrace 远程调试/</id>
<published>2019-11-13T01:39:31.000Z</published>
<updated>2019-11-13T01:34:08.539Z</updated>
<content type="html"><![CDATA[<p><a href="https://github.com/btraceio/btrace" target="_blank" rel="noopener">Btrace GitHub链接</a></p><h5 id="下载Btrace到本地"><a href="#下载Btrace到本地" class="headerlink" title="下载Btrace到本地"></a>下载Btrace到本地</h5><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><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"></span><br><span class="line">$ wget https://github.com/btraceio/btrace/releases/download/v1.3.11.3/btrace-bin-1.3.11.3.zip</span><br><span class="line"></span><br><span class="line">$ unzip btrace-bin-1.3.11.3.zip -d ./btrace //解压到指定文件夹</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ vim /etc/profile</span><br><span class="line">export BTRACE_HOME=/home/btrace; ## btrace安装目录</span><br><span class="line">export PATH=$PATH:$BTRACE_HOME/bin;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ btrace --version</span><br><span class="line">BTrace v.1.3.11.3 (20181217)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ jps //查看Java项目进程Pid 也可以 ps -ef |grep xxx</span><br><span class="line"></span><br><span class="line">13890 Bootstrap</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ cd /home/btrace/bin</span><br><span class="line"></span><br><span class="line">$ btrace 13890 ../samples/AllMethods.java //btrace <PID> XXX.java 执行命令</span><br></pre></td></tr></table></figure><p>属性注解<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">@TLS标注的属性可以在追踪脚本的方法中通讯</span><br></pre></td></tr></table></figure></p><h5 id="方法注解"><a href="#方法注解" class="headerlink" title="方法注解"></a>方法注解</h5><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><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">@OnMethod:指定该方法在什么情况下被执行,clazz属性指定要跟踪的类的全限定类名,也可以用正则表达式,</span><br><span class="line"> “/类名的Pattern/”匹配,如/javax\\.swing\\..*/;用”+类名”追踪所有子类,</span><br><span class="line"> 如+java.lang.Runnable;用”@xxx”追踪用该注解注解过的类,</span><br><span class="line"> 如@javax.jws.WebService。method属性指定要追踪的方法名称,也可以用正则表达式。</span><br><span class="line"> location属性用@Location来指定该方法在目标方法执行前(后、异常、某行、某个方法调用)被执行。</span><br><span class="line">@OnTimer:定时执行该方法。</span><br><span class="line">@OnExit:当脚本运行Sys.exit(code)时执行该方法。</span><br><span class="line">@OnError:当脚本运行抛出异常时执行该方法。</span><br><span class="line">@OnEvent:脚本运行时Ctrl+C可以发送事件。</span><br><span class="line">@OnLowMemory:指定一个内存阀值,低于阀值值执行该方法。</span><br><span class="line">@OnProbe:指定一个xml文件来描述在什么时候执行该方法。</span><br></pre></td></tr></table></figure><h5 id="方法参数注解"><a href="#方法参数注解" class="headerlink" title="方法参数注解"></a>方法参数注解</h5><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">@Self:指目标对象本身。</span><br><span class="line">@Retrun:指目标程序方法返回值(需要配合Kind.RETURN)。</span><br><span class="line">@ProbeClassName:指目标类名。</span><br><span class="line">@ProbeMethodName:指目标方法名。</span><br><span class="line">@targetInstance:指@Location指定的clazz和method的目标(需要配合Kind.CALL)。</span><br><span class="line">@targetMethodOrField:指@Location指定的clazz和method的目标的方法或字段(需要配合Kind.CALL)。</span><br><span class="line">@Duration:指目标方法执行时间,单位是纳秒(需要需要配合Kind.RETURN或Kind.ERROR一起使用)。</span><br><span class="line">AnyType:获取对应请求的参数,泛指任意类型。</span><br></pre></td></tr></table></figure><h5 id="追踪时机参数"><a href="#追踪时机参数" class="headerlink" title="追踪时机参数"></a>追踪时机参数</h5><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"></span><br><span class="line">Kind.Entry:开始进入目标方法时,默认值?。</span><br><span class="line">Kind.Return:目标方法返回时。</span><br><span class="line">Kind.Error:异常没被捕获被抛出目标方法之外时?。</span><br><span class="line">Kind.Throw:异常抛出时?。</span><br><span class="line">Kind.Catch:异常被捕获时。</span><br><span class="line">Kind.Call:被调用时。</span><br><span class="line">Kind.Line:执行到某行时。</span><br></pre></td></tr></table></figure><h4 id="Btrace-实例Demo"><a href="#Btrace-实例Demo" class="headerlink" title="Btrace 实例Demo"></a>Btrace 实例Demo</h4><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">import com.sun.btrace.annotations.*;</span><br><span class="line">import com.sun.btrace.services.impl.Printer;</span><br><span class="line">import com.sun.btrace.AnyType;</span><br><span class="line">import com.sun.btrace.BTraceUtils;</span><br><span class="line"></span><br><span class="line">import java.lang.reflect.Field;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * 拦截时机</span><br><span class="line"> * 不写Location,默认就是刚进入函数的时候(Kind.ENTRY)</span><br><span class="line"> * 异常抛出(Throw),</span><br><span class="line"> * 异常被捕获(Catch),</span><br><span class="line"> * 异常没被捕获被抛出函数之外(Error),主要用于对某些异常情况的跟踪。</span><br><span class="line"> * clazz 类名</span><br><span class="line"> * method 方法名</span><br><span class="line"> */</span><br><span class="line">@BTrace</span><br><span class="line">public class DappDemo {</span><br><span class="line"> @Injected(ServiceType.RUNTIME)</span><br><span class="line"> private static Printer printer;</span><br><span class="line"> @TLS</span><br><span class="line"> static long beginTime;</span><br><span class="line"></span><br><span class="line"> @OnMethod(clazz = "com.xxx", method = "xxx")</span><br><span class="line"> public static void getTime() {</span><br><span class="line"> beginTime = BTraceUtils.timeMillis();</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> @OnMethod(clazz = "com.xxx", method = "xxx", location = @Location(value = Kind.RETURN))</span><br><span class="line"> public static void btraceDemo(@Self Object self,Integer chain, @ProbeClassName String probeClass, @ProbeMethodName String probeMethod, @Return AnyType result) {</span><br><span class="line"> //打印耗时</span><br><span class="line"> printer.println(" 耗时--->[" + (BTraceUtils.timeMillis() - beginTime) + "]" + " ms");</span><br><span class="line"> //打印类名</span><br><span class="line"> printer.println(" ClassName--->[" + probeClass + "]");</span><br><span class="line"> //打印方法名</span><br><span class="line"> printer.println("MethodName--->[" + probeMethod + "]");</span><br><span class="line"> //打印入参</span><br><span class="line"> printer.println(" Param--->chain: [" + chain + "]");</span><br><span class="line"></span><br><span class="line"> printer.println(" Result--->[" + result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> printer.println("当前Name属性值: " +BTraceUtils.get(BTraceUtils.field(BTraceUtils.classForName("com.XXX",BTraceUtils.contextClassLoader()), name(属性昵称), result));</span><br><span class="line"> //打印耗时</span><br><span class="line"> printer.println(" ==============");</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://github.com/btraceio/btrace" target="_blank" rel="noopener">Btrace GitHub链接</a></p>
<h5 id="下载Btrace到本地"><a href="#下载Btra
</summary>
<category term="Java" scheme="http://yoursite.com/categories/Java/"/>
<category term="Btrace" scheme="http://yoursite.com/tags/Btrace/"/>
</entry>
<entry>
<title>Navicat Premium 12永久激活</title>
<link href="http://yoursite.com/2019/11/08/Navicat%20Premium%2012%E6%B0%B8%E4%B9%85%E6%BF%80%E6%B4%BB/"/>
<id>http://yoursite.com/2019/11/08/Navicat Premium 12永久激活/</id>
<published>2019-11-08T09:39:31.000Z</published>
<updated>2019-11-08T01:52:43.070Z</updated>
<content type="html"><![CDATA[<h4 id="一、下载Navicat-Premium-12并安装-官网地址"><a href="#一、下载Navicat-Premium-12并安装-官网地址" class="headerlink" title="一、下载Navicat Premium 12并安装 官网地址"></a>一、下载Navicat Premium 12并安装 <a href="https://www.navicat.com.cn/download/navicat-premium" target="_blank" rel="noopener">官网地址</a></h4><h4 id="二、点击注册机下载"><a href="#二、点击注册机下载" class="headerlink" title="二、点击注册机下载"></a>二、<a href="https://pan.baidu.com/s/16L-w29NV3BPTRn3RgbkY1w" target="_blank" rel="noopener">点击注册机下载</a></h4><h4 id="三、激活Navicat-Premium-12"><a href="#三、激活Navicat-Premium-12" class="headerlink" title="三、激活Navicat Premium 12"></a>三、激活Navicat Premium 12</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1、以管理员身份运行注册机</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2、打开注册机后,在1) Patch,勾选Backup、Host和Navicat v12,然后点击Patch按钮:</span><br></pre></td></tr></table></figure><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/1.png" alt="如图"><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">3.找到Navicat Premium 12安装路径下的navicat.exe,选中并点击打开。</span><br><span class="line">此时出现如下弹窗,提示navicat.exe - x64 -> Cracked.,提示已破解(别高兴,还没结束)。若提示libcc.dll或navicat.exe出错,检查是否未关闭Navicat Premium,或到安装目录下将libcc.dll和navicat.exe删除,并将libcc.dll.BAK或navicat.exe.BAK去掉.BAK后缀名。否则卸载已安装的Navicat Premium并清理文件残留和注册表残留:</span><br></pre></td></tr></table></figure></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/2.png" alt="如图"><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4. Keygen / Offline Activation,点击Generate,将自动生成SerialKeygen(注册码)</span><br></pre></td></tr></table></figure></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/3.png" alt="如图"><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5.打开Navicat Premium 12,点击菜单栏的帮助,选择注册,在注册窗口键处填入上一步生成的Serial Keygen(即注册码),然后点击激活:</span><br></pre></td></tr></table></figure></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/4.png" alt="如图"><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">6.点击手动激活:</span><br><span class="line">将Navicat手动激活窗口的请求码框中内容复制到注册机Request Code框中,点击Activation Code下面的Generate按钮(若此处出现错误,要么你未完全按照教程来,要么你所安装的版本高于注册机所支持的版本):</span><br></pre></td></tr></table></figure></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/5.png" alt="如图"><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">7.将注册机Activation Code处生成的激活码内容复制到Navicat手动激活窗口的激活码框中(或点击Activation Code处下面的Copy按钮,这样会自动粘贴到Navicat手动激活窗口的激活码框中),然后点击激活按钮:</span><br></pre></td></tr></table></figure></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/6.png" alt="如图"><br><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/7.png" alt="如图"></p>]]></content>
<summary type="html">
<h4 id="一、下载Navicat-Premium-12并安装-官网地址"><a href="#一、下载Navicat-Premium-12并安装-官网地址" class="headerlink" title="一、下载Navicat Premium 12并安装 官网地址"
</summary>
<category term="Mysql" scheme="http://yoursite.com/categories/Mysql/"/>
<category term="工具" scheme="http://yoursite.com/tags/%E5%B7%A5%E5%85%B7/"/>
</entry>
<entry>
<title>Linux服务器如何禁用密码登录,使用秘钥文件登录增加服务器安全性?</title>
<link href="http://yoursite.com/2019/11/05/Linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95%EF%BC%8C%E4%BD%BF%E7%94%A8%E7%A7%98%E9%92%A5%E6%96%87%E4%BB%B6%E7%99%BB%E5%BD%95%E5%A2%9E%E5%8A%A0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E6%80%A7/"/>
<id>http://yoursite.com/2019/11/05/Linux服务器如何禁用密码登录,使用秘钥文件登录增加服务器安全性/</id>
<published>2019-11-05T09:39:31.000Z</published>
<updated>2019-11-07T02:58:57.841Z</updated>
<content type="html"><![CDATA[<h5 id="生成秘钥公钥"><a href="#生成秘钥公钥" class="headerlink" title="生成秘钥公钥"></a>生成秘钥公钥</h5><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line">$ ssh-keygen //生成秘钥</span><br><span class="line">Generating public/private rsa key pair.</span><br><span class="line">Enter file in which to save the key (/root/.ssh/id_rsa): </span><br><span class="line">Enter passphrase (empty for no passphrase): </span><br><span class="line">Enter same passphrase again: </span><br><span class="line">Your identification has been saved in /root/.ssh/id_rsa.</span><br><span class="line">Your public key has been saved in /root/.ssh/id_rsa.pub.</span><br><span class="line">The key fingerprint is:</span><br><span class="line">The key's randomart image is:</span><br><span class="line">+---[RSA 2048]----+</span><br><span class="line">| .o=B@*. |</span><br><span class="line">| . = =o*.*. |</span><br><span class="line">|. . + @ + o o |</span><br><span class="line">|oo o * + |</span><br><span class="line">|o +.. + S |</span><br><span class="line">|.oo. . |</span><br><span class="line">| =. |</span><br><span class="line">|..=oE |</span><br><span class="line">| *+ o. |</span><br><span class="line">+----[SHA256]-----+</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys //把公钥放进授权文件中去</span><br><span class="line"></span><br><span class="line">$ cd /root/.ssh</span><br><span class="line"></span><br><span class="line">$ chmod 600 authorized_keys</span><br><span class="line"></span><br><span class="line">$ chmod 700 ~/.ssh</span><br><span class="line"></span><br><span class="line">$ vim /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line">RSAAuthentication yes</span><br><span class="line">PubkeyAuthentication yes</span><br><span class="line">PermitRootLogin yes //另外,请留意 root 用户能否通过 SSH 登录,默认为yes:</span><br><span class="line"> </span><br><span class="line">当我们完成全部设置并以密钥方式登录成功后,可以禁用密码登录。这里我们先不禁用,先允许密码登陆</span><br><span class="line">PasswordAuthentication yes</span><br><span class="line"> </span><br><span class="line">$ service sshd restart //重启服务</span><br></pre></td></tr></table></figure><h5 id="客户端使用秘钥登录"><a href="#客户端使用秘钥登录" class="headerlink" title="客户端使用秘钥登录"></a>客户端使用秘钥登录</h5><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">1. /root/.ssh/id_rsa 到Windwos桌面 更改为.pem文件 </span><br><span class="line">2.使用SecurtCRT SSH远程连接工具进行登录 </span><br><span class="line">3.登录成功后 请把/etc/ssh/sshd_config 文件中的PasswordAuthentication改为No 禁止密码进行远程登录 防止服务器被恶意SSH暴力破解攻击</span><br></pre></td></tr></table></figure><h6 id="服务器被攻击如图"><a href="#服务器被攻击如图" class="headerlink" title="服务器被攻击如图"></a>服务器被攻击如图</h6><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/LinuxLo'ginWithPem.png" alt="相关截图"></p>]]></content>
<summary type="html">
<h5 id="生成秘钥公钥"><a href="#生成秘钥公钥" class="headerlink" title="生成秘钥公钥"></a>生成秘钥公钥</h5><figure class="highlight plain"><table><tr><td class="gut
</summary>
<category term="Linux" scheme="http://yoursite.com/categories/Linux/"/>
<category term="SSH" scheme="http://yoursite.com/tags/SSH/"/>
</entry>
<entry>
<title>Linux 安装 Elasticsearch Kibana Logstash</title>
<link href="http://yoursite.com/2019/11/02/Linux%20%20%E5%AE%89%E8%A3%85%20Elasticsearch%20Kibana%20Logstash/"/>
<id>http://yoursite.com/2019/11/02/Linux 安装 Elasticsearch Kibana Logstash/</id>
<published>2019-11-02T02:00:00.000Z</published>
<updated>2019-11-04T10:38:44.154Z</updated>
<content type="html"><![CDATA[<p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/table.png" alt="相关截图"></p><p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html/" target="_blank" rel="noopener">各系统安装说明</a></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/elasticsearch.png" alt="相关截图"></p><h4 id="安装-ElasticSearch"><a href="#安装-ElasticSearch" class="headerlink" title="安装 ElasticSearch"></a>安装 ElasticSearch</h4><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br></pre></td><td class="code"><pre><span class="line"> </span><br><span class="line">$ groupadd es //使用 root 用户启动 elasticsearch 会报错,用 root 用户新建 es</span><br><span class="line"></span><br><span class="line">$ useradd -g es es //新建 es 用户,并添加到 es用户组</span><br><span class="line"></span><br><span class="line">$ passwd es //设置 es 用户的用户密码,按照提示输入你的密码</span><br><span class="line"></span><br><span class="line">$ chown -R es:es /es //授权,我这里文件路径在 /es 下面</span><br><span class="line"></span><br><span class="line">$ vim /etc/sysctl.conf //编辑</span><br><span class="line"> #添加一行</span><br><span class="line"> vm.max_map_count=655360</span><br><span class="line"> </span><br><span class="line">$ sysctl -p //配置生效</span><br><span class="line"></span><br><span class="line">$ su es //切换用户 </span><br><span class="line"></span><br><span class="line">$ mkdir es</span><br><span class="line"></span><br><span class="line">$ cd es </span><br><span class="line"></span><br><span class="line">$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.tar.gz</span><br><span class="line"></span><br><span class="line">$ tar -zxvf elasticsearch-6.7.0.tar.gz //解压文件</span><br><span class="line"></span><br><span class="line">#es 作为集群,应该至少 3 个节点,这里服务器内存只有 2G,部署一个单机版 3 节点的伪集群</span><br><span class="line">$ mv elasticsearch-6.7.0-node elasticsearch-6.7.0-node1 //给文件夹改名</span><br><span class="line"></span><br><span class="line">#修改配置文件,默认值为 1g,我这里改为 160m,否则服务器带不动</span><br><span class="line">$ cd elasticsearch-6.7.0-node1</span><br><span class="line"></span><br><span class="line">$ vim config/jvm.options</span><br><span class="line"> -Xms160m</span><br><span class="line"> -Xmx160m</span><br><span class="line"></span><br><span class="line">$ mkdir elasticsearch-6.7.0-data1 //新建文件夹存放数据和日志,默认存放于 es 安装目录,为了防止误删和被覆盖,另建文件夹</span><br><span class="line"></span><br><span class="line">$ cd elasticsearch-6.7.0-data1/</span><br><span class="line"></span><br><span class="line">$ mkdir data logs</span><br><span class="line"></span><br><span class="line">#修改配置文件(https://www.cnblogs.com/zhq1007/p/8482454.html)</span><br><span class="line">$ cd /es/elasticsearch-6.7.0-node1/config/</span><br><span class="line">$ vim elasticsearch.yml</span><br><span class="line"> </span><br><span class="line"> cluster.name: 你的集群名称</span><br><span class="line"> node.name: node-1# 节点名称 其余两个节点分别为 node-2、node-3</span><br><span class="line"> node.master: true</span><br><span class="line"> node.data: true</span><br><span class="line"> bootstrap.memory_lock: true</span><br><span class="line"> path.data: /opt/fangzhibin/es670/elasticsearch-6.7.0-data1/data# 其余两个节点为 data2/data、data3/data</span><br><span class="line"> path.logs: /opt/fangzhibin/es670/elasticsearch-6.7.0-data1/logs # 其余两个节点为 data2/logs、data3/logs</span><br><span class="line"> network.host: 0.0.0.0</span><br><span class="line"> transport.tcp.port: 9301# 因为在同一台服务器,其余两个节点分别为 9302、9303</span><br><span class="line"> http.port: 9201 # 因为在同一台服务器,其余两个节点分别为 9202、9203</span><br><span class="line"> discovery.zen.ping.unicast.hosts: ["节点IP:9301","节点IP:9302","节点IP:9303"] # </span><br><span class="line"> discovery.zen.minimum_master_nodes: 2 # 根据主节点数量计算:主节点数量/2 + 1;3 个节点则设置为 2</span><br><span class="line"></span><br><span class="line">$ cd /es/elasticsearch-6.7.0-node1</span><br><span class="line">$ bin/elasticsearch -d</span><br><span class="line"></span><br><span class="line">#验证是否正常启动 node1(或者浏览器访问 http://你的IP:9201)</span><br><span class="line">curl "http://你的IP:9201"</span><br><span class="line">#出现以下内容即可,node2 和node3 同理</span><br><span class="line"> {</span><br><span class="line"> "name" : "node-1",</span><br><span class="line"> "cluster_name" : "cluster-aly",</span><br><span class="line"> "cluster_uuid" : "RixPnO6hTQClAqxlAt_v2g",</span><br><span class="line"> "version" : {</span><br><span class="line"> "number" : "6.7.0",</span><br><span class="line"> "build_flavor" : "default",</span><br><span class="line"> "build_type" : "tar",</span><br><span class="line"> "build_hash" : "8453f77",</span><br><span class="line"> "build_date" : "2019-03-21T15:32:29.844721Z",</span><br><span class="line"> "build_snapshot" : false,</span><br><span class="line"> "lucene_version" : "7.7.0",</span><br><span class="line"> "minimum_wire_compatibility_version" : "5.6.0",</span><br><span class="line"> "minimum_index_compatibility_version" : "5.0.0"</span><br><span class="line"> },</span><br><span class="line"> "tagline" : "You Know, for Search"</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">#正常启动 node1 后,复制节点</span><br><span class="line">$ cd /es</span><br><span class="line">$ cp -r elasticsearch-6.7.0-data1 elasticsearch-6.7.0-data2</span><br><span class="line">$ cp -r elasticsearch-6.7.0-node1 elasticsearch-6.7.0-node2</span><br><span class="line">$ cp -r elasticsearch-6.7.0-data1 elasticsearch-6.7.0-data3</span><br><span class="line">$ cp -r elasticsearch-6.7.0-node1 elasticsearch-6.7.0-node3</span><br><span class="line">#注意:按照上面的配置项说明更改 node2、node3 的配置文件</span><br><span class="line">#启动 node2 和 node3</span><br><span class="line">$ cd /es/elasticsearch-6.7.0-node2</span><br><span class="line">$ bin/elasticsearch -d</span><br><span class="line">$ cd /es/elasticsearch-6.7.0-node3</span><br><span class="line">$ bin/elasticsearch -d</span><br><span class="line">#验证是否正常启动,参考上面</span><br></pre></td></tr></table></figure><h5 id="elasticsearch-默认配置"><a href="#elasticsearch-默认配置" class="headerlink" title="elasticsearch 默认配置"></a>elasticsearch 默认配置</h5><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><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><br><span class="line">cluster.name: elasticsearch_production</span><br><span class="line"></span><br><span class="line">#该节点名称</span><br><span class="line">node.name: elasticsearch_001_data</span><br><span class="line"></span><br><span class="line">#数据存放目录</span><br><span class="line">path.data: /home/elasticsearch-6.7.0-data1/data</span><br><span class="line"></span><br><span class="line">#日志存放目录</span><br><span class="line">path.logs: /home/elasticsearch-6.7.0-data1/logs</span><br><span class="line"></span><br><span class="line">#是否可以被选举为master节点</span><br><span class="line">node.master: true</span><br><span class="line"></span><br><span class="line">#是否为data node</span><br><span class="line">node.data: true</span><br><span class="line"></span><br><span class="line">#端口</span><br><span class="line">http.port: 9200</span><br></pre></td></tr></table></figure><h4 id="安装-Kibana"><a href="#安装-Kibana" class="headerlink" title="安装 Kibana"></a>安装 Kibana</h4><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><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></pre></td><td class="code"><pre><span class="line">### Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。</span><br><span class="line"></span><br><span class="line">#同样使用 es 用户</span><br><span class="line">$ cd /es</span><br><span class="line">$ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-linux-x86_64.tar.gz</span><br><span class="line">$ tar -zxvf kibana-6.7.0-linux-x86_64.tar.gz</span><br><span class="line">$ mv kibana-6.7.0-linux-x86_64 kibana</span><br><span class="line">$ cd kibana</span><br><span class="line">$ vim config/kibana.yml</span><br><span class="line"># 更改如下配置</span><br><span class="line"># 配置参考官方文档:https://www.elastic.co/guide/cn/kibana/current/settings.html</span><br><span class="line">server.host: "0.0.0.0" # 指定后端服务器的主机地址</span><br><span class="line">i18n.locale: "zh-CN" #汉化</span><br><span class="line">elasticsearch.hosts: ["http://localhost:9201"] # 所有 Elasticsearch 实例的 URL,用逗号分隔</span><br><span class="line"></span><br><span class="line">$ nohup /es/kibana/bin/kibana > /es/kibana/kibana.log & //启动 kibana 浏览器访问: http://Kibana服务器IP:5601</span><br></pre></td></tr></table></figure><h4 id="安装-Logstash"><a href="#安装-Logstash" class="headerlink" title="安装 Logstash"></a>安装 Logstash</h4><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">$ mkdir /es/logstash</span><br><span class="line"></span><br><span class="line">$ cd /es/logstash</span><br><span class="line"></span><br><span class="line">$ wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.0.zip</span><br><span class="line"></span><br><span class="line">$ unzip logstash-6.3.0.zip</span><br><span class="line"></span><br><span class="line">$ mv logstash-6.3.0 logstash</span><br><span class="line"></span><br><span class="line">$ cd logstash </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ bin/logstash -f config/xxx.conf > /es/logstash/logstash.log & //启动 Logstash启动时需要指定配置监控日志策略的文件,xx.conf放在ELK\logstash\config目录下</span><br><span class="line">简单的配置说明</span><br><span class="line">input {</span><br><span class="line"></span><br><span class="line"> tcp {</span><br><span class="line"> </span><br><span class="line"> mode => "server" #模式</span><br><span class="line"></span><br><span class="line"> host => "localhost"#服务器IP</span><br><span class="line"> </span><br><span class="line"> port => 900 #端口</span><br><span class="line"></span><br><span class="line"> codec => json_lines #JSON格式</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">output{</span><br><span class="line"></span><br><span class="line"> elasticsearch { </span><br><span class="line"> action => "index" </span><br><span class="line"> hosts => ["localhost:9200"] #Elasticsearch服务的IP和端口 </span><br><span class="line"> index => "applog" #Kibana管理中搜索所使用的索引名 </span><br><span class="line"> </span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> stdout { codec => rubydebug } </span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="最终效果图"><a href="#最终效果图" class="headerlink" title="最终效果图"></a>最终效果图</h4><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/ekl.png" alt="相关截图"></p>]]></content>
<summary type="html">
<p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/table.png" alt="相关截图"></p>
<p><a href="https://www.elastic.c
</summary>
<category term="Elasticsearch" scheme="http://yoursite.com/categories/Elasticsearch/"/>
<category term="Elasticsearch" scheme="http://yoursite.com/tags/Elasticsearch/"/>
<category term="Logstash" scheme="http://yoursite.com/tags/Logstash/"/>
<category term="Kibana" scheme="http://yoursite.com/tags/Kibana/"/>
</entry>
<entry>
<title>Linux 常用命令</title>
<link href="http://yoursite.com/2019/10/29/Linux%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/"/>
<id>http://yoursite.com/2019/10/29/Linux常用命令/</id>
<published>2019-10-29T06:42:18.000Z</published>
<updated>2019-12-12T09:59:40.008Z</updated>
<content type="html"><![CDATA[<h2 id="Linux-命令"><a href="#Linux-命令" class="headerlink" title="Linux 命令"></a>Linux 命令</h2><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">$ curl cip.cc # 查看公网IP</span><br><span class="line"> </span><br><span class="line">$ curl http://ifconfig.me</span><br><span class="line"></span><br><span class="line">$ lsb_release -a #查看Linux版本</span><br><span class="line"></span><br><span class="line">$ lsof | grep deleted #查看删除进程</span><br><span class="line"></span><br><span class="line">$ df -h #查看磁盘空间 </span><br><span class="line"></span><br><span class="line">$ du -h --max-depth=2 | sort -n | head -12 #查找排在前12的大文件夹</span><br><span class="line"></span><br><span class="line">$ scp -P 22 ./xxx.txt [email protected]:/home/xxx #SCP上传文件到指定服务器</span><br><span class="line"></span><br><span class="line">$ scp -P 22 -r ./xxx [email protected]:/home/xxx #SCP上传文件夹到指定服务器</span><br><span class="line"></span><br><span class="line">$ scp -P 22 -r [email protected]:/home/xxx /home/xxx #SCP下载服务器文件夹到本地</span><br><span class="line"></span><br><span class="line">$ scp -P 22 [email protected]:/home/xxx.txt /home/xxx #SCP下载服务器文件到本地</span><br><span class="line"></span><br><span class="line">$ netstat -tunlp |grep 8443 #查看端口占用</span><br><span class="line"></span><br><span class="line">$ chmod 777 xxx.sh #赋予脚本执行权</span><br><span class="line"></span><br><span class="line">$ ps -aux | sort -rnk 3 | head -20 #找出当前系统CPU使用量较高的进程 </span><br><span class="line"></span><br><span class="line">$ ps -aux|grep java //查看java进程</span><br><span class="line"></span><br><span class="line">$ ps -aux //查看所有进程</span><br><span class="line"></span><br><span class="line">$ tree a -L 2 //以树状格式列出目录 -L n n表示只显示到第几层</span><br><span class="line"></span><br><span class="line">$ wget http://file.tgz //文件下载</span><br><span class="line"> </span><br><span class="line">$ curl http://file.tgz //请求URL</span><br><span class="line"></span><br><span class="line">$ ping www.just-ping.com //网络检测</span><br><span class="line"></span><br><span class="line">$ tar -czf test.tar.gz /test1 /test2 //列出压缩文件列表</span><br><span class="line"></span><br><span class="line">$ tar -tzf test.tar.gz //解压文件</span><br><span class="line"></span><br><span class="line">$ tar -xvzf test.tar.gz //解压文件</span><br><span class="line"></span><br><span class="line">$ head -n 10 example.txt //查看文件前10行</span><br><span class="line"></span><br><span class="line">$ tail -n 10 example.txt //查看文件后10行 </span><br><span class="line"></span><br><span class="line">$ tail -f exmaple.log //查看日志最近更新</span><br><span class="line"></span><br><span class="line">$ netstat -tunlp | grep 8080 查看端口8080的使用情况 //查看端口占用情况</span><br><span class="line"></span><br><span class="line">$ lsof -i :8080 //查看端口属于哪个进程</span><br><span class="line"></span><br><span class="line">$ chmod 777 file.java file.java的权限-rwxrwxrwx,r表示读、w表示写、x表示可执行</span><br><span class="line">##赋予执行权 </span><br><span class="line"></span><br><span class="line">$ chmod 777 xxx.sh </span><br><span class="line"></span><br><span class="line">$ grep -H 'spring' *.xml //查找所以有的包含spring的xml文件</span><br><span class="line"></span><br><span class="line">$ ls -l | grep '.jar' //查找当前目录中的所有jar文件</span><br><span class="line"></span><br><span class="line">$ grep 'test' d* //显示所有以d开头的文件中包含test的行</span><br><span class="line"></span><br><span class="line">$ grep 'test' aa bb cc //显示在aa,bb,cc文件中匹配test的行</span><br><span class="line"></span><br><span class="line">$ grep '[a-z]\{5\}' aa #显示所有包含每个字符串至少有5个连续小写字符的字符串的行</span><br><span class="line"></span><br><span class="line">$ ps –ef|grep tomcat //查看所有有关tomcat的进程</span><br><span class="line"></span><br><span class="line">$ ps -ef|grep --color java //高亮要查询的关键字</span><br><span class="line"></span><br><span class="line">$ kill -9 19979 //终止线程号位19979的进程</span><br></pre></td></tr></table></figure><h4 id="Linux-限制Root-指定IP登陆"><a href="#Linux-限制Root-指定IP登陆" class="headerlink" title="Linux 限制Root 指定IP登陆"></a>Linux 限制Root 指定IP登陆</h4><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></pre></td><td class="code"><pre><span class="line">$ vim /etc/ssh/sshd_config //编辑ssh的配置文件默认 /etc/ssh/sshd_config,在文件最后面另起一行添加</span><br><span class="line">AllowUsers [email protected]</span><br><span class="line"></span><br><span class="line">$ service sshd restart //保存并退出,再重启一下ssh服务</span><br></pre></td></tr></table></figure><h4 id="Linux-修改SSH端口"><a href="#Linux-修改SSH端口" class="headerlink" title="Linux 修改SSH端口"></a>Linux 修改SSH端口</h4><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">$ vim /etc/ssh/sshd_config //找到#Port 22字段 删掉#,将22改为其他不被使用的端口</span><br><span class="line">Port 22</span><br><span class="line">$ service sshd restart //保存并退出,再重启一下ssh服务</span><br></pre></td></tr></table></figure><h4 id="find-查找文件"><a href="#find-查找文件" class="headerlink" title="find(查找文件)"></a>find(查找文件)</h4><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><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></pre></td><td class="code"><pre><span class="line">$ find / -name *sync-huobi*</span><br><span class="line"> </span><br><span class="line">$ find / -name filename.txt //根据名称查找/目录下的filename.txt文件。</span><br><span class="line"></span><br><span class="line">$ find . -name "*.xml" //递归查找所有的xml文件</span><br><span class="line"></span><br><span class="line">$ find . -name "*" |xargs grep "hello" //递归查找所有文件内容中包含hello world的xml文件</span><br><span class="line"></span><br><span class="line">$ find . -type f -size +100M -print0 | xargs -0 du -h | sort -nr //(https://www.cnblogs.com/kerrycode/p/4391859.html) #查找大文件</span><br><span class="line"></span><br><span class="line">$ find ./ -size 0 | xargs rm -f & //删除文件大小为零的文件</span><br><span class="line"></span><br><span class="line">$ find / -name *.conf -type f -print | xargs tar cjf test.tar.gz #tar命令将找出的文件直接打包</span><br></pre></td></tr></table></figure><h4 id=""><a href="#" class="headerlink" title=" "></a> </h4><h4 id="用户命令"><a href="#用户命令" class="headerlink" title="用户命令"></a>用户命令</h4><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"> </span><br><span class="line">$ sudo rm a.txt 使用管理员身份删除文件</span><br><span class="line"></span><br><span class="line">$ userdel -r xxx 完全删除用户</span><br><span class="line"></span><br><span class="line">$ chown -R ubuntu /var/lib/mysql //给指定用户加权限</span><br><span class="line"></span><br><span class="line">$ chown -R ubuntu:root /home/ubuntu //给指定用户加权限</span><br></pre></td></tr></table></figure><h4 id="Redis-查看大Key"><a href="#Redis-查看大Key" class="headerlink" title="Redis (查看大Key)"></a>Redis (查看大Key)</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">redis-cli -h IP -p 6379 -a password --bigkeys</span><br></pre></td></tr></table></figure><h4 id="启动SpringBoot-Jar"><a href="#启动SpringBoot-Jar" class="headerlink" title="启动SpringBoot Jar"></a>启动SpringBoot Jar</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nohup java -jar exchange-announcement-0.0.1-SNAPSHOT.jar > /home/logs/xxx.log & //后台启动一个Jar包 输出日志到指定文件</span><br></pre></td></tr></table></figure><h4 id="安装反编译工具-反编译python"><a href="#安装反编译工具-反编译python" class="headerlink" title="安装反编译工具 反编译python"></a>安装反编译工具 反编译python</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pip install uncompyle 安装反编译工具 反编译python</span><br><span class="line">uncompyle6 upload_photo.pyc upload_photo.py</span><br></pre></td></tr></table></figure><h4 id="阿里云挂载磁盘"><a href="#阿里云挂载磁盘" class="headerlink" title="阿里云挂载磁盘"></a>阿里云挂载磁盘</h4><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></pre></td><td class="code"><pre><span class="line">$ mount /dev/vdb1 /clouddisk ##将云盘进行挂载</span><br><span class="line">(vdb是快照对应的盘符,需要到系统内确认是不是vdb1,挂载到 clouddisk目录)</span><br><span class="line"></span><br><span class="line">$ fuser -mv /clouddisk/ ##先杀死使用该目录的所有进程</span><br><span class="line"></span><br><span class="line">$ umount /dev/vdb1 ##在阿里云卸载云盘之前执行卸载操作</span><br></pre></td></tr></table></figure><h4 id="Vim-批量替换"><a href="#Vim-批量替换" class="headerlink" title="Vim 批量替换"></a>Vim 批量替换</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ %s#abc#123#g abc 替换为 123 //命令行</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h2 id="Linux-命令"><a href="#Linux-命令" class="headerlink" title="Linux 命令"></a>Linux 命令</h2><figure class="highlight plain"><table><tr><td cl
</summary>
<category term="Linux" scheme="http://yoursite.com/categories/Linux/"/>
<category term="Linux" scheme="http://yoursite.com/tags/Linux/"/>
<category term="Redis" scheme="http://yoursite.com/tags/Redis/"/>
<category term="SpingBoot" scheme="http://yoursite.com/tags/SpingBoot/"/>
<category term="阿里云" scheme="http://yoursite.com/tags/%E9%98%BF%E9%87%8C%E4%BA%91/"/>
</entry>
<entry>
<title>Mysql 数据库表数据的快速迁移</title>
<link href="http://yoursite.com/2019/09/18/Mysql%20%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A1%A8%E6%95%B0%E6%8D%AE%E7%9A%84%E5%BF%AB%E9%80%9F%E8%BF%81%E7%A7%BB/"/>
<id>http://yoursite.com/2019/09/18/Mysql 数据库表数据的快速迁移/</id>
<published>2019-09-18T07:11:08.000Z</published>
<updated>2019-09-18T08:25:43.848Z</updated>
<content type="html"><![CDATA[<h5 id="表数据迁移-前提-目标数据库和源数据库含有相同数据库名和表"><a href="#表数据迁移-前提-目标数据库和源数据库含有相同数据库名和表" class="headerlink" title="表数据迁移 (前提:目标数据库和源数据库含有相同数据库名和表)"></a>表数据迁移 (前提:目标数据库和源数据库含有相同数据库名和表)</h5><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">mysql> ALTER TABLE t_app_banner DISCARD TABLESPACE; //目标数据库.ibd文件与原先的.frm文件解除绑定 </span><br><span class="line"></span><br><span class="line">$ cd /var/lib/mysql //mysql数据库文件存放位置 在/etc/mysql/mysql.conf.d中查看</span><br><span class="line"></span><br><span class="line">$ ls</span><br><span class="line">auto.cnf test debian-5.7.flag ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema sys</span><br><span class="line"></span><br><span class="line">$ls -lht</span><br><span class="line">total 144K</span><br><span class="line">-rw-r----- 1 mysql mysql 9.1K Sep 18 08:00 t_app_banner.frm</span><br><span class="line">-rw-r----- 1 mysql mysql 67 Sep 18 03:00 db.opt</span><br><span class="line">-rw-rw-r-- 1 mysql mysql 128K Sep 16 06:50 t_app_banner.ibd</span><br><span class="line"></span><br><span class="line">$ 复制要恢复表的.ibd文件 至目标数据库的相同目录下进行覆盖</span><br><span class="line"></span><br><span class="line">$cd /var/lib/mysql/test</span><br><span class="line">$ ls -lht</span><br><span class="line">total 144K</span><br><span class="line">-rw-r----- 1 mysql mysql 9.1K Sep 18 08:00 t_app_banner.frm</span><br><span class="line">-rw-r----- 1 mysql mysql 67 Sep 18 03:00 db.opt</span><br><span class="line">-rw-rw-r-- 1 ubuntu ubuntu 128K Sep 16 06:50 t_app_banner.ibd //如果该文件使用者为ubuntu需要进行权限更改</span><br><span class="line"></span><br><span class="line">$ chown mysql:mysql /var/lib/mysql/test -R //修改t_app_banner.ibd的授权用户</span><br><span class="line"></span><br><span class="line">$mysql> ALTER TABLE t_app_banner IMPORT TABLESPACE; //恢复ibd和frm文件的关联</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h5 id="表数据迁移-前提-目标数据库和源数据库含有相同数据库名和表"><a href="#表数据迁移-前提-目标数据库和源数据库含有相同数据库名和表" class="headerlink" title="表数据迁移 (前提:目标数据库和源数据库含有相同数据库名和表)"><
</summary>
<category term="Mysql" scheme="http://yoursite.com/categories/Mysql/"/>
<category term="Mysql" scheme="http://yoursite.com/tags/Mysql/"/>
</entry>
<entry>
<title>Linux 安装Jenkins、Linux启动多个Tomcat、安装JDK</title>
<link href="http://yoursite.com/2019/08/30/Linux%20%E5%AE%89%E8%A3%85Jenkins%E3%80%81Linux%E5%90%AF%E5%8A%A8%E5%A4%9A%E4%B8%AATomcat%E3%80%81%E5%AE%89%E8%A3%85JDK/"/>
<id>http://yoursite.com/2019/08/30/Linux 安装Jenkins、Linux启动多个Tomcat、安装JDK/</id>
<published>2019-08-30T03:00:08.000Z</published>
<updated>2019-10-30T08:46:22.573Z</updated>
<content type="html"><![CDATA[<h3 id="安装Java-略"><a href="#安装Java-略" class="headerlink" title="安装Java(略)"></a>安装Java(略)</h3><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><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><br><span class="line">$ tar zxvf jdk-8u231-linux-x64.tar.gz //下载 jdk-8u231-linux-x64.tar.gz 解压到/usr/local/java</span><br><span class="line"></span><br><span class="line">$ vim /etc/profile </span><br><span class="line"></span><br><span class="line">配置环境变量 </span><br><span class="line">export JAVA_HOME=/usr/local/java</span><br><span class="line">export JRE_HOME=${JAVA_HOME}/jre </span><br><span class="line">export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib </span><br><span class="line">export PATH=${JAVA_HOME}/bin:$PATH</span><br><span class="line"></span><br><span class="line">$ source /etc/profile</span><br><span class="line"></span><br><span class="line">$ java -version</span><br><span class="line">java version "1.8.0_45"</span><br><span class="line">Java(TM) SE Runtime Environment (build 1.8.0_45-b14)</span><br><span class="line">Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)</span><br><span class="line"></span><br><span class="line">$ echo $JAVA_HOME ##输出Java安装目录</span><br><span class="line">/usr/local/jdk</span><br></pre></td></tr></table></figure><h3 id="Linux启动多个Tomcat"><a href="#Linux启动多个Tomcat" class="headerlink" title="Linux启动多个Tomcat"></a>Linux启动多个Tomcat</h3><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><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><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">$ vim /etx/profile</span><br><span class="line"></span><br><span class="line">##########first tomcat###########</span><br><span class="line">CATALINA_BASE=/home/tomcat-1</span><br><span class="line">CATALINA_HOME=/home/tomcat-1</span><br><span class="line">TOMCAT_HOME=/home/tomcat-1</span><br><span class="line">export CATALINA_BASE CATALINA_HOME TOMCAT_HOME</span><br><span class="line">##########first tomcat###########</span><br><span class="line"></span><br><span class="line">##########second tomcat##########</span><br><span class="line">CATALINA2_BASE=/home/tomcat-2</span><br><span class="line">CATALINA2_HOME=/home/tomcat-2</span><br><span class="line">TOMCAT2_HOME=/home/tomcat-2</span><br><span class="line">export CATALINA2_BASE CATALINA2_HOME TOMCAT2_HOME</span><br><span class="line">##########second tomcat##########</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ vim /home/tomcat-data/bin/catalina.sh //找到OS specific support 在下面添加</span><br><span class="line"># OS specific support. $var _must_ be set to either true or false.</span><br><span class="line">export CATALINA_BASE=$CATALINA2_BASE</span><br><span class="line">export CATALINA_HOME=$CATALINA2_HOME</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ vim /home/tomcat-2/conf/server.xml // 修改 conf/server.xml 修改关闭端口 监听端口 访问端口</span><br></pre></td></tr></table></figure><h3 id="Ubuntu-安装jenkins"><a href="#Ubuntu-安装jenkins" class="headerlink" title="Ubuntu 安装jenkins"></a>Ubuntu 安装jenkins</h3><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><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><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">$ wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -</span><br><span class="line">$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'</span><br><span class="line">$ sudo apt-get update</span><br><span class="line">$ sudo apt-get install jenkins</span><br><span class="line">$ service jenkins status //jenkins服务状态</span><br><span class="line">$ service jenkins stop //启动jenkins</span><br><span class="line">$ service jenkins start //停止jenkins</span><br><span class="line">$ service jenkins restart //重启jenkins</span><br><span class="line">$ vim /etc/default/jenkins //修改以下属性为root </span><br><span class="line"># user and group to be invoked as (default to jenkins)</span><br><span class="line">JENKINS_USER=root</span><br><span class="line">JENKINS_GROUP=root</span><br><span class="line">$ find / -name "jenkins" //查找jenkins目录 进行root授权</span><br><span class="line">$ chown -R root:root /usr/share/jenkins</span><br><span class="line">$ chown -R root:root /usr/share/doc/jenkins</span><br><span class="line">$ chown -R root:root /etc/init.d/jenkins</span><br><span class="line">$ chown -R root:root /etc/default/jenkins</span><br><span class="line">$ chown -R root:root /etc/logrotate.d/jenkins</span><br><span class="line">$ chown -R root:root /var/lib/jenkins</span><br><span class="line">$ chown -R root:root /var/cache/jenkins</span><br><span class="line">$ chown -R root:root /var/log/jenkins</span><br><span class="line">$ service jenkins stop //重启jenkins</span><br><span class="line">如果你的`/etc/init.d/jenkins`文件无法启动Jenkins,编辑`/etc/default/jenkins`, 修改 ----HTTP_PORT=8080----`为----HTTP_PORT=8081----` 在这里,“8081”也可被换为其他可用端口。</span><br><span class="line">ln -s /opt/jdk1.8.0_201/bin/java /usr/bin/java //创建java软连接</span><br></pre></td></tr></table></figure><h3 id="centos版本-安装Jenkins"><a href="#centos版本-安装Jenkins" class="headerlink" title="centos版本 安装Jenkins"></a>centos版本 安装Jenkins</h3><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo</span><br><span class="line">$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key</span><br><span class="line">$ yum install jenkins</span><br><span class="line">Loaded plugins: fastestmirror</span><br><span class="line">Setting up Install Process</span><br><span class="line">Loading mirror speeds from cached hostfile</span><br><span class="line">jenkins | 2.9 kB 00:00 </span><br><span class="line">jenkins/primary_db | 29 kB 00:00 </span><br><span class="line">Resolving Dependencies</span><br><span class="line">--> Running transaction check</span><br><span class="line">---> Package jenkins.noarch 0:2.176.3-1.1 will be installed</span><br><span class="line">--> Finished Dependency Resolution</span><br><span class="line"></span><br><span class="line">Dependencies Resolved</span><br><span class="line"></span><br><span class="line">===========================================================================================================================================================</span><br><span class="line"> Package Arch Version Repository Size</span><br><span class="line">===========================================================================================================================================================</span><br><span class="line">Installing:</span><br><span class="line"> jenkins noarch 2.176.3-1.1 jenkins 74 M</span><br><span class="line"></span><br><span class="line">Transaction Summary</span><br><span class="line">===========================================================================================================================================================</span><br><span class="line">Install 1 Package(s)</span><br><span class="line"></span><br><span class="line">Total download size: 74 M</span><br><span class="line">Installed size: 74 M</span><br><span class="line">Is this ok [y/N]: y</span><br><span class="line">Downloading Packages:</span><br><span class="line">jenkins-2.176.3-1.1.noarch.rpm | 74 MB 00:26 </span><br><span class="line">Running rpm_check_debug</span><br><span class="line">Running Transaction Test</span><br><span class="line">Transaction Test Succeeded</span><br><span class="line">Running Transaction</span><br><span class="line"> Installing : jenkins-2.176.3-1.1.noarch 1/1 </span><br><span class="line"> Verifying : jenkins-2.176.3-1.1.noarch 1/1 </span><br><span class="line"></span><br><span class="line">Installed:</span><br><span class="line"> jenkins.noarch 0:2.176.3-1.1 </span><br><span class="line"></span><br><span class="line">Complete!</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ service jenkins start //启动Jenkins</span><br><span class="line">Starting Jenkins bash: /usr/bin/java: No such file or directory</span><br><span class="line"> [FAILED]</span><br><span class="line">说明该目录下没有配置Java </span><br><span class="line">$ vi /etc/sysconfig/jenkins //修改一下默认端口(8080)和启动用户</span><br><span class="line">JENKINS_USER="root"</span><br><span class="line">JENKINS_PORT="8081"</span><br><span class="line">$ echo $JAVA_HOME ##输出Java安装目录</span><br><span class="line">/usr/local/jdk</span><br><span class="line">$ vim /etc/init.d/jenkins </span><br><span class="line">candidates=</span><br><span class="line">/etc/alternatives/java</span><br><span class="line">/usr/lib/jvm/java-1.8.0/bin/java</span><br><span class="line">/usr/lib/jvm/jre-1.8.0/bin/java</span><br><span class="line">/usr/lib/jvm/java-1.7.0/bin/java</span><br><span class="line">/usr/lib/jvm/jre-1.7.0/bin/java</span><br><span class="line">/usr/lib/jvm/java-11.0/bin/java</span><br><span class="line">/usr/lib/jvm/jre-11.0/bin/java</span><br><span class="line">/usr/lib/jvm/java-11-openjdk-amd64</span><br><span class="line">/usr/bin/java</span><br><span class="line">/usr/local/jdk/bin/java //增加Java安装目录</span><br><span class="line"></span><br><span class="line">$ service jenkins start //启动jenkins 成功</span><br><span class="line">Starting Jenkins </span><br><span class="line"> [ OK ]</span><br><span class="line">$ cat /var/lib/jenkins/secrets/initialAdminPassword</span><br><span class="line">62ce0816e3c24d9aa3fac37a9a39fb4r</span><br></pre></td></tr></table></figure><h6 id="在浏览器输入ip-8080进入Jenkins登录页面。如图:"><a href="#在浏览器输入ip-8080进入Jenkins登录页面。如图:" class="headerlink" title="在浏览器输入ip:8080进入Jenkins登录页面。如图:"></a>在浏览器输入ip:8080进入Jenkins登录页面。如图:</h6><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/startJenkins.png" alt="如图"></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/isntallPlugns.png" alt="如图"></p><h6 id="出现一下情况"><a href="#出现一下情况" class="headerlink" title="出现一下情况"></a>出现一下情况</h6><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/nonetword.png" alt="如图"></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/updatesite.png" alt="如图"><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><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">解决方法: http://ip:8080/pluginManager/advanced Update Site 下的 http://updates.jenkins.io/update-center.json 修改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json </span><br><span class="line">之后 在浏览器输入 http://ip:8080/restart 再进入 http://ip:8080登陆即可正常</span><br><span class="line"></span><br><span class="line">$ service jenkins start //如果还不行 进行重启</span><br></pre></td></tr></table></figure></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/install.png" alt="如图"></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/adduser.png" alt="如图"></p><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/ready.png" alt="如图"></p><h6 id="如果出现登陆成功卡在空白页面-输入http-ip-8080-restart-进行重启-或-service-jenkins-start"><a href="#如果出现登陆成功卡在空白页面-输入http-ip-8080-restart-进行重启-或-service-jenkins-start" class="headerlink" title="如果出现登陆成功卡在空白页面 输入http://ip:8080/restart 进行重启 或 service jenkins start"></a>如果出现登陆成功卡在空白页面 输入<a href="http://ip:8080/restart" target="_blank" rel="noopener">http://ip:8080/restart</a> 进行重启 或 service jenkins start</h6><!--##### jdk配置 --><!--![如图](https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/globalSettings.png)-->]]></content>
<summary type="html">
<h3 id="安装Java-略"><a href="#安装Java-略" class="headerlink" title="安装Java(略)"></a>安装Java(略)</h3><figure class="highlight plain"><table><tr><td
</summary>
<category term="Jenkins" scheme="http://yoursite.com/categories/Jenkins/"/>
<category term="Jenkins" scheme="http://yoursite.com/tags/Jenkins/"/>
</entry>
<entry>
<title>Linux 安装Maven</title>
<link href="http://yoursite.com/2019/08/30/Linux%20%E5%AE%89%E8%A3%85Maven/"/>
<id>http://yoursite.com/2019/08/30/Linux 安装Maven/</id>
<published>2019-08-30T03:00:08.000Z</published>
<updated>2019-12-20T08:42:37.904Z</updated>
<content type="html"><![CDATA[<p><a href="https://maven.apache.org/download.cgi" target="_blank" rel="noopener">Maven官网下载地址</a></p><p>######安装 Java<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><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">$ sudo apt-get update</span><br><span class="line"></span><br><span class="line">$ sudo apt-get install openjdk-8-jdk</span><br><span class="line"></span><br><span class="line">$ java -version</span><br><span class="line">openjdk version "1.8.0_232"</span><br><span class="line">OpenJDK Runtime Environment (build 1.8.0_232-8u232-b09-0ubuntu1~18.04.1-b09)</span><br><span class="line">OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)</span><br></pre></td></tr></table></figure></p><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz</span><br><span class="line">--2019-09-06 16:35:40-- http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz</span><br><span class="line">Resolving mirrors.tuna.tsinghua.edu.cn... 101.6.8.193, 2402:f000:1:408:8100::1</span><br><span class="line">Connecting to mirrors.tuna.tsinghua.edu.cn|101.6.8.193|:80... connected.</span><br><span class="line">HTTP request sent, awaiting response... 200 OK</span><br><span class="line">Length: 9142315 (8.7M) [application/x-gzip]</span><br><span class="line">Saving to: “apache-maven-3.6.2-bin.tar.gz”</span><br><span class="line"></span><br><span class="line">100%[================================================================================================================================================>] 9,142,315 630K/s in 16s </span><br><span class="line"></span><br><span class="line">2019-09-06 16:35:56 (552 KB/s) - “apache-maven-3.6.2-bin.tar.gz” saved [9142315/9142315]</span><br><span class="line"></span><br><span class="line">$ ls</span><br><span class="line">apache-maven-3.6.2-bin.tar.gz bin include jdk lib lib64 libexec records sbin share src</span><br><span class="line">$ tar zxvf apache-maven-3.6.2-bin.tar.gz </span><br><span class="line">$ mv apache-maven-3.6.2 maven</span><br><span class="line">$ vim /etc/profile //尾部添加 配置环境变量</span><br><span class="line">MAVEN_HOME=/usr/local/maven</span><br><span class="line">PATH=$PATH:$MAVEN_HOME/bin</span><br><span class="line">export MAVEN_HOME</span><br><span class="line">export PATH</span><br><span class="line">$ source /etc/profile</span><br><span class="line">$ mvn -v //验证是否安装成功</span><br><span class="line">Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)</span><br><span class="line">Maven home: /usr/local/maven</span><br><span class="line">Java version: 1.8.0_45, vendor: Oracle Corporation, runtime: /usr/local/jdk/jre</span><br><span class="line">Default locale: en_US, platform encoding: UTF-8</span><br><span class="line">OS name: "linux", version: "2.6.32-754.12.1.el6.x86_64", arch: "amd64", family: "unix"</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://maven.apache.org/download.cgi" target="_blank" rel="noopener">Maven官网下载地址</a></p>
<p>######安装 Java<br><figure class="hig
</summary>
<category term="Maven" scheme="http://yoursite.com/categories/Maven/"/>
<category term="Maven" scheme="http://yoursite.com/tags/Maven/"/>
</entry>
<entry>
<title>Mysql开启log_bin并进行数据恢复</title>
<link href="http://yoursite.com/2019/08/29/Mysql%E5%BC%80%E5%90%AFlog_bin%E5%B9%B6%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D/"/>
<id>http://yoursite.com/2019/08/29/Mysql开启log_bin并进行数据恢复/</id>
<published>2019-08-29T07:11:08.000Z</published>
<updated>2019-08-29T10:23:43.013Z</updated>
<content type="html"><![CDATA[<h3 id="Mysql开启binlog"><a href="#Mysql开启binlog" class="headerlink" title="Mysql开启binlog"></a>Mysql开启binlog</h3><table><thead><tr><th>日志类型</th><th>写入日志的信息</th></tr></thead><tbody><tr><td>错误日志</td><td>记录在启动,运行或停止mysqld时遇到的问题</td></tr><tr><td>通用查询日志</td><td>记录建立的客户端连接和执行的语句</td></tr><tr><td>二进制日志</td><td>记录更改数据的语句</td></tr><tr><td>中继日志</td><td>从复制主服务器接收的数据更改</td></tr><tr><td>慢查询日志</td><td>记录所有执行时间超过 long_query_time 秒的所有查询或不使用索引的查询</td></tr><tr><td>DDL日志(元数据日志)</td><td>元数据操作由DDL语句执行</td></tr></tbody></table><p>本文主要介绍二进制日志 binlog。</p><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">Binlog日志的两个最重要的使用场景</span><br><span class="line"></span><br><span class="line">1.MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的</span><br><span class="line">2.数据恢复:通过使用 mysqlbinlog工具来使恢复数据</span><br><span class="line"></span><br><span class="line">启用binlog,通过配置 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf </span><br><span class="line"></span><br><span class="line">$ vim /etc/mysql/mysql.conf.d/mysqld.cnf </span><br><span class="line"></span><br><span class="line">$ service mysql restart //重启Mysql</span><br><span class="line"></span><br><span class="line">$ mysql -u root -p </span><br><span class="line">mysql> show binary logs;</span><br><span class="line">1381 - You are not using binary logging</span><br><span class="line">mysql> show binary logs;</span><br><span class="line">+------------------+-----------+</span><br><span class="line">| Log_name | File_size |</span><br><span class="line">+------------------+-----------+</span><br><span class="line">| mysql-bin.000001 | 154 |</span><br><span class="line">+------------------+-----------+</span><br><span class="line">1 row in set (0.15 sec)</span><br><span class="line"></span><br><span class="line">mysql> show binary logs;</span><br><span class="line">+------------------+-----------+</span><br><span class="line">| Log_name | File_size |</span><br><span class="line">+------------------+-----------+</span><br><span class="line">| mysql-bin.000001 | 154 |</span><br><span class="line">+------------------+-----------+</span><br><span class="line">1 row in set (0.03 sec)</span><br><span class="line"></span><br><span class="line">mysql> delete from t_iost_2019_04; //开启binlog后删除数据库一张表的数据</span><br><span class="line">Query OK, 13244 rows affected (0.30 sec)</span><br><span class="line">mysql> show master status; //查看目前的binlog文件</span><br><span class="line">+------------------+----------+--------------+------------------+-------------------+</span><br><span class="line">| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |</span><br><span class="line">+------------------+----------+--------------+------------------+-------------------+</span><br><span class="line">| mysql-bin.000001 | 2006168 | dapp | | |</span><br><span class="line">+------------------+----------+--------------+------------------+-------------------+</span><br><span class="line">1 row in set (0.04 sec)</span><br><span class="line"></span><br><span class="line">首先我们安装binlog2sql:</span><br><span class="line"></span><br><span class="line">$ git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql</span><br><span class="line">$ pip install -r requirements.txt</span><br><span class="line">$ cd binlog2sql</span><br><span class="line">$ ls -lht</span><br><span class="line">total 64K</span><br><span class="line">drwxr-xr-x 2 root root 4.0K Aug 29 17:50 binlog2sql</span><br><span class="line">drwxr-xr-x 2 root root 4.0K Aug 29 17:50 example</span><br><span class="line">-rw-r--r-- 1 root root 35K Aug 29 17:50 LICENSE</span><br><span class="line">-rw-r--r-- 1 root root 9.3K Aug 29 17:50 README.md</span><br><span class="line">-rw-r--r-- 1 root root 54 Aug 29 17:50 requirements.txt</span><br><span class="line">drwxr-xr-x 2 root root 4.0K Aug 29 17:50 tests</span><br><span class="line">$ pip install -r requirements.txt</span><br><span class="line">$ python binlog2sql/binlog2sql.py -h 127.0.0.1 -P 3306 -u admin -p'admin' -dtest -tuser --start-file='mysql-bin.000001' --start-datetime='2019-08-26 00:00:00' --stop-datetime='2019-08-26 18:00:00' > /tmp/raw.sql ##大致范围查找</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">$ python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -tuser --start-file='mysql-bin.000054' --start-position=257427 --stop-position=504272 -B > /tmp/rollback.sql #找到要恢复sql的起始位置</span><br><span class="line"></span><br><span class="line">#命令解释: h 数据库ip p 数据库端口 u 账号 p 密码 d 目标库 t 表明 start-file binlog文件名 start-datetime 开始时间 stop-datetime 结束时间 > 输出到指定文件 start-position 开始位置 stop-position 结束位置 B生成回滚sql</span><br><span class="line"></span><br><span class="line">$ mysql -h 127.0.0.1 -P 3306 -u admin < /tmp/rollback.sql //执行回滚SQL数据的恢复</span><br><span class="line"></span><br><span class="line">mysql> select count(*) from t_iost_2019_04; #查询恢复结果</span><br><span class="line">+----------+</span><br><span class="line">| count(*) |</span><br><span class="line">+----------+</span><br><span class="line">| 13244 |</span><br><span class="line">+----------+</span><br><span class="line">1 row in set (0.17 sec)</span><br></pre></td></tr></table></figure><p><img src="https://raw.githubusercontent.com/zhangChaoWrecked/pictures/master/mysqlbinlog.png" alt="如图"></p>]]></content>
<summary type="html">
<h3 id="Mysql开启binlog"><a href="#Mysql开启binlog" class="headerlink" title="Mysql开启binlog"></a>Mysql开启binlog</h3><table>
<thead>
<tr>
<th>日志类型
</summary>
<category term="Mysql" scheme="http://yoursite.com/categories/Mysql/"/>
<category term="Mysql" scheme="http://yoursite.com/tags/Mysql/"/>
</entry>
<entry>
<title>Nginx 安装</title>
<link href="http://yoursite.com/2019/08/22/Nginx%E5%AE%89%E8%A3%85/"/>
<id>http://yoursite.com/2019/08/22/Nginx安装/</id>
<published>2019-08-22T07:11:08.000Z</published>
<updated>2019-10-31T09:57:01.658Z</updated>
<content type="html"><![CDATA[<p><a href="https://nginx.org/en/download.html" target="_blank" rel="noopener"> Nginx下载地址</a></p><h4 id="apt安装"><a href="#apt安装" class="headerlink" title="apt安装"></a>apt安装</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ apt-get install nginx</span><br></pre></td></tr></table></figure><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><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></pre></td><td class="code"><pre><span class="line">/usr/sbin/nginx : 主程序位置</span><br><span class="line"></span><br><span class="line">/etc/nginx:nginx文件配置</span><br><span class="line"></span><br><span class="line">/usr/share/nginx:存放静态文件</span><br><span class="line"></span><br><span class="line">/var/log/nginx:存放日志</span><br><span class="line"></span><br><span class="line">/etc/init.d/nginx start 启动Nginx</span><br><span class="line"></span><br><span class="line">/etc/init.d/nginx restart 重启Nginx </span><br><span class="line"></span><br><span class="line">service nginx status Nginx状态</span><br><span class="line"> </span><br><span class="line">service nginx restart 重启Nginx</span><br></pre></td></tr></table></figure><h4 id="源码安装"><a href="#源码安装" class="headerlink" title="源码安装"></a>源码安装</h4><h6 id="安装gcc-g-的依赖库"><a href="#安装gcc-g-的依赖库" class="headerlink" title="安装gcc g++的依赖库"></a>安装gcc g++的依赖库</h6><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ apt-get install build-essential</span><br><span class="line">$ apt-get install libtool</span><br></pre></td></tr></table></figure><h6 id="复制代码安装-pcre依赖库"><a href="#复制代码安装-pcre依赖库" class="headerlink" title="复制代码安装 pcre依赖库"></a>复制代码安装 pcre依赖库</h6><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ apt-get update</span><br><span class="line">$ apt-get install libpcre3 libpcre3-dev</span><br></pre></td></tr></table></figure><h6 id="zlib依赖库-ssl依赖库"><a href="#zlib依赖库-ssl依赖库" class="headerlink" title="zlib依赖库 ssl依赖库"></a>zlib依赖库 ssl依赖库</h6><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">$ apt-get install zlib1g-dev</span><br><span class="line"></span><br><span class="line">$ apt-get install openssl</span><br></pre></td></tr></table></figure><h6 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h6><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><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><br><span class="line">wget http://nginx.org/download/nginx-1.11.3.tar.gz</span><br><span class="line">#解压:</span><br><span class="line">tar -zxvf nginx-1.11.3.tar.gz</span><br><span class="line">#进入解压目录:</span><br><span class="line">cd nginx-1.11.3</span><br><span class="line">#配置:</span><br><span class="line">./configure --prefix=/usr/local/nginx </span><br><span class="line">#编辑nginx:</span><br><span class="line">make</span><br><span class="line">注意:这里可能会报错,提示“pcre.h No such file or directory”,具体详见:http://stackoverflow.com/questions/22555561/error-building-fatal-error-pcre-h-no-such-file-or-directory</span><br><span class="line">需要安装 libpcre3-dev,命令为:sudo apt-get install libpcre3-dev</span><br><span class="line">#安装nginx:</span><br><span class="line">sudo make install</span><br><span class="line">#启动nginx:</span><br><span class="line">sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf</span><br><span class="line">注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过 -h查看帮助命令。</span><br><span class="line"></span><br><span class="line">#查看nginx进程:</span><br><span class="line">ps -ef|grep nginx</span><br></pre></td></tr></table></figure><h5 id="基本命令"><a href="#基本命令" class="headerlink" title="基本命令"></a>基本命令</h5><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">$ ./sbin/nginx -s reload #重新加载配置</span><br><span class="line">$ ./sbin/nginx -s stop #停止Nginx</span><br><span class="line">$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #启动</span><br></pre></td></tr></table></figure><h5 id="安装Nginx脚本"><a href="#安装Nginx脚本" class="headerlink" title="安装Nginx脚本"></a>安装Nginx脚本</h5><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><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></pre></td><td class="code"><pre><span class="line">sudo apt-get install -y build-essential</span><br><span class="line">path=$(pwd)</span><br><span class="line">echo "Download nginx...."</span><br><span class="line"> wget http://nginx.org/download/nginx-1.14.2.tar.gz</span><br><span class="line"> tar -zxvf nginx-1.14.2.tar.gz</span><br><span class="line">echo "Download openssl"</span><br><span class="line"> wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz</span><br><span class="line"> tar -zxf openssl-1.0.2r.tar.gz</span><br><span class="line">echo "Download pcre"</span><br><span class="line"> wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz </span><br><span class="line"> tar -zxf pcre-8.42.tar.gz</span><br><span class="line"> cd pcre-8.42/</span><br><span class="line"> ./configure && make &&make install</span><br><span class="line"> cd ..</span><br><span class="line">echo "Download zlib"</span><br><span class="line"> wget http://zlib.net/zlib-1.2.11.tar.gz</span><br><span class="line"> tar -zxf zlib-1.2.11.tar.gz</span><br><span class="line"> cd zlib-1.2.11/</span><br><span class="line"> ./configure && make && make install</span><br><span class="line"> cd ..</span><br><span class="line">echo "编译 nginx..."</span><br><span class="line">cd nginx-1.14.2/ && ./configure --prefix=$path/nginx --with-pcre=$path/pcre-8.42/ --with-zlib=$path/zlib-1.2.11/ --with-http_ssl_module --with-openssl=$path/openssl-1.0.2r/ --with-stream --with-stream_ssl_module --with-http_v2_module --with-threads && make && make install</span><br></pre></td></tr></table></figure><h4 id="配置文件详解"><a href="#配置文件详解" class="headerlink" title="配置文件详解"></a>配置文件详解</h4><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><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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br></pre></td><td class="code"><pre><span class="line">... #全局块</span><br><span class="line">events{ #events 块</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line">http{ #http 块</span><br><span class="line"> ... #http 全局块</span><br><span class="line"> server{ #server 块</span><br><span class="line"> ... #server 全局块</span><br><span class="line"> location [PATTERN]{ #location 块</span><br><span class="line"> ...</span><br><span class="line"> }</span><br><span class="line"> location [PATTERN]{ #location 块</span><br><span class="line"> ...</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> server{ #server 块</span><br><span class="line"> ...</span><br><span class="line"> }</span><br><span class="line"> ... #http 全局块</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> 1.全局块</span><br><span class="line"> 全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。</span><br><span class="line"> 通常包括配置运行Nginx 服务器的用户(组)、允许生成的worker process数、Nginx 进程 PID存放路径、日志的存放路径和类型以及配置文件引入等。</span><br><span class="line"> 2.events 块</span><br><span class="line"> events 块涉及的指令主要影响Nginx 服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个 worker process可以同时支持的最大连接数等。</span><br><span class="line"> 这一部分指令对 Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。</span><br><span class="line"> 3.http 块</span><br><span class="line"> http块是Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块。可以在 http全局块中配置的指令包括文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接q 请求数上限等。</span><br><span class="line"> 4.server 块</span><br><span class="line"> server 块和“虚拟主机”的概念有密切联系。在 server 全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或 IP 配置。</span><br><span class="line"> 5.location 块</span><br><span class="line"> location 块的主要作用是,基于Nginx服务器接受到的q 请求字符串,对除虚拟主机名称之外的字符串j 进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#普通配置</span><br><span class="line">#==性能配置</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#运行用户</span><br><span class="line">user nobody;</span><br><span class="line">#pid文件</span><br><span class="line">pid logs/nginx.pid;</span><br><span class="line"></span><br><span class="line">#Nginx基于事件的非阻塞多路复用模型(epoll或kquene)</span><br><span class="line">#一个进程在短时间内可以响应大量请求,工作进程设置与cpu数相同,避免cpu在多个进程间切换增加开销</span><br><span class="line">#==worker进程数,通常设置<=CPU数量,auto为自动检测,一般设置最大8个即可,再大性能提升较小或不稳定</span><br><span class="line">worker_processes auto;</span><br><span class="line"></span><br><span class="line">#==将每个进程绑定到特定cpu上,避免进程在cpu间切换的开销</span><br><span class="line">worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;</span><br><span class="line"></span><br><span class="line">#==worker进程打开最大文件数,可CPU*10000设置,或设置系统最大数量655350</span><br><span class="line">worker_rlimit_nofile 102400;</span><br><span class="line">#全局错误日志</span><br><span class="line">error_log logs/error.log;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#events模块中包含nginx中所有处理连接的设置,并发响应能力的关键配置</span><br><span class="line">events {</span><br><span class="line"> #==每个进程同时打开的最大连接数(最大并发数)</span><br><span class="line"> worker_connections 102400;</span><br><span class="line"> </span><br><span class="line"> #==告诉nginx收到一个新链接通知后接受尽可能多的链接</span><br><span class="line"> #multi_accept on;</span><br><span class="line"> </span><br><span class="line"> #一般http 1.1协议下,浏览器默认使用两个并发链接</span><br><span class="line"> #如果是反向代理,nginx需要和客户端保持连接,还需要和后端服务器保持连接</span><br><span class="line"> #Http服务器时,设置max_client=worker_processes*worker_connections/2</span><br><span class="line"> #反向代理时,设置max_client=worker_processes*worker_connections/4 </span><br><span class="line"> #==最大可用客户端数</span><br><span class="line"> #max_client </span><br><span class="line"> </span><br><span class="line"> #==使用非阻塞模型,设置复用客户端线程的轮训方法</span><br><span class="line"> use epoll;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#http模块控制着nginx http处理的所有核心特性</span><br><span class="line">http {</span><br><span class="line"> #打开或关闭错误页面中的nginx版本号等信息</span><br><span class="line"> server_tokens on;</span><br><span class="line"> #!server_tag on;</span><br><span class="line"> #!server_info on;</span><br><span class="line"> #==优化磁盘IO设置,指定nginx是否调用sendfile函数来输出文件,普通应用设为on,下载等磁盘IO高的应用,可设为off</span><br><span class="line"> sendfile on;</span><br><span class="line"> </span><br><span class="line"> #缓存发送请求,启用如下两个配置,会在数据包达到一定大小后再发送数据</span><br><span class="line"> #这样会减少网络通信次数,降低阻塞概率,但也会影响响应的及时性</span><br><span class="line"> #比较适合于文件下载这类的大数据包通信场景</span><br><span class="line"> #tcp_nopush on;</span><br><span class="line"> #tcp_nodelay on;</span><br><span class="line"></span><br><span class="line"> #==设置nginx是否存储访问日志,关闭这个可以让读取磁盘IO操作更快</span><br><span class="line"> access_log on;</span><br><span class="line"> #设置nginx只记录严重错误,可减少IO压力</span><br><span class="line"> #error_log logs/error.log crit;</span><br><span class="line"></span><br><span class="line"> #Http1.1支持长连接</span><br><span class="line"> #降低每个链接的alive时间可在一定程度上提高响应连接数量</span><br><span class="line"> #==给客户端分配keep-alive链接超时时间</span><br><span class="line"> keepalive_timeout 30;</span><br><span class="line"></span><br><span class="line"> #设置用户保存各种key的共享内存的参数,5m指的是5兆</span><br><span class="line"> limit_conn_zone $binary_remote_addr zone=addr:5m;</span><br><span class="line"> #为给定的key设置最大的连接数,这里的key是addr,设定的值是100,就是说允许每一个IP地址最多同时打开100个连接</span><br><span class="line"> limit_conn addr 100;</span><br><span class="line"></span><br><span class="line"> #include指在当前文件中包含另一个文件内容</span><br><span class="line"> include mime.types;</span><br><span class="line"> #设置文件使用默认的mine-type</span><br><span class="line"> default_type text/html;</span><br><span class="line"> #设置默认字符集</span><br><span class="line"> charset UTF-8;</span><br><span class="line"></span><br><span class="line"> #==设置nginx采用gzip压缩的形式发送数据,减少发送数据量,但会增加请求处理时间及CPU处理时间,需要权衡</span><br><span class="line"> gzip on;</span><br><span class="line"> #==加vary给代理服务器使用,针对有的浏览器支持压缩,有个不支持,根据客户端的HTTP头来判断是否需要压缩</span><br><span class="line"> gzip_vary on;</span><br><span class="line"> #nginx在压缩资源之前,先查找是否有预先gzip处理过的资源</span><br><span class="line"> #!gzip_static on;</span><br><span class="line"> #为指定的客户端禁用gzip功能</span><br><span class="line"> gzip_disable "MSIE[1-6]\.";</span><br><span class="line"> #允许或禁止压缩基于请求和相应的响应流,any代表压缩所有请求</span><br><span class="line"> gzip_proxied any;</span><br><span class="line"> #==启用压缩的最少字节数,如果请求小于1024字节则不压缩,压缩过程会消耗系统资源</span><br><span class="line"> gzip_min_length 1024;</span><br><span class="line"> #==数据压缩等级,1-9之间,9最慢压缩比最大,压缩比越大对系统性能要求越高</span><br><span class="line"> gzip_comp_level 2;</span><br><span class="line"> #需要压缩的数据格式</span><br><span class="line"> gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; </span><br><span class="line"></span><br><span class="line"> #静态文件缓存</span><br><span class="line"> #==开启缓存的同时也指定了缓存文件的最大数量,20s如果文件没有被请求则删除缓存</span><br><span class="line"> open_file_cache max=100000 inactive=20s;</span><br><span class="line"> #==多长时间检查一次缓存的有效期</span><br><span class="line"> open_file_cache_valid 30s;</span><br><span class="line"> #==有效期内缓存文件最小的访问次数,只有访问超过2次的才会被缓存</span><br><span class="line"> open_file_cache_min_uses 2;</span><br><span class="line"> #当搜索一个文件时是否缓存错误信息</span><br><span class="line"> open_file_cache_errors on;</span><br><span class="line"></span><br><span class="line"> #==允许客户端请求的最大单文件字节数</span><br><span class="line"> client_max_body_size 4m;</span><br><span class="line"> #==客户端请求头缓冲区大小</span><br><span class="line"> client_header_buffer_size 4k;</span><br><span class="line"></span><br><span class="line"> #是否启用对发送给客户端的URL进行修改</span><br><span class="line"> proxy_redirect off;</span><br><span class="line"> #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP</span><br><span class="line"> proxy_set_header Host $host;</span><br><span class="line"> proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line"> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line"> #==nginx跟后端服务器连接超时时间(代理连接超时)</span><br><span class="line"> proxy_connect_timeout 60;</span><br><span class="line"> #==连接成功后,后端服务器响应时间(代理接收超时)</span><br><span class="line"> proxy_read_timeout 120;</span><br><span class="line"> #==后端服务器数据回传时间(代理发送超时)</span><br><span class="line"> proxy_send_timeout 20;</span><br><span class="line"> #==设置代理服务器(nginx)保存用户头信息的缓冲区大小</span><br><span class="line"> proxy_buffer_size 32k;</span><br><span class="line"> #==proxy_buffers缓冲区,网页平均在32k以下的设置</span><br><span class="line"> proxy_buffers 4 128k;</span><br><span class="line"> #==高负荷下缓冲大小(proxy_buffers*2)</span><br><span class="line"> proxy_busy_buffers_size 256k;</span><br><span class="line"> #==设定缓存文件夹大小,大于这个值,将从upstream服务器传</span><br><span class="line"> proxy_temp_file_write_size 256k;</span><br><span class="line"> #==1G内存缓冲空间,3天不用删除,最大磁盘缓冲空间2G</span><br><span class="line"> proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> #设定负载均衡服务器列表</span><br><span class="line"> upstream nginx.test.com{</span><br><span class="line"> #后端服务器访问规则</span><br><span class="line"> #ip_hash;</span><br><span class="line"> #weight参数表示权重值,权值越高被分配到的几率越大</span><br><span class="line"> #server 10.11.12.116:80 weight=5;</span><br><span class="line"> #PC_Local</span><br><span class="line"> server 10.11.12.116:80;</span><br><span class="line"> #PC_Server</span><br><span class="line"> server 10.11.12.112:80;</span><br><span class="line"> #Notebook</span><br><span class="line"> #server 10.11.12.106:80;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> #server代表虚拟主机,可以理解为站点(挂载多个站点,只需要配置多个server及upstream节点即可)</span><br><span class="line"> server {</span><br><span class="line"> #监听80端口</span><br><span class="line"> listen 80;</span><br><span class="line"> #识别的域名,定义使用nginx.test.com访问</span><br><span class="line"> server_name nginx.test.com;</span><br><span class="line"> #设定本虚拟主机的访问日志</span><br><span class="line"> access_log logs/nginx.test.com.access.log;</span><br><span class="line"> </span><br><span class="line"> #一个域名下匹配多个URI的访问,使用location进行区分,后面紧跟着的/代表匹配规则</span><br><span class="line"> #如动态资源访问和静态资源访问会分别指向不同的位置的应用场景</span><br><span class="line"> #</span><br><span class="line"> # 基本语法规则:location [=|~|~*|^~] /uri/ {...} </span><br><span class="line"> # = 开头表示精确匹配</span><br><span class="line"> # ^~ 开头表示uri以某个常规字符串开头,匹配成功后不再进行正则匹配</span><br><span class="line"> # ~ 开头表示区分大小写的正则匹配</span><br><span class="line"> # ~* 开头表示不区分大小写的正则匹配</span><br><span class="line"> # !~ 开头表示区分大小写的不匹配的正则</span><br><span class="line"> # !~* 开头表示不区分大小写的不匹配的正则</span><br><span class="line"> # / 通用匹配,任何请求都会被匹配到</span><br><span class="line"> #</span><br><span class="line"> # 理解如下:</span><br><span class="line"> # 有两种匹配模式:普通字符串匹配,正则匹配</span><br><span class="line"> # 无开头引导字符或以=开头表示普通字符串匹配</span><br><span class="line"> # 以~或~*开头表示正则匹配,~*表示不区分大小写</span><br><span class="line"> # 【多个location时,先匹配普通字符串location,再匹配正则location】</span><br><span class="line"> # 只识别URI部分,例如请求为“/test/1/abc.do?arg=xxx”</span><br><span class="line"> # (1)先查找是否有=开头的精确匹配,即“location=/test/1/abc.do {...}”</span><br><span class="line"> # (2)再查找普通匹配,以“最大前缀”为规则,如有以下两个location</span><br><span class="line"> # location /test/ {...}</span><br><span class="line"> # location /test/1/ {...}</span><br><span class="line"> # 则匹配后一项</span><br><span class="line"> # (3)匹配到一个普通location后,搜索并未结束,而是暂存当前结果,并继续进行正则搜索</span><br><span class="line"> # (4)在所有正则location中找到第一个匹配项后,以此匹配项为最终结果</span><br><span class="line"> # 【所以正则匹配项,匹配规则受定义前后顺序影响,但普通匹配不会】</span><br><span class="line"> # (5)如果未找到正则匹配项,则以(3)中缓存的结果为最终结果</span><br><span class="line"> # (6)如果一个匹配都没有,则返回404</span><br><span class="line"> # location =/ {...}与location / {...}的差别</span><br><span class="line"> # 前一个是精确匹配,只响应“/”的请求,所有“/xxx”形式的请求不会以“前缀匹配形式”匹配到它</span><br><span class="line"> # 后一个正相反,所有请求必然都是以“/”开头,所以没有其他匹配结果时一定会执行到它</span><br><span class="line"> # location ^~ / {...} ^~的意思是禁止正则匹配,表示匹配到此项后不再进行后续的正则搜索</span><br><span class="line"> # 相当于普通匹配模式匹配成功后就以此结果为最终结果,停止进行后续的正则匹配</span><br><span class="line"> location / {</span><br><span class="line"> #定义服务器的默认网站根目录位置,可以写相对路径,也可以写绝对路径</span><br><span class="line"> root html;</span><br><span class="line"> #定义首页索引文件的名称</span><br><span class="line"> index index.html index.htm;</span><br><span class="line"> #定义转发后端负载服务器组</span><br><span class="line"> proxy_pass http://nginx.test.com;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> #定义错误提示页面</span><br><span class="line"> error_page 500 502 503 504 /50x.html;</span><br><span class="line"> location = /50x.html {</span><br><span class="line"> root html;</span><br><span class="line"> }</span><br><span class="line"> #静态文件,nginx自己处理</span><br><span class="line"> location ~ ^/(images|javascript|js|css|flash|media|static)/{</span><br><span class="line"> root /var/www/virtual/htdocs;</span><br><span class="line"> #过期时间1天</span><br><span class="line"> expires 1d;</span><br><span class="line"> #关闭媒体文件日志</span><br><span class="line"> access_log off;</span><br><span class="line"> log_not_found off;</span><br><span class="line"> }</span><br><span class="line"> #设定查看Nginx状态的地址</span><br><span class="line"> location /NginxStatus {</span><br><span class="line"> #!stub_status on; #无此关键字</span><br><span class="line"> access_log off;</span><br><span class="line"> auth_basic "NginxStatus";</span><br><span class="line"> auth_basic_user_file conf/htpasswd;</span><br><span class="line"> }</span><br><span class="line"> #禁止访问的文件.htxxx</span><br><span class="line"> location ~ /\.ht {</span><br><span class="line"> #deny all;禁止访问,返回403</span><br><span class="line"> deny all;</span><br><span class="line"> #allow all;允许访问</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> #网站较多的情况下ngxin又不会请求瓶颈可以考虑挂多个站点,并把虚拟主机配置单独放在一个文件内,引入进来</span><br><span class="line"> #include website.conf;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://nginx.org/en/download.html" target="_blank" rel="noopener"> Nginx下载地址</a></p>
<h4 id="apt安装"><a href="#apt安装" class="hea
</summary>
<category term="Nginx" scheme="http://yoursite.com/categories/Nginx/"/>
<category term="Nginx" scheme="http://yoursite.com/tags/Nginx/"/>
</entry>
</feed>