-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathblog.sql
136 lines (101 loc) · 53.7 KB
/
blog.sql
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
/*
SQLyog Ultimate v12.09 (64 bit)
MySQL - 8.0.27 : Database - blog
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`blog` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `blog`;
/*Table structure for table `article` */
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`title` varchar(100) NOT NULL,
`cid` int NOT NULL,
`desc` varchar(200) DEFAULT NULL,
`content` longtext NOT NULL,
`img` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_article_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `article` */
insert into `article`(`id`,`created_at`,`updated_at`,`deleted_at`,`title`,`cid`,`desc`,`content`,`img`) values (1,NULL,'2022-01-24 22:49:27',NULL,'myblog',1,'good desc','<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><code><em><strong>good content </strong></em><em><strong>good content </strong></em><em><strong>good content </strong></em><em><strong>good content </strong></em><em><strong>good content </strong></em><em><strong>good content </strong></em></code></span></p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong><strong>good content </strong><strong>good content </strong><strong>good content </strong><strong>good content </strong><strong>good content </strong><strong>good content </strong><strong>good content </strong><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content good content </strong></em></span></p>\n<pre class=\"language-javascript\"><code><template>\n <div>\n <div class=\"d-flex justify-center pa-3 text-h3 font-weight-blod\">{{articleInfo.title}}</div>\n <v-divider class=\"pa-3 ma-3\"></v-divider>\n <v-alert elevation=\"1\" class=\"ma-4\" color=\"indigo\" dark border=\"left\" outlined> {{articleInfo.desc}}</v-alert>\n <div class=\"ma-5 pa-3 text-justify\" v-html=\"articleInfo.content\"></div>\n </div>\n</template>\n\n<script>\nexport default {\n props:[\'id\'],\n data(){\n return {\n articleInfo:{}\n }\n },\n created(){\n this.getArtInfo()\n },\n methods:{\n //查询文章基本信息\n async getArtInfo(){\n const {data:result}=await this.$http.get(`article/info/${this.id}`)\n if (result.status!=200) return this.$message.error(result.message)\n this.articleInfo=result.data\n console.log(result.data)\n }\n }\n}\n</script>\n\n<style scoped>\n \n</style></code></pre>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content good content good content good content good content </strong></em></span></p>\n<p style=\"text-align: left;\"> </p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"> </p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"> </p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"> </p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"> </p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>\n<p style=\"text-align: left;\"><span style=\"background-color: #95a5a6;\"><em><strong>good content </strong></em></span></p>','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(2,'2022-01-22 23:22:06','2022-01-25 11:20:06',NULL,'新增一篇文章1',4,'C语言','<p>索引的问题,已经跟大家聊了两篇文章了~今天再聊一个索引下推问题,也是非常有意思!</p>\n<p>索引下推是从 MySQL5.6 开始引入一个特性,英文是 index condition pushdown,一般简称为 ICP,索引下推通过减少回表的次数,来提高数据库的查询效率。</p>\n<p>有的小伙伴可能也看过一些关于 ICP 的概念,但是我觉得,概念比较简单,说一下很容易懂,但是在实际应用中,各种各样的情况非常多。所以接下来的内容我想通过几个具体的查询分析来和大家分享 ICP 到底是怎么一回事。</p>\n<p>1. 索引下推<br />为了给大家演示索引下推,我用 docker 安装了两个 MySQL,一个是 MySQL5.5.62,另一个是 5.7.26,因为索引下推是 MySQL5.6 中开始引入的新特性,所以这两个版本就可以给大家演示出索引下推的特点(不懂 docker 的小伙伴可以在公众号后台回复 docker,有松哥写的入门教程)。</p>\n<p>1.1 准备工作<br />首先我有如下一张表:</p>\n<p>CREATE TABLE `user2` (<br /> `id` int(11) unsigned NOT NULL AUTO_INCREMENT,<br /> `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,<br /> `age` int(11) DEFAULT NULL,<br /> `address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,<br /> PRIMARY KEY (`id`),<br /> KEY `username` (`username`(191),`age`)<br />) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;<br />1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />我在 MySQL5.5 和 MySQL5.7 中分别执行如上 SQL,确保两个 MySQL 中都有这样一张表。这张表中有一个由 username 和 age 组成的复合索引,索引名字就叫 username,在本文接下来的内容中,我说 username 索引就是指该复合索引。</p>\n<p>表创建成功后,各自添加一些模拟数据,这个我就不演示了,通过存储过程或者 Java 代码都能添加模拟数据,这个小伙伴们自行解决即可。</p>\n<p>OK,这样我们的准备工作就算完成了。</p>\n<p>1.2 MySQL 5.5<br />先来给小伙伴们演示一个 MySQL5.5 中的查询案例。</p>\n<p>为了方便后文的表述,我给每一条 SQL 都取一个标记:</p>\n<p>来看如下 SQL(SQL1):</p>\n<p>select * from user2 where username=\'1\' and age=99;<br />1<br />根据 username 和 age 查询一条记录,我们来看看这条 SQL 的执行计划(为了小伙伴们阅读方便,我加了 \\G 把数据用列的形式展示):</p>\n<p> </p>\n<p>大致瞅一眼,我们发现这个是用了索引的,但是具体是怎么用的,我来和大家说道说道!</p>\n<p>在 MySQL5.5 中,由于没有索引下推,所以上面这个 SQL 的执行流程是这样的:</p>\n<p>首先 MySQL 的 server 层调用存储引擎获取 username=‘1’ 的第一条记录。<br />存储引擎找到 username=‘1’ 的第一条记录后,在 B+Tree 的叶子结点中保存着主键 id,此时通过回表操作,去主键索引中找到该条记录的完整数据,并返回给 server 层。<br />server 层拿到数据之后,判断该条记录的 age 是否为 99,如果 age=99,就把该条记录返回给客户端,如果 age!=99,那就就丢弃该记录。<br />由于 username+age 组成的复合索引只是一个普通索引,并不是唯一索引(如果是唯一索引,那么这个查询就到此结束了),所以还需要继续去搜索有没有满足条件的记录。<br />但是注意第四步的搜索方式,不是直接去 B+Tree 中搜索了。由于在 username 索引中,username 字段的存储是有序的,即 username=‘1’ 的记录都是挨着的,而 B+Tree 的叶子结点之间通过双向链表关联,通过一个叶子结点就能找到下一个叶子结点(或者上一个叶子结点),第二步返回的数据中有一个 next_record 属性,该属性就直接指向二级索引的下一条记录,找到下一条记录后,回表拿到所有数据并返回给 server 层,然后重复 3、4 步。</p>\n<p>我们看看上面的执行计划,和我们的分析是一致的:</p>\n<p>前面的 type 为 ref 表示通过索引查找数据,一般出现等值匹配的时候,type 会为 ref。<br />最后的 Extra 为 Using where 表示数据在 server 层还进行了过滤操作。<br />再来看一个 SQL(SQL2):</p>\n<p>select * from user2 where username like \'j%\' and age=99;<br />1<br />这跟前面那个 SQL1 其实很像,唯一的差别在于 username 用了模糊匹配 \'j%\',在上篇文章中松哥已经和大家分享过了,这种情况其实也是能用上索引的,具体大家可以参考:其实 MySQL 中的 like 关键字也能用索引!。</p>\n<p>这条 SQL 的执行流程,跟第一条 SQL1 的执行流程也基本上是一致的,我这里就不赘述了,我们来看看这条 SQL 的执行计划:</p>\n<p> </p>\n<p>跟上面的执行计划相比,主要是 type 变为 range 了,表示按照范围搜索,因为 \'j%\' 其实就代表了一个扫描区间,不懂 \'j%\' 代表扫描区间的小伙伴,戳上篇文章。</p>\n<p>前面两个 SQL,由于查询的时候是 select *,所以都是需要回表操作的,虽然是复合索引,索引中既有 username 又有 age,但是查询条件中只能传入 username 到存储引擎中,从存储引擎中回表拿到一行数据的完整记录后,再返回给 server 层,再在 server 层判断 age 是否满足条件。我们肉眼其实都能看到这样查询效率比较低,明明索引中有 age 的值,但是却不在索引中比较 age,而是要回表,取一行的完整记录出来,返回给 server 层,再去和 age 比较,要是比较不通过,这条记录就被丢掉了。如果我们能够把 age 直接传入存储引擎,在存储引擎中直接去判断 age 是否满足条件,满足条件了,再去回表,不满足条件就到此结束,这样就可以减少回表的次数,进而提高查询效率。</p>\n<p>从 MySQL5.6 开始引进的索引下推技术,做的就是这事。</p>\n<p>1.3 MySQL 5.7<br />我们在 MySQL5.7 中也来看下上面两条 SQL 的执行,先来看第一个(SQL3):</p>\n<p>select * from user2 where username like \'j%\' and age=99;<br />1<br />来看下查询计划:</p>\n<p> </p>\n<p>可以看到,这个查询计划和 SQL2 的查询计划相比,主要是最后的 Extra 为 Using index condition,这是啥意思呢?</p>\n<p>这就是从 MySQL5.6 开始引入了索引下推 ICP,我们一起来看下具体操作流程:</p>\n<p>MySQL 的 server 层首先调用存储引擎定位到第一个以 j 开头的 username。<br />找到记录后,存储引擎并不急着回表,而是继续判断这条记录的 age 是否等于 99,如果 age=99,再去回表,如果 age 不等于 99,就不去回表了,直接继续读取下一条记录。<br />存储引擎将读取到的数据行返回给 server 层,此时如果还有其他非索引的查询条件,server 层再去继续过滤,在我们上面的案例中,此时没有其他查询条件了。假设 server 层还有其他的过滤条件,并且这个过滤条件把刚刚查到的记录过滤掉了,那么就会通过记录的 next_record 属性读取下一条记录,然后重复第二步。<br />这就是索引下推(index condition pushdown,ICP),有效的减少了回表次数,提高了查询效率。</p>\n<p>有时候我们看一下老版本的 MySQL,会觉得特别莫名其妙,索引下推,多么理所应当顺理成章的功能呀,可惜当时就是没有!还好,该有的最终都会有。</p>\n<p>我们再来看一个特殊情况,来看如下 SQL(SQL4):</p>\n<p>select * from user2 where username=\'1\' and age=99;<br />1<br />和前面的相比,这里的查询条件都变成等值比较了,来看看它的执行计划,如下:</p>\n<p> </p>\n<p>可以看到,这个查询计划和 SQL1 的查询计划相比,主要是最后的 Extra 为 null,没有额外操作了,其实这只是一个特殊处理而已,利用搜索条件 username=\'1\' and age=99 从存储引擎中找到数据之后,没有再去重复判断了而已(SQL3 中索引下推的时候不仅判断 age 的值也判断 username 的值)。</p>\n<p>2. 小结<br />好啦,通过 MySQL5.5 和 MySQL5.7 的对比,现在大家明白什么是索引下推了吧?其实一句话:在搜索引擎中提前判断对应的搜索条件是否满足,满足了再去回表,通过减少回表次数进而提高查询效率。<br /><br /></p>','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(3,'2022-01-22 23:22:31','2022-01-24 22:53:34',NULL,'加法雷克萨减肥啦编辑了',6,'阿帆围绕稳','<p>4. 完整代码<br />全部代码总共70余行,使用方法请看注释。</p>\n<p># -*- coding: utf-8 -*-</p>\n<p><code>import os</code><br /><code>import freetype</code><br /><code>import numpy as np</code><br /><code>from PIL import Image</code></p>\n<p><code>FONT_FILE = r\'C:\\Windows\\Fonts\\STLITI.TTF\'</code><br /><code>BG_FILE = r\'D:\\temp\\bg.png\'</code></p>\n<p><code>def text2image(word, font_file, size=128, color=(0,0,0)):</code><br /><code> \"\"\"使用指定字库将单个汉字转为图像</code><br /><code> </code><br /><code> word - 单个汉字字符串</code><br /><code> font_file - 矢量字库文件名</code><br /><code> size - 字号,默认128</code><br /><code> color - 颜色,默认黑色</code><br /><code> \"\"\"</code><br /><code> </code><br /><code> face = freetype.Face(font_file)</code><br /><code> face.set_char_size(size*size)</code><br /><code> </code><br /><code> face.load_char(word)</code><br /><code> btm_obj = face.glyph.bitmap</code><br /><code> w, h = btm_obj.width, btm_obj.rows</code><br /><code> pixels = np.array(btm_obj.buffer, dtype=np.uint8).reshape(h, w)</code><br /><code> </code><br /><code> dx = int(face.glyph.metrics.horiBearingX/64)</code><br /><code> if dx > 0:</code><br /><code> patch = np.zeros((pixels.shape[0], dx), dtype=np.uint8)</code><br /><code> pixels = np.hstack((patch, pixels))</code><br /><code> </code><br /><code> r = np.ones(pixels.shape) * color[0] * 255</code><br /><code> g = np.ones(pixels.shape) * color[1] * 255</code><br /><code> b = np.ones(pixels.shape) * color[2] * 255</code><br /><code> im = np.dstack((r, g, b, pixels)).astype(np.uint8)</code><br /><code> </code><br /><code> return Image.fromarray(im)</code></p>\n<p><code>def write_couplets(text, horv=\'V\', quality=\'L\', out_file=None, bg=BG_FILE):</code><br /><code> \"\"\"写春联</code><br /><code> </code><br /><code> text - 春联字符串</code><br /><code> bg - 背景图片路径</code><br /><code> horv - H-横排,V-竖排</code><br /><code> quality - 单字分辨率,H-640像素,L-320像素</code><br /><code> out_file - 输出文件名</code><br /><code> \"\"\"</code><br /><code> </code><br /><code> size, tsize = (320, 128) if quality == \'L\' else (640, 180)</code><br /><code> ow, oh = (size, size*len(text)) if horv == \'V\' else (size*len(text), size)</code><br /><code> im_out = Image.new(\'RGBA\', (ow, oh), \'#f0f0f0\')</code><br /><code> im_bg = Image.open(BG_FILE)</code><br /><code> if size < 640:</code><br /><code> im_bg = im_bg.resize((size, size))</code><br /><code> </code><br /><code> for i, w in enumerate(text):</code><br /><code> im_w = text2image(w, FONT_FILE, size=tsize, color=(0,0,0))</code><br /><code> w, h = im_w.size</code><br /><code> dw, dh = (size - w)//2, (size - h)//2</code><br /><code> </code><br /><code> if horv == \'V\':</code><br /><code> im_out.paste(im_bg, (0, i*size))</code><br /><code> im_out.paste(im_w, (dw, i*size+dh), mask=im_w)</code><br /><code> else:</code><br /><code> im_out.paste(im_bg, (i*size, 0))</code><br /><code> im_out.paste(im_w, (i*size+dw, dh), mask=im_w)</code><br /><code> </code><br /><code> im_out.save(\'%s.png\'%text)</code><br /><code> os.startfile(\'%s.png\'%text)</code></p>\n<p><code>if __name__ == \'__main__\':</code><br /><code> write_couplets(\'普天同庆\', horv=\'V\', quality=\'H\')</code><br /><code> write_couplets(\'欢度春节\', horv=\'V\', quality=\'H\')</code><br /><code> write_couplets(\'国泰民安\', horv=\'H\', quality=\'H\')</code><br />1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />5. 样例<br />————————————————<br />版权声明:本文为CSDN博主「天元浪子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。<br />原文链接:https://blog.csdn.net/xufive/article/details/122623982</p>','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(4,'2022-01-22 23:27:23','2022-01-22 23:27:23','2022-01-23 16:43:11','fsadjflsdfjsa',1,'hahhaha','你好世界','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(5,NULL,'2022-01-24 19:55:12',NULL,'sdfawer',5,'sfsarfwe4','dfqwq3rdsdfasd','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(6,'2022-01-24 16:13:40','2022-01-24 16:13:40',NULL,'fjalskfsdf',4,'sfafewr43rwe','<p>asfsafasf r5tyrtgdfsg</p>','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(7,'2022-01-24 22:18:29','2022-02-13 15:10:39',NULL,'我的实际立刻就发了扩散',6,'咖啡机了数据','<p><img src=\"http://tmnhs.top/FkRia_wJqn4YhgqYV3AqP2615Q7f\" alt=\"\" width=\"192\" height=\"108\" />图片修改</p>','http://tmnhs.top/Fhm3-EFy-RjLzRWxMdYvawnjHKP6'),(8,'2022-02-13 14:55:00','2022-02-13 15:08:39',NULL,'哈哈哈哈有图片了',5,'哈哈哈哈有图片了','<div class=\"css-1dbjc4n r-eqz5dr r-1ifxtd0 r-1ygmrgt\">\n<div class=\"css-1dbjc4n r-18u37iz\">\n<div class=\"css-1dbjc4n r-1ro0kt6 r-16y2uox r-1wbh5a2\">\n<div class=\"css-901oao r-1nf4jbm r-1xnzce8\" dir=\"auto\" data-rnw-media-class=\"229__227\" data-testid=\"page.title\">什么是 Docker</div>\n</div>\n</div>\n<div class=\"css-1dbjc4n r-nzcix3 r-qklmqi r-11c0sde\" data-rnw-media-class=\"1473__1472\"> </div>\n</div>\n<div class=\"css-1dbjc4n\" data-rnw-media-class=\"1495__1493-127\">\n<div class=\"css-1dbjc4n r-bnwqim\">\n<div class=\"css-1dbjc4n r-1dqbpge r-eu3ka r-1d2f490 r-u8s1d r-zchlnj r-1sdbnja\" tabindex=\"0\"> </div>\n<div spellcheck=\"true\" data-testid=\"page.contentEditor\" data-slate-editor=\"true\" data-key=\"e9cb3fdebebb4de69cf3ed148639b7d3\" data-gramm=\"false\">\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010\" data-key=\"44ac6b3d175a44bd9825a13b6cc68d58\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"44ac6b3d175a44bd9825a13b6cc68d58\">\n<div class=\"css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"0e285aaa97ac4acd976331a177bebf57\"><strong class=\"r-b88u0q\" data-slate-leaf=\"true\" data-offset-key=\"0e285aaa97ac4acd976331a177bebf57:0\">Docker</strong> 最初是 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"0e285aaa97ac4acd976331a177bebf57:2\">dotCloud</code> 公司创始人 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/shykes\" data-rnw-int-class=\"link____\"><span data-key=\"c3b800ec063c4a409b54c86e10ce370c\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">Solomon Hykes</span></a><span data-key=\"48151ae98711422bae8c7d12a7c05bcb\"> 在法国期间发起的一个公司内部项目,它是基于 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"48151ae98711422bae8c7d12a7c05bcb:1\">dotCloud</code> 公司多年云服务技术的一次革新,并于 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://en.wikipedia.org/wiki/Docker_\" data-rnw-int-class=\"link____\"><span data-key=\"3775e8322caf47fb9835162021351de7\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">2013 年 3 月以 Apache 2.0 授权协议开源</span></a><span data-key=\"7a56a2368d014392a3d0c5693667367a\">,主要项目代码在 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/moby/moby\" data-rnw-int-class=\"link____\"><span data-key=\"fd16e8cabe9545dba1cacc14c8d307f8\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">GitHub</span></a><span data-key=\"95a6b613590041f7a5608ea0e7aad767\"> 上进行维护。<code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"95a6b613590041f7a5608ea0e7aad767:1\">Docker</code> 项目后来还加入了 Linux 基金会,并成立推动 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://opencontainers.org/\" data-rnw-int-class=\"link____\"><span data-key=\"d8562337beb04c0b8f1113ca80b45c14\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">开放容器联盟(OCI)</span></a><span data-key=\"a3b5d0c3fd2c43e09760fe61ffd388e3\">。</span></div>\n</div>\n</div>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010\" data-key=\"b257f04279744e95b9f8072054459b2c\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"b257f04279744e95b9f8072054459b2c\">\n<div class=\"css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"02ca5a68f9404a209b7db15513341890\"><strong class=\"r-b88u0q\" data-slate-leaf=\"true\" data-offset-key=\"02ca5a68f9404a209b7db15513341890:0\">Docker</strong> 自开源后受到广泛的关注和讨论,至今其 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/moby/moby\" data-rnw-int-class=\"link____\"><span data-key=\"b9bb203ead5c48fc9fe3a003de3b4666\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">GitHub 项目</span></a><span data-key=\"e7eea71f51bd436cb1d31384f1f83c06\"> 已经超过 5 万 7 千个星标和一万多个 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"e7eea71f51bd436cb1d31384f1f83c06:1\">fork</code>。甚至由于 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"e7eea71f51bd436cb1d31384f1f83c06:3\">Docker</code> 项目的火爆,在 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"e7eea71f51bd436cb1d31384f1f83c06:5\">2013</code> 年底,</span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://www.docker.com/blog/dotcloud-is-becoming-docker-inc/\" data-rnw-int-class=\"link____\"><span data-key=\"0205011829f3445cb1d36164754a46d4\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">dotCloud 公司决定改名为 Docker</span></a><span data-key=\"c43bc1e6d00844d6bdf91587383295bf\">。<code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:1\">Docker</code> 最初是在 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:3\">Ubuntu 12.04</code> 上开发实现的;<code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:5\">Red Hat</code> 则从 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:7\">RHEL 6.5</code> 开始对 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:9\">Docker</code> 进行支持;<code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:11\">Google</code> 也在其 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:13\">PaaS</code> 产品中广泛应用 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c43bc1e6d00844d6bdf91587383295bf:15\">Docker</code>。</span></div>\n</div>\n</div>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010\" data-key=\"0c192fa4cee842ee94c949d524a0e195\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"0c192fa4cee842ee94c949d524a0e195\">\n<div class=\"css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"75f8ce1c616947ae958557172a3af0e7\"><strong class=\"r-b88u0q\" data-slate-leaf=\"true\" data-offset-key=\"75f8ce1c616947ae958557172a3af0e7:0\">Docker</strong> 使用 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"75f8ce1c616947ae958557172a3af0e7:2\">Google</code> 公司推出的 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://golang.google.cn/\" data-rnw-int-class=\"link____\"><span data-key=\"07a25f65acbe44b9980bdb85f7f43171\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">Go 语言</span></a><span data-key=\"40f53ffa2c6c433f878a9218b4750001\"> 进行开发实现,基于 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"40f53ffa2c6c433f878a9218b4750001:1\">Linux</code> 内核的 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://zh.wikipedia.org/wiki/Cgroups\" data-rnw-int-class=\"link____\"><span data-key=\"21d0f1d69c7b4ba1b1e06ded68d261bc\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">cgroup</span></a><span data-key=\"ff013439fd1e4d4cb57bfeb89173b49a\">,</span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://en.wikipedia.org/wiki/Linux_namespaces\" data-rnw-int-class=\"link____\"><span data-key=\"fe4a18e68123406496c651bd39370001\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">namespace</span></a><span data-key=\"34d8f1265baa4a24a51c592109f4fd52\">,以及 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://docs.docker.com/storage/storagedriver/overlayfs-driver/\" data-rnw-int-class=\"link____\"><span data-key=\"b7b54589a36049e0a062034011e1e14b\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">OverlayFS</span></a><span data-key=\"80dc6ead653545ea90d9099b4a3f789a\"> 类的 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://en.wikipedia.org/wiki/Union_mount\" data-rnw-int-class=\"link____\"><span data-key=\"3b8d1facd4ea4072ac983f0e8632a931\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">Union FS</span></a><span data-key=\"aceb7bfb5a584c92be00eaee50fd4081\"> 等技术,对进程进行封装隔离,属于 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://en.wikipedia.org/wiki/Operating-system-level_virtualization\" data-rnw-int-class=\"link____\"><span data-key=\"2490fde61fed41c19dfdae35a221fd28\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">操作系统层面的虚拟化技术</span></a><span data-key=\"0ec26dc57bdf4439a905a14131f66850\">。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://linuxcontainers.org/lxc/introduction/\" data-rnw-int-class=\"link____\"><span data-key=\"63c616807a6d4e218d2eecf61605843a\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">LXC</span></a><span data-key=\"2a12cd35b38248829ad2cdb2ee15030b\">,从 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"2a12cd35b38248829ad2cdb2ee15030b:1\">0.7</code> 版本以后开始去除 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"2a12cd35b38248829ad2cdb2ee15030b:3\">LXC</code>,转而使用自行开发的 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/docker/libcontainer\" data-rnw-int-class=\"link____\"><span data-key=\"ad3ef7b9522942bd965e50aa5656dffd\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">libcontainer</span></a><span data-key=\"e2311a2c5e4e4716a7bd40e3cdd95095\">,从 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"e2311a2c5e4e4716a7bd40e3cdd95095:1\">1.11</code> 版本开始,则进一步演进为使用 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/opencontainers/runc\" data-rnw-int-class=\"link____\"><span data-key=\"9b14537856f249028b0cba09b47c14c2\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">runC</span></a><span data-key=\"6564f011cbcc4e8a984e9248359e2861\"> 和 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/containerd/containerd\" data-rnw-int-class=\"link____\"><span data-key=\"a1c5edd4fa7c41d892d2bc938fb69d93\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">containerd</span></a><span data-key=\"60a8c3d6cbb747d0865a8e43b1870814\">。</span></div>\n</div>\n</div>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-1l7z4oj r-95jzfe r-1yzf0co r-bnwqim r-417010\" data-key=\"07d4b63222384a97a61ec5d572c3e977\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"07d4b63222384a97a61ec5d572c3e977\">\n<div class=\"css-1dbjc4n\">\n<div class=\"css-1dbjc4n r-18u37iz r-1777fci\">\n<div class=\"css-1dbjc4n\">\n<div data-slate-void=\"true\" data-key=\"934ca57c80124dc3bc83e29ac1e6f414\">\n<div>\n<div class=\"css-1dbjc4n\">\n<div class=\"css-1dbjc4n r-z2wwpe r-bnwqim\">\n<div class=\"css-1dbjc4n r-1loqt21 r-1otgn73 r-1i6wzkk r-lrvibr\" tabindex=\"0\">\n<div class=\"css-1dbjc4n r-z2wwpe r-1mlwlqe r-1udh08x r-417010\">\n<div class=\"css-1dbjc4n r-1niwhzg r-vvn4in r-u6sd8q r-ehq7j7 r-1p0dtai r-1pi2tsx r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-13qz1uu r-1wyyakw\"> </div>\n<img class=\"css-9pa8cd\" draggable=\"false\" src=\"https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/media/docker-on-linux.png\" alt=\"\" /></div>\n</div>\n</div>\n<div class=\"css-1dbjc4n r-tskmnb r-bnwqim r-q4m81j\">\n<div data-key=\"1ae6b35b9e904cb3bf634f04016651f1\" data-fragment=\"true\" data-slate-editor=\"true\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-key=\"925fac5fced0460ebd68ecdf1885c627\">\n<div class=\"css-901oao r-1rasi3h r-gg6oyi r-1enofrn r-16dba41 r-14yzgew r-q4m81j r-1xnzce8\" dir=\"auto\"><span data-key=\"2a530b33fcd8497f8c7e98f9575720f7\">Docker 架构</span></div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div>\n<blockquote class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-1l7z4oj r-95jzfe r-1yzf0co r-bnwqim r-417010\" data-key=\"6af366bc264f4e1ab2822e10494d194e\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1yyzdbt r-119zq30 r-1phboty r-1yadl64 r-deolkf r-1bnj018 r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-1qhn6m8 r-bnwqim r-417010\" data-block-content=\"6af366bc264f4e1ab2822e10494d194e\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-iphfwy r-1h8ys4a r-1yzf0co r-bnwqim r-417010\" data-key=\"668c537599de44038f17f27bd189858c\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"668c537599de44038f17f27bd189858c\">\n<div class=\"css-901oao r-1bnj018 r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"cfbc4d7244e94c2387f00bf94c9200b8\"><code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"cfbc4d7244e94c2387f00bf94c9200b8:0\">runc</code> 是一个 Linux 命令行工具,用于根据 </span><a class=\"css-4rbku5 css-1dbjc4n r-1loqt21 r-1471scf r-1otgn73 r-1i6wzkk r-lrvibr\" href=\"https://github.com/opencontainers/runtime-spec\" data-rnw-int-class=\"link____\"><span data-key=\"f784439193a74970943d63b34d7221ad\" data-rnw-int-class=\"nearest_262-1645_264-1646-240__\">OCI容器运行时规范</span></a><span data-key=\"75a76693c8f245b4abb6210f98e3dd6c\"> 创建和运行容器。</span></div>\n</div>\n</div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-iphfwy r-1h8ys4a r-1yzf0co r-bnwqim r-417010\" data-key=\"005f3b3dc31a4011ac67529242d47f9b\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"005f3b3dc31a4011ac67529242d47f9b\">\n<div class=\"css-901oao r-1bnj018 r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"c2c213071cbf43a8818b5de2c3290fe5\"><code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"c2c213071cbf43a8818b5de2c3290fe5:0\">containerd</code> 是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。</span></div>\n</div>\n</div>\n</div>\n</blockquote>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010\" data-key=\"8a0319933f5749e78a58eb02b0445008\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"8a0319933f5749e78a58eb02b0445008\">\n<div class=\"css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"1f58c8e65e7e4259b6f6fb20026444d1\"><strong class=\"r-b88u0q\" data-slate-leaf=\"true\" data-offset-key=\"1f58c8e65e7e4259b6f6fb20026444d1:0\">Docker</strong> 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 <code class=\"r-1vckr1u r-z2wwpe r-uibjmv r-m2pi6t r-1hvjb8t\" data-slate-leaf=\"true\" data-offset-key=\"1f58c8e65e7e4259b6f6fb20026444d1:2\">Docker</code> 技术比虚拟机技术更为轻便、快捷。</span></div>\n</div>\n</div>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-xd6kpl r-tskmnb r-1yzf0co r-bnwqim r-417010\" data-key=\"0c7eaa2dabad45d099a649df0033fffd\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"0c7eaa2dabad45d099a649df0033fffd\">\n<div class=\"css-901oao r-1nf4jbm r-gg6oyi r-ubezar r-16dba41 r-135wba7 r-fdjqy7 r-1xnzce8\" dir=\"auto\"><span data-key=\"518a6a08982945d8a9e2653355edf6ad\">下面的图片比较了 <strong class=\"r-b88u0q\" data-slate-leaf=\"true\" data-offset-key=\"518a6a08982945d8a9e2653355edf6ad:1\">Docker</strong> 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。</span></div>\n</div>\n</div>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-1l7z4oj r-95jzfe r-1yzf0co r-bnwqim r-417010\" data-key=\"2fdaac0997314d8aac45b0b776a27ed1\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"2fdaac0997314d8aac45b0b776a27ed1\">\n<div class=\"css-1dbjc4n\">\n<div class=\"css-1dbjc4n r-18u37iz r-1777fci\">\n<div class=\"css-1dbjc4n\">\n<div data-slate-void=\"true\" data-key=\"0affc8c7174b4965a69b9b6552842062\">\n<div>\n<div class=\"css-1dbjc4n\">\n<div class=\"css-1dbjc4n r-z2wwpe r-bnwqim\">\n<div class=\"css-1dbjc4n r-1loqt21 r-1otgn73 r-1i6wzkk r-lrvibr\" tabindex=\"0\">\n<div class=\"css-1dbjc4n r-z2wwpe r-1mlwlqe r-1udh08x r-417010\">\n<div class=\"css-1dbjc4n r-1niwhzg r-vvn4in r-u6sd8q r-ehq7j7 r-1p0dtai r-1pi2tsx r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-13qz1uu r-1wyyakw\"> </div>\n<img class=\"css-9pa8cd\" draggable=\"false\" src=\"https://3503645665-files.gitbook.io/~/files/v0/b/gitbook-28427.appspot.com/o/assets%2F-M5xTVjmK7ax94c8ZQcm%2F-M5xT_hHX2g5ldlyp9nm%2F-M5xTdXNYDmRWNH-Lqez%2Fvirtualization.png?generation=1588021947568736&alt=media\" alt=\"\" /></div>\n</div>\n</div>\n<div class=\"css-1dbjc4n r-tskmnb r-bnwqim r-q4m81j\">\n<div data-key=\"459a644a3bd6480599d922e5929ecb05\" data-fragment=\"true\" data-slate-editor=\"true\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-key=\"d12343f3d27648d4b45b9b93e1bc3425\">\n<div class=\"css-901oao r-1rasi3h r-gg6oyi r-1enofrn r-16dba41 r-14yzgew r-q4m81j r-1xnzce8\" dir=\"auto\"><span data-key=\"862246057b804a18baf02b9fbbcef8c0\">传统虚拟化</span></div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div>\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-1l7z4oj r-95jzfe r-1yzf0co r-bnwqim r-417010\" data-key=\"cd92c07cc08849f8bf9c5ef1fe2f51cb\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1ro0kt6 r-eqz5dr r-16y2uox r-1wbh5a2 r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-block-content=\"cd92c07cc08849f8bf9c5ef1fe2f51cb\">\n<div class=\"css-1dbjc4n\">\n<div class=\"css-1dbjc4n r-18u37iz r-1777fci\">\n<div class=\"css-1dbjc4n\">\n<div data-slate-void=\"true\" data-key=\"bcda70776f9446ac83aca7e930f791b4\">\n<div>\n<div class=\"css-1dbjc4n\">\n<div class=\"css-1dbjc4n r-z2wwpe r-bnwqim\">\n<div class=\"css-1dbjc4n r-1loqt21 r-1otgn73 r-1i6wzkk r-lrvibr\" tabindex=\"0\">\n<div class=\"css-1dbjc4n r-z2wwpe r-1mlwlqe r-1udh08x r-417010\">\n<div class=\"css-1dbjc4n r-1niwhzg r-vvn4in r-u6sd8q r-ehq7j7 r-1p0dtai r-1pi2tsx r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-13qz1uu r-1wyyakw\"> </div>\n<img class=\"css-9pa8cd\" draggable=\"false\" src=\"https://3503645665-files.gitbook.io/~/files/v0/b/gitbook-28427.appspot.com/o/assets%2F-M5xTVjmK7ax94c8ZQcm%2F-M5xT_hHX2g5ldlyp9nm%2F-M5xTdXP2scg0hxytUHA%2Fdocker.png?generation=1588021947474061&alt=media\" alt=\"\" /></div>\n</div>\n</div>\n<div class=\"css-1dbjc4n r-tskmnb r-bnwqim r-q4m81j\">\n<div data-key=\"ca2d90a31e894ec9ab95bc56bdce798d\" data-fragment=\"true\" data-slate-editor=\"true\">\n<div class=\"r-1oszu61 r-1xc7w19 r-1phboty r-1yadl64 r-deolkf r-6koalj r-1mlwlqe r-eqz5dr r-1q142lx r-crgep1 r-ifefl9 r-bcqeeo r-t60dpp r-bnwqim r-417010\" data-key=\"9b90c7a150d24d2cb956862b06c26149\">\n<div class=\"css-901oao r-1rasi3h r-gg6oyi r-1enofrn r-16dba41 r-14yzgew r-q4m81j r-1xnzce8\" dir=\"auto\"><span data-key=\"3717c822373f48069fd9e5b504ff2c5c\">Docker</span></div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>','http://tmnhs.top/FoKFZ1Rs8HJLpU7ICmC-O-xTrT-J'),(9,'2022-02-13 15:16:20','2022-02-13 15:16:20',NULL,'发简历发到',4,'阿达是奋斗','<p> </p>\n<pre class=\"language-javascript\"><code>import config from \'./config\'\nimport { emitter } from \'@/utils/bus.js\'\n\n// 统一导入el-icon图标\nimport * as ElIconModules from \'@element-plus/icons\'\n// 导入转换图标名称的函数\n\nconst closeThisPage = () => {\n emitter.emit(\'closeThisPage\')\n}\n\nexport const register = (app) => {\n // 统一注册el-icon图标\n for (const iconName in ElIconModules) {\n app.component(iconName, ElIconModules[iconName])\n }\n\n app.config.globalProperties.$GIN_VUE_ADMIN = config\n app.config.globalProperties.$CloseThisPage = closeThisPage\n}\n\n</code></pre>\n<p> </p>\n<p> </p>\n<p> </p>','http://tmnhs.top/Fhm3-EFy-RjLzRWxMdYvawnjHKP6');
/*Table structure for table `category` */
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `category` */
insert into `category`(`id`,`name`) values (1,'javaScript'),(3,'gin'),(4,'c'),(5,'c++'),(6,'python'),(7,'java');
/*Table structure for table `comment` */
DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`commentator` varchar(20) NOT NULL,
`content` longtext NOT NULL,
`article_id` int NOT NULL,
`parent_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_comment_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `comment` */
/*Table structure for table `profile` */
DROP TABLE IF EXISTS `profile`;
CREATE TABLE `profile` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`desc` varchar(200) DEFAULT NULL,
`qq_chat` varchar(32) DEFAULT NULL,
`we_chat` varchar(255) DEFAULT NULL,
`weibo` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`img` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`avatar` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `profile` */
insert into `profile`(`id`,`name`,`desc`,`qq_chat`,`we_chat`,`weibo`,`email`,`img`,`avatar`) values (1,'tmnh1','发所发生的',NULL,NULL,NULL,NULL,NULL,NULL),(2,'admin','asfsaf','werwqr','wrsczx','ssdfaewr','sdfassersd','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4','http://tmnhs.top/FgS7IOFzb--ID37v_1U7c7qAIr6G'),(3,'admin','klsjfalkjf 个性个人简介','fasrwesa','fasfwer','wetwefds','ertw34565','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4','https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F3903e6caa22c420857dde0de5b44a994a39179af.jpg&refer=http%3A%2F%2Fi0.hdslb.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1645586383&t=95f72aaf63f837335c3ebb6606d83fe4'),(26,'hhhhhhhh','','','','','[email protected]','','');
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`email` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`role` int DEFAULT '2',
`status` varchar(12) DEFAULT NULL,
`code` varchar(80) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_user_deleted_at` (`deleted_at`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `user` */
insert into `user`(`id`,`created_at`,`updated_at`,`deleted_at`,`username`,`password`,`email`,`role`,`status`,`code`) values (1,NULL,'2022-01-22 10:49:06',NULL,'tmnh1','nbo6qwKOCLonuw==','[email protected]',2,NULL,NULL),(2,'2022-01-19 23:26:24','2022-01-22 10:38:10',NULL,'admin','nbo6qwKOCLonuw==','[email protected]',1,'Y','e00c7bc5-0024-45e0-8e20-4bf1218aca43'),(3,'2022-01-20 17:42:56','2022-01-20 17:42:56','2022-01-21 11:58:29','发斯蒂芬','nbo6qwKOCLonuw==','[email protected]',2,'N','ccef4615-37c4-4178-bbf7-a7cccd7b869a'),(4,'2022-01-20 17:43:02','2022-01-20 17:43:02','2022-01-21 12:52:16','are如图','nbo6qwKOCLonuw==','[email protected]',2,'N','6d8e51c3-7e6c-4ada-a5af-74ff99a5801b'),(5,'2022-01-20 17:43:06','2022-01-20 17:43:06','2022-01-21 12:51:56','阿尔同仁堂','nbo6qwKOCLonuw==','[email protected]',2,'N','d30c6e6c-7740-4faf-b9b8-e5ac974d437e'),(6,'2022-01-20 17:43:11','2022-01-20 17:43:11','2022-01-21 11:58:19','威尔额外','nbo6qwKOCLonuw==','[email protected]',2,'N','25eab749-7b0f-4417-9220-489a50c19afc'),(7,'2022-01-20 17:43:38','2022-01-20 17:43:38','2022-01-21 10:21:03','阿木木的眼泪','nbo6qwKOCLonuw==','[email protected]',2,'N','61c90b64-931e-4ef9-8740-98bc28f5a3c4'),(8,'2022-01-20 17:43:46','2022-01-20 17:43:46','2022-01-21 12:46:31','adfsere','nbo6qwKOCLonuw==','[email protected]',2,'N','a2a213ce-6dc8-4b26-8cf5-a493ca414bf3'),(9,'2022-01-21 13:03:41','2022-01-22 09:27:56','2022-01-23 16:43:24','和入网费','nbo6qwKOCLonuw==','[email protected]',0,'N','1a8c0d05-ccf8-4e39-a9c6-e53b674cfc4b'),(10,'2022-01-21 13:03:45','2022-01-22 10:38:15',NULL,'你的supgerstar','nbo6qwKOCLonuw==','[email protected]',0,'N','8c308cb1-1b0b-47c2-9ebf-95b46ce5305b'),(11,'2022-01-21 13:04:02','2022-01-22 10:38:31',NULL,'珂学家007','nbo6qwKOCLonuw==','[email protected]',1,'N','a42655b7-a0e9-4614-aae0-0dcc8c495d10'),(12,'2022-01-21 13:04:15','2022-01-21 13:04:15',NULL,'人生啊不','nbo6qwKOCLonuw==','[email protected]',2,'N','be27e530-177a-4349-926c-b7af8a1bfe07'),(13,'2022-01-21 13:04:26','2022-01-21 13:04:26',NULL,'我的世界','nbo6qwKOCLonuw==','[email protected]',2,'N','dec33b0c-e481-4a58-aff9-4136704f7519'),(14,'2022-01-21 13:04:41','2022-01-21 13:04:41',NULL,'人不能至少不应该','nbo6qwKOCLonuw==','[email protected]',2,'N','82f9b8ab-08a5-4fb2-b4a9-f55aaedfafdf'),(15,'2022-01-21 13:04:51','2022-01-21 13:04:51',NULL,'你是谁啊','nbo6qwKOCLonuw==','[email protected]',2,'N','5b50871a-b3fb-485d-98eb-dc67cff77a5f'),(16,'2022-01-21 13:05:04','2022-01-21 13:05:04',NULL,'也许我需要你','nbo6qwKOCLonuw==','[email protected]',2,'N','507ce241-0ac8-474b-a2eb-4bf56b6c7cee'),(17,'2022-01-21 13:05:20','2022-01-21 13:05:20',NULL,'梦里的她','nbo6qwKOCLonuw==','[email protected]',2,'N','47a5b338-63fc-41b5-8074-52282891b808'),(18,'2022-01-21 13:07:57','2022-01-21 13:07:57','2022-01-21 13:32:27','','MGq/Uyl0pb2UHQ==','',2,'',''),(19,'2022-01-21 13:32:08','2022-01-21 13:32:08','2022-01-21 14:00:34','哈哈哈冷风','nbo6qwKOCLonuw==','[email protected]',2,'N',''),(20,'2022-01-21 19:10:45','2022-01-21 19:10:45',NULL,'说服力就奥拉夫','nbo6qwKOCLonuw==','',2,'N',''),(21,'2022-01-21 19:41:54','2022-01-21 19:41:54',NULL,'alsfjlskad','nbo6qwKOCLonuw==','[email protected]',2,'N',''),(22,'2022-01-21 19:42:24','2022-01-21 19:42:24',NULL,'nidfsfaaaaa','Eh/wC2CeOoulig==','[email protected]',2,'N',''),(23,'2022-01-21 19:48:45','2022-01-21 19:48:45',NULL,'trewefasdfs','nbo6qwKOCLonuw==','[email protected]',2,'N',''),(24,'2022-01-21 19:50:39','2022-01-21 19:50:39',NULL,'trewefasdfstrftf','nbo6qwKOCLonuw==','[email protected]',2,'N',''),(25,'2022-02-14 10:28:07','2022-02-14 10:28:07',NULL,'mmmmmm','nbo6qwKOCLonuw==','[email protected]',2,'Y',''),(26,'2022-02-14 10:37:10','2022-02-14 10:37:10',NULL,'hhhhhhhh','nbo6qwKOCLonuw==','[email protected]',2,'Y','');
/*Table structure for table `user_article` */
DROP TABLE IF EXISTS `user_article`;
CREATE TABLE `user_article` (
`user_id` int unsigned NOT NULL,
`article_id` int unsigned NOT NULL,
PRIMARY KEY (`user_id`,`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `user_article` */
insert into `user_article`(`user_id`,`article_id`) values (2,2),(2,3),(2,6),(2,7),(2,8),(2,9);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;