-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcreate-sniper-docker-image.html
1529 lines (953 loc) · 65.6 KB
/
create-sniper-docker-image.html
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
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html class="theme-next mist use-motion" lang="zh-Hans">
<head><meta name="generator" content="Hexo 3.8.0">
<meta name="google-site-verification" content="zu-9nWphPjrzXV8v514mkHknIz4dNfHlib56-KNAu44">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="theme-color" content="#222">
<script src="/lib/pace/pace.min.js?v=1.0.2"></script>
<link href="/lib/pace/pace-theme-flash.min.css?v=1.0.2" rel="stylesheet">
<meta http-equiv="Cache-Control" content="no-transform">
<meta http-equiv="Cache-Control" content="no-siteapp">
<script>
(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/356f1943.js","daovoice")
daovoice('init', {
app_id: "356f1943"
});
daovoice('update');
</script>
<link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css">
<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css">
<link href="/css/main.css?v=5.1.4" rel="stylesheet" type="text/css">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png?v=5.1.4">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32png?v=5.1.4">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png?v=5.1.4">
<link rel="mask-icon" href="/images/logo.svg?v=5.1.4" color="#222">
<meta name="keywords" content="docker,mxnet,sniper,">
<link rel="alternate" href="/atom.xml" title="Keavnn'Blog" type="application/atom+xml">
<script>
(function(){
if(''){
if (prompt('请输入文章密码','') !== ''){
alert('密码错误!');
history.back();
}
}
})();
</script>
<meta name="description" content="本文记录了如何在学校机器学习平台上创建一个基于Mxnet的Sniper镜像。">
<meta name="keywords" content="docker,mxnet,sniper">
<meta property="og:type" content="article">
<meta property="og:title" content="Build一个基于Mxnet的Sniper镜像">
<meta property="og:url" content="http://StepNeverStop.github.io/create-sniper-docker-image.html">
<meta property="og:site_name" content="Keavnn'Blog">
<meta property="og:description" content="本文记录了如何在学校机器学习平台上创建一个基于Mxnet的Sniper镜像。">
<meta property="og:locale" content="zh-Hans">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_08-30-41.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_09-42-07.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_09-56-41.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_10-03-30.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_10-11-01.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_10-56-08.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_10-57-56.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_13-49-28.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_16-24-49.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_16-40-53.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_16-29-58.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_16-44-22.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_17-05-30.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_17-12-36.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_17-39-07.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_18-08-49.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_18-11-49.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_18-14-21.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_18-20-07.png">
<meta property="og:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_18-31-16.png">
<meta property="og:updated_time" content="2019-05-13T14:27:05.707Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Build一个基于Mxnet的Sniper镜像">
<meta name="twitter:description" content="本文记录了如何在学校机器学习平台上创建一个基于Mxnet的Sniper镜像。">
<meta name="twitter:image" content="http://stepneverstop.github.io/create-sniper-docker-image/Snipaste_2019-01-03_08-30-41.png">
<script type="text/javascript" id="hexo.configurations">
var NexT = window.NexT || {};
var CONFIG = {
root: '/',
scheme: 'Mist',
version: '5.1.4',
sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":true,"onmobile":true},
fancybox: true,
tabs: true,
motion: {"enable":true,"async":true,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
duoshuo: {
userId: '0',
author: '博主'
},
algolia: {
applicationID: '',
apiKey: '',
indexName: '',
hits: {"per_page":10},
labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
}
};
</script>
<link rel="canonical" href="http://StepNeverStop.github.io/create-sniper-docker-image.html">
<title>Build一个基于Mxnet的Sniper镜像 | Keavnn'Blog</title>
</head>
<body itemscope="" itemtype="http://schema.org/WebPage" lang="zh-Hans">
<div class="container sidebar-position-left page-post-detail">
<div class="headband"></div>
<a href="https://github.com/StepNeverStop" class="github-corner" aria-label="View source on GitHub" rel="external nofollow" target="_blank"><svg width="80" height="80" viewbox="0 0 250 250" style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
<header id="header" class="header" itemscope="" itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-wrapper">
<div class="site-meta ">
<div class="custom-logo-site-title">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">Keavnn'Blog</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<h1 class="site-subtitle" itemprop="description">If it is to be, it is up to me.</h1>
</div>
<div class="site-nav-toggle">
<button>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</button>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section">
<i class="menu-item-icon fa fa-fw fa-home"></i> <br>
首页
</a>
</li>
<li class="menu-item menu-item-about">
<a href="/about/" rel="section">
<i class="menu-item-icon fa fa-fw fa-user"></i> <br>
关于
</a>
</li>
<li class="menu-item menu-item-tags">
<a href="/tags/" rel="section">
<i class="menu-item-icon fa fa-fw fa-tags"></i> <br>
标签
</a>
</li>
<li class="menu-item menu-item-categories">
<a href="/categories/" rel="section">
<i class="menu-item-icon fa fa-fw fa-th"></i> <br>
分类
</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section">
<i class="menu-item-icon fa fa-fw fa-archive"></i> <br>
归档
</a>
</li>
<li class="menu-item menu-item-search">
<a href="javascript:;" class="popup-trigger">
<i class="menu-item-icon fa fa-search fa-fw"></i> <br>
搜索
</a>
</li>
</ul>
<div class="site-search">
<div class="popup search-popup local-search-popup">
<div class="local-search-header clearfix">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<span class="popup-btn-close">
<i class="fa fa-times-circle"></i>
</span>
<div class="local-search-input-wrapper">
<input autocomplete="off" placeholder="搜索..." spellcheck="false" type="text" id="local-search-input">
</div>
</div>
<div id="local-search-result"></div>
</div>
</div>
</nav>
</div>
</header>
<main id="main" class="main">
<div class="main-inner">
<div class="content-wrap">
<div id="content" class="content">
<div id="posts" class="posts-expand">
<article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://StepNeverStop.github.io/create-sniper-docker-image.html">
<span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
<meta itemprop="name" content="Keavnn">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/Kicon.jpg">
</span>
<span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Keavnn'Blog">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">Build一个基于Mxnet的Sniper镜像</h2>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2019-01-02T21:58:44+08:00">
2019-01-02
</time>
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-calendar-check-o"></i>
</span>
<span class="post-meta-item-text">更新于:</span>
<time title="更新于" itemprop="dateModified" datetime="2019-05-13T22:27:05+08:00">
2019-05-13
</time>
</span>
<span class="post-category">
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope="" itemtype="http://schema.org/Thing">
<a href="/categories/Docker/" itemprop="url" rel="index">
<span itemprop="name">Docker</span>
</a>
</span>
</span>
<div class="post-wordcount">
<span class="post-meta-item-icon">
<i class="fa fa-file-word-o"></i>
</span>
<span class="post-meta-item-text">字数统计:</span>
<span title="字数统计">
2.9k
</span>
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-clock-o"></i>
</span>
<span class="post-meta-item-text">阅读时长 ≈</span>
<span title="阅读时长">
12
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>本文记录了如何在学校机器学习平台上创建一个基于Mxnet的Sniper镜像。</p>
<a id="more"></a>
<h1 id="说明"><a href="#说明" class="headerlink" title="说明"></a>说明</h1><p>由于此镜像是用于学校机器学习平台,所以文中会出现FTP服务器等字眼,其实是在平台上使用镜像创建一个容器时,平台会<strong>自动</strong>将服务器上我所申请的文件存储区<code>mount</code>到创建的容器,我通过<code>FileZilla</code>FTP工具与在平台申请的文件存储区进行连接<br><br>本文教程虽然有了一个FTP过程,但是如果是生成本地镜像,不考虑FTP,无视文中相关部分即可</p>
<p><strong>虽然本文中写了关于压缩的相关内容,但是最终并没有使用压缩,原因是由于压缩后出现未知问题,导致在平台上创建的容器不能使用宿主机的NVIDIA驱动,并不能成功运行Demo</strong></p>
<h1 id="环境"><a href="#环境" class="headerlink" title="环境"></a>环境</h1><p>本机环境</p>
<ul>
<li>windows 10 专业版</li>
<li>docker client version 18.09.0</li>
<li>docker server version 18.09.0</li>
<li>FTP工具 FileZilla</li>
</ul>
<p>平台环境</p>
<ul>
<li>docker version 17.06.2-ce</li>
</ul>
<p>镜像环境</p>
<ul>
<li>python 2.7.12</li>
<li>CUDA version 9.0.176</li>
<li>pip 9.0.3</li>
</ul>
<p><a href="https://github.com/mahyarnajibi/SNIPER" rel="external nofollow" target="_blank">SNIPER</a><br><a href="http://10.0.4.228" rel="external nofollow" target="_blank">机器学习平台</a>,这是学校资源</p>
<h1 id="一-配置基础镜像"><a href="#一-配置基础镜像" class="headerlink" title="一 配置基础镜像"></a>一 配置基础镜像</h1><p>从学校机器学习平台上拉取原始镜像,因为这个镜像配好了一些基本的环境,如python2.x,CUDA9.0等等,所以直接使用它们的镜像作为基础镜像比较省心省力<br><code>docker pull hub.hoc.ccshu.net/ces/deepo:all-py27-jupyter-ssh</code></p>
<p>拉取到镜像之后,可以选择使用<code>Dockerfile</code>来生成我们需要的镜像,但是往往我们需要在镜像中添加许多库/包/插件,而且使用<code>Dockerfile</code>来生成镜像很容易出BUG.当然,最好的方式是使用<code>Dockerfile</code>,前提是你能确保<code>Dockerfile</code>文件中的每一行命令都不会出错.<br>在当前情况下,我选择使用从容器生成镜像的方法,这种方式会使得最终生成的镜像占内存巨大,但是可以在容器内部调试每一步配置过程.<br>使用<code>docker run -itd --name [name] hub.hoc.ccshu.net/ces/deepo:all-py27-jupyter-ssh</code>开启一个容器</p>
<p>使用<code>docker ps -a</code>查看正在运行的容器<code>ID</code></p>
<p>使用<code>docker exec -it [name] /bin/bash</code>进入容器</p>
<p>在容器中使用<code>cat /etc/issue</code>命令查看容器的操作系统版本</p>
<p>结果输出: <code>Ubuntu 16.04.4 LTS \n \l</code></p>
<h2 id="安装-apt-file"><a href="#安装-apt-file" class="headerlink" title="安装 apt-file"></a>安装 apt-file</h2><p>安装<code>apt-file</code></p>
<p><code>apt-get install apt-file -y</code></p>
<p>出现错误:</p>
<p><img src="./create-sniper-docker-image/Snipaste_2019-01-03_08-30-41.png" alt=""></p>
<p>使用<code>apt-get install apt-file -y --fix-missing</code>同样不能解决问题</p>
<p>考虑<strong>换源</strong></p>
<p><code>cp /etc/apt/sources.list /etc/apt/sources.list.bak</code>备份系统原有的源</p>
<p>安装Linux下的文本编辑器<code>nano</code>,执行命令<code>apt-get install nano -y</code><br>安装<code>nano</code>成功后,执行<code>nano /etc/apt/sources.list</code>修改源文件<br>在打开的文件中,将内容替换为<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><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"># deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted</span><br><span class="line">deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial universe</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties</span><br><span class="line">deb http://archive.canonical.com/ubuntu xenial partner</span><br><span class="line">deb-src http://archive.canonical.com/ubuntu xenial partner</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse</span><br></pre></td></tr></table></figure></p>
<p>这里使用的源是阿里的镜像站,也可以使用网易163的,源如下:<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><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse</span><br><span class="line">deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse</span><br><span class="line">deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse</span><br><span class="line">deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse</span><br><span class="line">deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse</span><br></pre></td></tr></table></figure></p>
<p>更改好源文件后,执行<code>sudo apt-get update</code>更新源</p>
<p>再次执行<code>apt-get install apt-file -y</code>,可以成功安装<code>apt-file</code>包</p>
<p>之后执行<code>apt-file update</code>更新apt-file cache<br>使用<code>apt-file find [name]</code>可以查找计算机上文件的位置,很方便<br>使用<code>apt-file search [name]</code>可以搜索缺少的库,解决文件缺失依赖<br>选择好自己需要的包,然后使用<code>apt-get install [name]</code>即可</p>
<ul>
<li>如果需要把镜像上传到云上使用,有可能需要网络服务,</li>
<li>执行<code>apt-get install net-tools</code>安装ifconfig</li>
<li>执行<code>apt-get install iputils-ping</code>安装ping</li>
</ul>
<p>此时为了避免诸如使用<code>ping [IP]</code>有效,但是<code>ping [HOST]</code>无效的情况,需要使用<code>nano /etc/resolv.conf</code>修改配置文件<br>将<code>namespace</code>后的IP地址更改为<code>8.8.8.8</code>或者<code>4.4.4.4</code><br><em>或者使用<code>echo "nameserver 114.114.114.114 > /etc/resolv.conf"</code>也可以</em><br>退出保存即可</p>
<p><em>有可能上述修改DNS的方式并不成功,原因是在云上运行容器时,配置文件自动修改,如果发生这种情况,请每次在新开一个容器时,手动修改配置文件的DNS服务器,使其可以使用网络服务</em></p>
<h1 id="二-安装编译依赖各种包"><a href="#二-安装编译依赖各种包" class="headerlink" title="二 安装编译依赖各种包"></a>二 安装编译依赖各种包</h1><p>在电脑上空闲的地方,从Github拉取Sniper项目</p>
<p><code>git clone --recursive https://github.com/mahyarnajibi/SNIPER.git</code></p>
<ul>
<li><p>因为我是在学校机器学习平台上运行docker容器,所以选择直接将clone下的文件上传至容器<code>mount</code>的ftp服务器,使用的软件是<code>FileZilla</code></p>
</li>
<li><p>上传成功后可以在容器内通过<code>cd /data/[file or folder name]</code>进行访问</p>
</li>
</ul>
<p>如果要在本地镜像内操作的话,也可以直接把本机文件或文件夹拷贝过去<br><code>docker cp 本地文件路径 ID全称:容器路径</code></p>
<hr>
<p><code>cd /data/SNIPER/SNIPER-mxnet</code><br><code>make USE_CUDA_PATH=/usr/local/cuda-9.0</code><br>输出信息:<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_09-42-07.png" alt=""></p>
<h2 id="安装-jemalloc"><a href="#安装-jemalloc" class="headerlink" title="安装 jemalloc"></a>安装 jemalloc</h2><p>选择安装<code>jemalloc</code>,这个工具可以加速编译,碎片整理,具体请自行谷歌</p>
<ul>
<li><code>apt-get install autoconf</code></li>
<li><code>apt-get install automake</code></li>
<li><code>apt-get install libtool</code></li>
<li><code>git clone https://github.com/jemalloc/jemalloc.git</code></li>
<li><code>cd jemalloc</code></li>
<li><code>git checkout 4.5.0</code>安装4.5.0版本的jemalloc,5.x版本的有坑,深坑</li>
<li><code>./autogen.sh</code></li>
<li><code>make</code></li>
<li><code>make install_bin install_include install_lib</code>,之所以不使用<code>make install</code>是因为会报错,如下: <img src="./create-sniper-docker-image/Snipaste_2019-01-03_09-56-41.png" alt=""></li>
</ul>
<p>切换至<code>SNIPER-mxnet</code>文件夹,再次<code>make USE_CUDA_PATH=/usr/local/cuda-9.0</code><br>虽然可以编译,但是有以下信息:<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_10-03-30.png" alt=""><br>强迫症必须搞定它,果断<code>ctrl+c</code>终止编译</p>
<h2 id="安装-pkg-config"><a href="#安装-pkg-config" class="headerlink" title="安装 pkg-config"></a>安装 pkg-config</h2><ul>
<li>打开<a href="https://pkg-config.freedesktop.org/releases/" rel="external nofollow" target="_blank">https://pkg-config.freedesktop.org/releases/</a></li>
<li>下载最新的,现在看到的是<code>pkg-config-0.29.2.tar.gz</code></li>
<li>下载好之后,通过<code>FileZilla</code>等工具传输到FTP服务器</li>
<li>在容器内<code>cd</code>到压缩包位置</li>
<li><code>tar -xf pkg-config-0.29.2.tar.gz</code></li>
<li><code>cd pkg-config-0.29.2</code></li>
<li><code>./configure --with-internal-glib</code>,注意,中间是一个空格,非常关键</li>
<li><code>make && make install</code><br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_10-11-01.png" alt=""></li>
</ul>
<p>再次<code>make USE_CUDA_PATH=/usr/local/cuda-9.0</code><br>算了,还是安装一下cudnn吧</p>
<h2 id="安装-cudnn7-0"><a href="#安装-cudnn7-0" class="headerlink" title="安装 cudnn7.0"></a>安装 cudnn7.0</h2><ul>
<li><a href="https://developer.nvidia.com/rdp/cudnn-archive" rel="external nofollow" target="_blank">https://developer.nvidia.com/rdp/cudnn-archive</a> 下载cuDNN Libraries for Linux,不要下载 Power 8</li>
<li>把下载好的包上传到FTP服务器</li>
<li><code>cd</code>到包位置</li>
<li><code>cp cudnn-9.0-linux-x64-v7.solitairetheme8 cudnn-9.0-linux-x64-v7.tgz</code></li>
<li><code>tar -xvf cudnn-9.0-linux-x64-v7.tgz</code></li>
<li><code>cp include/* /usr/local/cuda-9.0/include</code></li>
<li><code>cp lib64/* /usr/local/cuda-9.0/lib64</code></li>
<li><code>chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*</code></li>
<li><code>export PATH=/usr/local/cuda-9.0/bin:$PATH</code></li>
<li><code>cd</code>到<code>/usr/local/cuda-9.0/lib64</code></li>
<li><code>nano ~/.bashrc</code>,关联环境变量</li>
<li>在最后一行加入<code>export LD_LIBRARY_PATH=/home/cuda/lib64:$LD_LIBRARY_PATH</code></li>
<li><code>source ~/.bashrc</code></li>
<li><code>ldconfig -v</code></li>
<li>使用<code>cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2</code> 查看cudnn版本<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_10-56-08.png" alt=""></li>
</ul>
<h2 id="安装-OpenCV"><a href="#安装-OpenCV" class="headerlink" title="安装 OpenCV"></a>安装 OpenCV</h2><ul>
<li>使用<code>pkg-config opencv --modversion</code>查看</li>
<li>发现已经有OpenCV<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_10-57-56.png" alt=""></li>
</ul>
<h2 id="安装-OpenBLAS"><a href="#安装-OpenBLAS" class="headerlink" title="安装 OpenBLAS"></a>安装 OpenBLAS</h2><ul>
<li><code>apt-get install libopenblas-dev</code></li>
</ul>
<h2 id="编译-Mxnet"><a href="#编译-Mxnet" class="headerlink" title="编译 Mxnet"></a>编译 Mxnet</h2><p><code>make USE_CUDA_PATH=/usr/local/cuda-9.0</code><br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_13-49-28.png" alt=""></p>
<p><strong>心好累,总共make了将近两个半小时</strong></p>
<p>编译<code>c++</code>文件<code>bash scripts/compile.sh</code><br>这一步一定要在<code>/SNIPER/</code>文件夹下,不然贼坑,绝对不要<code>cd</code>到<code>/SNIPER/scripts</code>文件夹下再<code>bash compile.sh</code>,因为代码内有<code>cd lib/nms</code>等,如果不在<code>/SNIPER</code>文件夹下,会找不到文件</p>
<p>如果出现<code>syntax error near unexpected token</code>$’\r’’<code>错误,可以使用</code>sed<code>命令将</code>\r<code>去掉,或者是在[Github](https://github.com/mahyarnajibi/SNIPER/blob/master/scripts/compile.sh)上将代码复制,使用</code>nano<code>编辑然后粘贴

可以使用</code>cat -v [filename]<code>查看
![]./create-sniper-docker-image/Snipaste_2019-01-03_16-33-27.png)
以</code>^M<code>结尾的代表你所处理的文件换行符是dos格式的</code>“\r\n”`</p>
<p>我选择第二种笨方法,因为涉及的代码并不多</p>
<p>执行结果:<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_16-24-49.png" alt=""></p>
<h2 id="安装-dos2unix"><a href="#安装-dos2unix" class="headerlink" title="安装 dos2unix"></a>安装 dos2unix</h2><p>由于发现这种简单的复制粘贴方式并不能很好的解决,所以查了一些<a href="https://blog.csdn.net/lovelovelovelovelo/article/details/79239068" rel="external nofollow" target="_blank">相关资料</a><br>选择使用<code>dos2unix</code>来转换</p>
<ul>
<li><code>apt-get install dos2unix</code></li>
<li><code>dos2unix [filename]</code></li>
</ul>
<p><img src="./create-sniper-docker-image/Snipaste_2019-01-03_16-40-53.png" alt=""><br>问题解决啦</p>
<h2 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h2><p>在<code>/SNIPER/</code>文件夹下<code>pip install -r requirements.txt</code><br>一定要确保镜像内可以联网</p>
<p><img src="./create-sniper-docker-image/Snipaste_2019-01-03_16-29-58.png" alt=""></p>
<h2 id="测试Demo"><a href="#测试Demo" class="headerlink" title="测试Demo"></a>测试Demo</h2><ul>
<li><code>bash download_sniper_detector.sh</code>,download_sniper_detector.sh<br>文件在<code>/SNIPER/scripts</code>文件夹下<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_16-44-22.png" alt=""></li>
<li><code>cd .. && python demo.py</code><br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_17-05-30.png" alt=""></li>
</ul>
<p><strong>运行成功!!!</strong></p>
<h1 id="三-生成镜像"><a href="#三-生成镜像" class="headerlink" title="三 生成镜像"></a>三 生成镜像</h1><ul>
<li>使用<code>exit</code>退出容器</li>
<li>使用<code>docker ps -a</code>查看容器ID</li>
<li>使用<code>docker stop [ID]</code>停止容器</li>
<li>使用<code>docker commit -a "作者信息" -m "附带信息" [ID] [name]:[tag]</code>生成镜像,会返回一个<code>sha256</code>开头的长ID,这个就是生成的镜像ID</li>
<li>使用<code>docker images</code>查看生成的镜像</li>
<li>如果需要的话,使用<code>docker push [name]:[tag]</code>将刚刚生成的镜像推送到云上</li>
</ul>
<h1 id="四-压缩镜像"><a href="#四-压缩镜像" class="headerlink" title="四 压缩镜像"></a>四 压缩镜像</h1><p><strong>压缩镜像非常麻烦,但是也是有方法的,目前大概三种方法</strong></p>
<ol>
<li>使用<code>Dockerfile</code>生成镜像</li>
<li>这种方法需要让容器在运行状态,使用<code>docker export [ID] | docker import - [name]:[tag]</code>导出容器快照,并从快照生成镜像,这种方式可以大大压缩镜像,但是缺点是有可能会使得镜像中的环境变量、开放端口、默认进入命令改变或消失.使用这种方式时,最好在生成镜像之后,创建一个<code>Dockerfile</code>文件,<code>From</code>这个镜像,并添加端口和命令入口</li>
<li>使用<code>docker-squash</code>压缩镜像,这个方法适用于Linux和Mac系统</li>
</ol>
<p>目前可以运行的镜像是13.6G<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_17-12-36.png" alt=""><br><code>hub.hoc.ccshu.net/wjs/sniper:v1.1</code><br>现在要对它进行压缩</p>
<h2 id="第一步-移除镜像内的SNIPER文件夹-把其放到FTP服务器上去"><a href="#第一步-移除镜像内的SNIPER文件夹-把其放到FTP服务器上去" class="headerlink" title="第一步,移除镜像内的SNIPER文件夹,把其放到FTP服务器上去"></a>第一步,移除镜像内的SNIPER文件夹,把其放到FTP服务器上去</h2><ul>
<li>开启一个容器<code>docker run -itd --name [name] [id]</code></li>
<li>复制容器内文件到本地<code>docker cp [长ID]:[容器内路径] [本地路径]</code>,将放置在本地的文件夹上传至FTP服务器</li>
<li>进入容器<code>docker exec -it [name] /bin/bash</code></li>
<li>删除容器内文件夹<code>/SNIPER/</code>,使用<code>rm -rf SNIPER</code>,<strong>一定要小心使用</strong></li>
<li>退出容器<code>exit</code></li>
</ul>
<h2 id="第二步-压缩镜像"><a href="#第二步-压缩镜像" class="headerlink" title="第二步,压缩镜像"></a>第二步,压缩镜像</h2><p>压缩容器<br><code>docker export [ID] | docker import - [name]:[tag]</code></p>
<p>可以看到,镜像体积少了大约2个G<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_17-39-07.png" alt=""></p>
<p>由于使用这种方法会使得镜像丢失部分信息,所以,创建一个新的<code>Dockerfile</code>,在其中添加缺失的信息</p>
<h2 id="第三步-完善镜像"><a href="#第三步-完善镜像" class="headerlink" title="第三步,完善镜像"></a>第三步,完善镜像</h2><p>在任意位置新建<code>Dockerfile</code><br>输入<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">FROM [name]:[tag]</span><br><span class="line">EXPOSE 22</span><br><span class="line">ENTRYPOINT ["/usr/sbin/sshd","-D"]</span><br></pre></td></tr></table></figure></p>
<p><img src="./create-sniper-docker-image/Snipaste_2019-01-03_18-08-49.png" alt=""></p>
<p>然后<code>docker build -t [name]:[tag] .</code>,不要忘了最后的<code>.</code></p>
<h2 id="第四步-Push"><a href="#第四步-Push" class="headerlink" title="第四步 Push"></a>第四步 Push</h2><p><code>docker push [name]:[tag]</code></p>
<p>至此,所有配置以及完成<br>镜像在<code>hoc.hoc.ccshu.net</code>的私有仓库里<br>SNIPER文件夹放置在机器学习平台服务器<code>mount</code>的目录里</p>
<h1 id="五-测试"><a href="#五-测试" class="headerlink" title="五 测试"></a>五 测试</h1><ul>
<li><p>在平台上创建容器<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_18-11-49.png" alt=""></p>
</li>
<li><p>耐心等待创建完成<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_18-14-21.png" alt=""></p>
</li>
<li><p>创建成功<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_18-20-07.png" alt=""></p>
</li>
<li><p>测试结果<br><img src="./create-sniper-docker-image/Snipaste_2019-01-03_18-31-16.png" alt=""><br><strong>测试失败</strong></p>
</li>
</ul>
<p><strong>但是,使用未压缩的镜像测试成功</strong></p>
</div>
<div>
<div>
<div style="text-align:center;color: #ccc;font-size:14px;">-------------本文结束<i class="fa fa-heart"></i>感谢您的阅读-------------</div>
</div>
</div>
<div>
<div class="my_post_copyright">
<script src="//cdn.bootcss.com/clipboard.js/1.5.10/clipboard.min.js"></script>
<!-- JS库 sweetalert 可修改路径 -->
<script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<p><span>本文标题:</span><a href="/create-sniper-docker-image.html">Build一个基于Mxnet的Sniper镜像</a></p>
<p><span>文章作者:</span><a href="/" title="访问 Keavnn 的个人博客">Keavnn</a></p>
<p><span>发布时间:</span>2019年01月02日 - 21:01</p>
<p><span>最后更新:</span>2019年05月13日 - 22:05</p>
<p><span>原始链接:</span><a href="/create-sniper-docker-image.html" title="Build一个基于Mxnet的Sniper镜像">http://StepNeverStop.github.io/create-sniper-docker-image.html</a>
<span class="copy-path" title="点击复制文章链接"><i class="fa fa-clipboard" data-clipboard-text="http://StepNeverStop.github.io/create-sniper-docker-image.html" aria-label="复制成功!"></i></span>
</p>
<p><span>许可协议:</span><i class="fa fa-creative-commons"></i> <a rel="external nofollow" href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" title="Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)">署名-非商业性使用-相同方式共享 4.0 国际</a> 转载请保留原文链接及作者。</p>
</div>
<script>
var clipboard = new Clipboard('.fa-clipboard');
$(".fa-clipboard").click(function(){
clipboard.on('success', function(){
swal({
title: "",
text: '复制成功',
icon: "success",
showConfirmButton: true
});
});
});
</script>
</div>
<div>
<div style="padding: 10px 0; margin: 20px auto; width: 90%; text-align: center;">
<div>如果您获得了帮助,也可以资助一下小的啦~</div>
<button id="rewardButton" disable="enable" onclick="var qr = document.getElementById('QR'); if (qr.style.display === 'none') {qr.style.display='block';} else {qr.style.display='none'}">
<span>打赏啦</span>
</button>
<div id="QR" style="display: none;">
<div id="wechat" style="display: inline-block">
<img id="wechat_qr" src="/images/wechatpay.jpg" alt="Keavnn 微信">
<p>微信</p>
</div>
<div id="alipay" style="display: inline-block">
<img id="alipay_qr" src="/images/alipay.jpg" alt="Keavnn 支付宝">
<p>支付宝</p>
</div>
</div>
</div>
</div>
<footer class="post-footer">
<div class="post-tags">
<a href="/tags/docker/" rel="tag"> <i class="fa fa-tag"></i> docker</a>
<a href="/tags/mxnet/" rel="tag"> <i class="fa fa-tag"></i> mxnet</a>
<a href="/tags/sniper/" rel="tag"> <i class="fa fa-tag"></i> sniper</a>
</div>
<div class="post-nav">
<div class="post-nav-next post-nav-item">
<a href="/Git-learn.html" rel="next" title="Git命令学习记录">
<i class="fa fa-chevron-left"></i> Git命令学习记录
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item">
<a href="/Docker命令学习.html" rel="prev" title="Docker常用以及组合命令学习">
Docker常用以及组合命令学习 <i class="fa fa-chevron-right"></i>
</a>
</div>
</div>
</footer>
</div>
</article>
<div class="post-spread">
<!-- Go to www.addthis.com/dashboard to customize your tools -->
<div class="addthis_inline_share_toolbox">
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5cefbfc88c13b0e7" async="async"></script>
</div>
</div>
</div>
</div>
<div class="comments" id="comments">
<div id="lv-container" data-id="city" data-uid="MTAyMC80MTk0NS8xODQ5MQ=="></div>
</div>
</div>
<div class="sidebar-toggle">
<div class="sidebar-toggle-line-wrap">
<span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
</div>
</div>
<aside id="sidebar" class="sidebar">
<div id="sidebar-dimmer"></div>
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element">
<li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
文章目录
</li>
<li class="sidebar-nav-overview" data-target="site-overview-wrap">
站点概览
</li>
</ul>
<section class="site-overview-wrap sidebar-panel">
<div class="site-overview">
<div class="site-author motion-element" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
<img class="site-author-image" itemprop="image" src="/images/Kicon.jpg" alt="Keavnn">
<p class="site-author-name" itemprop="name">Keavnn</p>
<p class="site-description motion-element" itemprop="description">If it is to be, it is up to me.</p>
</div>
<nav class="site-state motion-element">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">51</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<a href="/categories/index.html">
<span class="site-state-item-count">11</span>
<span class="site-state-item-name">分类</span>
</a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/index.html">
<span class="site-state-item-count">26</span>
<span class="site-state-item-name">标签</span>
</a>
</div>
</nav>
<div class="feed-link motion-element">
<a href="/atom.xml" rel="alternate">
<i class="fa fa-rss"></i>
RSS
</a>
</div>
<div class="links-of-author motion-element">
<span class="links-of-author-item">
<a href="https://github.com/StepNeverStop" target="_blank" title="GitHub" rel="external nofollow">
<i class="fa fa-fw fa-github"></i>GitHub</a>
</span>
<span class="links-of-author-item">
<a href="mailto:[email protected]" target="_blank" title="E-Mail" rel="external nofollow">
<i class="fa fa-fw fa-envelope"></i>E-Mail</a>
</span>
</div>
<div class="cc-license motion-element" itemprop="license">
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" class="cc-opacity" target="_blank" rel="external nofollow">
<img src="/images/cc-by-nc-sa.svg" alt="Creative Commons">
</a>
</div>
<div class="links-of-blogroll motion-element links-of-blogroll-inline">
<div class="links-of-blogroll-title">
<i class="fa fa-fw fa-link"></i>
推荐阅读
</div>
<ul class="links-of-blogroll-list">
<li class="links-of-blogroll-item">
<a href="https://bluefisher.github.io" title="Fisher Chang" target="_blank" rel="external nofollow">Fisher Chang</a>
</li>
</ul>
</div>
</div>
</section>
<!--noindex-->
<section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
<div class="post-toc">
<div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#说明"><span class="nav-number">1.</span> <span class="nav-text">说明</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#环境"><span class="nav-number">2.</span> <span class="nav-text">环境</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#一-配置基础镜像"><span class="nav-number">3.</span> <span class="nav-text">一 配置基础镜像</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-apt-file"><span class="nav-number">3.1.</span> <span class="nav-text">安装 apt-file</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#二-安装编译依赖各种包"><span class="nav-number">4.</span> <span class="nav-text">二 安装编译依赖各种包</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-jemalloc"><span class="nav-number">4.1.</span> <span class="nav-text">安装 jemalloc</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-pkg-config"><span class="nav-number">4.2.</span> <span class="nav-text">安装 pkg-config</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-cudnn7-0"><span class="nav-number">4.3.</span> <span class="nav-text">安装 cudnn7.0</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-OpenCV"><span class="nav-number">4.4.</span> <span class="nav-text">安装 OpenCV</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-OpenBLAS"><span class="nav-number">4.5.</span> <span class="nav-text">安装 OpenBLAS</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#编译-Mxnet"><span class="nav-number">4.6.</span> <span class="nav-text">编译 Mxnet</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装-dos2unix"><span class="nav-number">4.7.</span> <span class="nav-text">安装 dos2unix</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#安装依赖"><span class="nav-number">4.8.</span> <span class="nav-text">安装依赖</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#测试Demo"><span class="nav-number">4.9.</span> <span class="nav-text">测试Demo</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#三-生成镜像"><span class="nav-number">5.</span> <span class="nav-text">三 生成镜像</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#四-压缩镜像"><span class="nav-number">6.</span> <span class="nav-text">四 压缩镜像</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#第一步-移除镜像内的SNIPER文件夹-把其放到FTP服务器上去"><span class="nav-number">6.1.</span> <span class="nav-text">第一步,移除镜像内的SNIPER文件夹,把其放到FTP服务器上去</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#第二步-压缩镜像"><span class="nav-number">6.2.</span> <span class="nav-text">第二步,压缩镜像</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#第三步-完善镜像"><span class="nav-number">6.3.</span> <span class="nav-text">第三步,完善镜像</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#第四步-Push"><span class="nav-number">6.4.</span> <span class="nav-text">第四步 Push</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#五-测试"><span class="nav-number">7.</span> <span class="nav-text">五 测试</span></a></li></ol></div>
</div>
</section>
<!--/noindex-->
</div>
</aside>
</div>
</main>
<footer id="footer" class="footer">
<div class="footer-inner">
<script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<div class="copyright">© <span itemprop="copyrightYear">2020</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">Keavnn</span>
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-area-chart"></i>
</span>
<span class="post-meta-item-text">Site words total count:</span>
<span title="Site words total count">80.3k</span>
</div>