Skip to content

Commit 97d7038

Browse files
committed
docs:提交文章 SOP 完善
1 parent abdd003 commit 97d7038

3 files changed

Lines changed: 149 additions & 6 deletions

File tree

README.md

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,22 @@ https://www.bilibili.com/video/BV1vb411m7NY
1010
视频前两节即可学会本地启动 Vuepress项目,还可学到其他相关配置。
1111

1212
## 1 图片调整路径
13-
docs/.vuepress/public/images
14-
不建议存储源文件,请直接使用 oos 图床存储图片。
13+
docs/.vuepress/public/images 存储网站本身展示所需宣传营销图片。
14+
15+
文章中的绘图不建议存储源文件,请直接使用阿里云 oos 对象存储来存储图片。
1516

1617
## 2 提交文章
17-
1. 新增 md 文件
18+
19+
### 2.1 新增 md 文件(必须)
20+
1821
在 md 目录新建 concurrency 目录,新建00-Java并发编程.md文件,将文章内容放进去
19-
2. 修改 config.js,配置专栏和下面文章路径
22+
23+
### 2.2 修改 config.js
24+
25+
#### 2.2.1 配置
26+
27+
- 专栏名称(新增专栏时必须)
28+
- 文章路径(新增文章非必须)
2029
```js
2130
{
2231
text: '并发编程',
@@ -25,7 +34,7 @@ docs/.vuepress/public/images
2534
]
2635
},
2736
```
28-
3. 修改 config.js,配置专栏侧边导航栏
37+
#### 2.2.2 配置专栏侧边导航栏(必须)
2938
3039
```js
3140
"/md/concurrency/": [
@@ -39,7 +48,9 @@ docs/.vuepress/public/images
3948
}
4049
],
4150
```
42-
4. 本地调试,浏览器前端能正常看到文章,即可提交代码
51+
### 2.3 本地调试
52+
浏览器前端能正常看到文章,即可提交代码
4353

4454
## 3 Git GUI 工具
4555
建议下载 Github Desktop,可视化提交文章相关数据。
56+
注意本仓库分为 master、main两个分支,只在 main 分支操作文章,勿碰 master 分支!

docs/.vuepress/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ module.exports = {
356356
sidebarDepth: 0,
357357
children: [
358358
"00-Docker基础命令大全.md",
359+
"01-标准化打包技术.md",
359360
]
360361
}
361362
],
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# 01-标准化打包技术
2+
3+
## 1 简介
4+
5+
### 1.1 三足鼎立
6+
7+
相比盛极一时的:
8+
9+
- AWS
10+
![](https://codeselect.oss-cn-shanghai.aliyuncs.com/watermark%252Ctype_ZmFuZ3poZW5naGVpdGk%252Cshadow_10%252Ctext_SmF2YUVkZ2U%253D%252Csize_16%252Ccolor_FFFFFF%252Ct_70-20240305102454638.png)
11+
12+
- OpenStack
13+
![](https://codeselect.oss-cn-shanghai.aliyuncs.com/watermark%252Ctype_ZmFuZ3poZW5naGVpdGk%252Cshadow_10%252Ctext_SmF2YUVkZ2U%253D%252Csize_1%252Ccolor_FFFFFF%252Ct_70.png)
14+
15+
- 以Cloud Foundry为代表的PaaS项目,却成当时云计算技术清流:
16+
![](https://codeselect.oss-cn-shanghai.aliyuncs.com/watermark%252Ctype_ZmFuZ3poZW5naGVpdGk%252Cshadow_10%252Ctext_SmF2YUVkZ2U%253D%252Csize_16%252Ccolor_FFFFFF%252Ct_70.png)
17+
Cloud Foundry项目已基本度过最艰难的概念普及和用户调教期,开启以开源PaaS为核心构建平台层服务能力的变革。只是后来 **`Docker`** 横空出世,当时还叫**dotCloud****Docker**公司,也是PaaS热潮一员:
18+
![](https://codeselect.oss-cn-shanghai.aliyuncs.com/watermark%252Ctype_ZmFuZ3poZW5naGVpdGk%252Cshadow_10%252Ctext_SmF2YUVkZ2U%253D%252Csize_1%252Ccolor_FFFFFF%252Ct_70-20240305102553255.png)
19+
20+
相比Heroku、Pivotal、Red Hat等PaaS新宠,**dotCloud**微不足道,主打产品跟主流Cloud Foundry社区脱节,**dotCloud**公司突发:开源自己的容器项目 **`Docker`**!!!显然,这决定在当时根本无人在意。“容器”概念从不是新鲜事,也非Docker公司发明。即使在当时最热门PaaS项目Cloud Foundry,容器也只是其最底层、最无人关注部分。
21+
22+
PaaS项目被大家接纳的主要原因是提供
23+
24+
### 1.2 应用托管
25+
26+
当时主流用户普遍用法,租一批AWS或OpenStack的虚拟机,像以前管理物理服务器,用脚本或手工在这些机器部署应用。自然地,部署过程就碰到云端虚拟机和本地环境不一致问题。当时云计算服务,就是比谁能更好模拟本地服务器环境,更好“上云”体验。而PaaS开源项目出现就是当时解决该问题最佳方案。
27+
28+
29+
虚拟机创建后,运维只需在这些机器部署一个Cloud Foundry项目,然后开发者执行一条命令就能把本地应用部署到云:
30+
31+
```bash
32+
cf push "My APP"
33+
```
34+
35+
因此,Cloud Foundry这类PaaS项目,最核心组件就是应用的打包和分发机制。
36+
37+
Cloud Foundry为每种主流编程语言都定义一种打包格式,“cf push” = 用户把应用的可执行文件和启动脚本打进一个压缩包内,上传到云上Cloud Foundry存储。
38+
39+
接着,Cloud Foundry会通过调度器选择一个可运行该应用的VM,然后通知这个机器上的Agent把应用压缩包下载下来启动。
40+
41+
由于需要在一个VM上启动多个来自不同用户的应用,Cloud Foundry会调用os的Cgroups和Namespace机制,为每个应用单独创建一个“沙盒”隔离环境,在“沙盒”中启动这些应用进程。就实现多个用户的应用互不干涉在VM里批量、自动运行。
42+
43+
**这就是PaaS项目最核心的能力**。这些Cloud Foundry用来运行应用的隔离环境或者说“沙盒”,就是所谓“容器”。
44+
45+
而Docker项目本质和Cloud Foundry容器没啥不同,所以发布不久,Cloud Foundry首席产品经理James Bayer就在社区做详细对比,告诉用户Docker只是一个同样使用Cgroups和Namespace实现的“沙盒”,无黑科技,无需特别关注。
46+
47+
但Docker项目迅速崛起,如此之快,以至于Cloud Foundry及所有PaaS社区还没来得及成为其竞争对手,就直接出局。Docker项目确实与Cloud Foundry容器在大部分功能和实现原理一致,可偏偏就是这剩下的一小部分不一样功能,成为Docker项目之后“呼风唤雨”的宝术。
48+
49+
## 2 Docker镜像
50+
51+
### 2.1 打包可太烦了
52+
53+
PaaS能帮助用户大规模部署应用到集群里,是因其提供一套**应用打包**功能。打包功能恰好成了PaaS日后不断遭到用户诟病的“软肋”。
54+
一旦用上PaaS,用户须为每种语言、每种框架,甚至每个版本的应用维护一个打好的包。这打包过程,无章法可循。更麻烦的,明明在本地运行好,却要做很多修改和配置工作才能在PaaS运行。而这些修改和配置,并无经验可借鉴,基本靠试错,直到摸清楚本地应用和远端PaaS匹配的“脾气”。最后就是,“cf push”确实一键部署,但为实现这一键部署,用户为每个应用打包工作一波三折,费尽心力。
55+
56+
### 2.2 Docker镜像
57+
58+
就是解决打包这根本问题。Docker镜像就是个压缩包,但这压缩包内容比PaaS的应用可执行文件+启停脚本的组合丰富多了。大多Docker镜像直接由一个完整os的所有文件和目录构成,所以这个压缩包里的内容跟你本地开发和测试环境用的os一样。
59+
60+
假设你的应用在本地运行时,能看见环境是CentOS 7.2的所有文件和目录,那只要用CentOS 7.2的ISO做个压缩包,再把你的应用可执行文件也压缩进去,无论在哪解压这压缩包,都可得到与你本地测试时一样的环境。当然,你的应用也在里面!
61+
62+
这就是Docker镜像最厉害之处:有这压缩包,你就能用某种技术创建一个“沙盒”,在“沙盒”中解压这压缩包,然后运行你的程序。
63+
更重要的,这压缩包有完整的os文件和目录,即包含应用运行所需所有依赖,所以你可先用这压缩包在本地开发测试,再把压缩包上传云端运行。在这过程,无需新增任何配置或修改,因为这压缩包赋予你极宝贵能力:**本地环境和云端环境一致**!这就是Docker镜像的精髓。
64+
65+
有Docker镜像,PaaS最核心的打包系统一下就无用武之地,最让用户抓狂的打包过程也消失了。当今互联网,Docker镜像需要的os文件和目录唾手可得。只要提供一个下载好的os文件与目录,然后使用它制作一个压缩包即可,这命令就是:
66+
67+
```bash
68+
docker build "我的镜像"
69+
```
70+
71+
一旦镜像制作完成,用户就能让Docker创建一个“沙盒”来解压这个镜像,然后在“沙盒”中运行自己的应用:
72+
73+
```bash
74+
$ docker run "我的镜像"
75+
```
76+
77+
docker run创建的“沙盒”,也是使用Cgroups、amespace机制创建出来的隔离环境。
78+
79+
## 3 便利的打包机制
80+
81+
直接打包应用运行所需整个os,保证本地和云端环境一致,避免用户通过“试错”匹配两种运行环境差异痛苦。
82+
83+
Docker项目固然解决应用打包难题,但并不能代替PaaS完成大规模部署应用的职责。可惜考虑到:
84+
85+
- Docker公司是一个与自己有潜在竞争关系的商业实体
86+
- 对Docker项目普及程度错判
87+
88+
Cloud Foundry项目没第一时间使用Docker作为自己的核心依赖,去替换自己饱受诟病的打包流程。反倒一些创业公司都第一时间推出Docker容器集群管理开源项目(如Deis和Flynn),它们一般称自己为CaaS,即Container-as-a-Service,用来跟“过时”PaaS划清界限。
89+
90+
而2014年底DockerCon,Docker公司雄心勃勃对外发布自研“Docker原生”容器集群管理项目Swarm,将这波“CaaS”推向高潮,更寄托整个Docker公司重新定义PaaS的宏愿。
91+
92+
PaaS日渐深入人心,Cloud Foundry为首传统PaaS,开始蓄力基础设施领域的**平台化****PaaS化**,于是发现
93+
94+
## 4 PaaS问题:如何给应用打包?
95+
96+
Cloud Foundry/OpenShift/Clodify都没答案,走向碎片化歪路。名不见经传PaaS创业公司dotCloud却选择开源自研容器项目**Docker**。就这样一个平淡无奇技术,开启“Docker”新时代。
97+
98+
公司最重要战略之一:坚持**把“开发者”群体放在至高位置**。Docker项目推广策略从一开始就呈现出一副“憨态可掬”姿态,把每位后端技术人员(而非资本家)作为主要传播对象。简洁UI,有趣demo,“1分钟部署一个WordPress网站”“3分钟部署一个Nginx集群”,这种同开发者之间与生俱来的亲近关系,使Docker项目迅速成为全世界会议上最受追捧新星。
99+
100+
> Docker项目给后端开发者提供了走向聚光灯的机会。如Cgroups、Namespace这种存在多年却很少被关心特性,在2014年和2015年频繁入选各大技术会议分享议题,就因听众想知道Docker原理。
101+
102+
- 解决了应用打包和发布这一困扰运维人员多年的技术难题
103+
- 第一次把一个纯后端的技术概念,通过友好的设计和封装,交到开发者手里
104+
105+
无需精通TCP/IP/Linux内核原理,一个前端或后端工程师,都会对如何把自己的代码打包成一个随处可运行的Docker镜像充满好奇和兴趣。
106+
107+
解决应用打包,同开发者与生俱来的亲密关系,再加上PaaS概念已深入人心的契机,成为Docker项目一炮而红重要原因。一个以“容器”为中心的、全新的云计算市场正呼之欲出,而作为这个生态的一手缔造者,此时dotCloud突然宣布将公司名称改为 Docker。
108+
109+
## 5 发布Swarm
110+
111+
2014发布,虽通过“容器”完成对经典PaaS“降维打击”,但Docker项目和Docker公司还得回到PaaS项目原本躬耕多年的田地:如何让开发者把应用部署在我的项目?
112+
113+
Docker项目发布之初就全面发力,从技术/社区/商业/市场全方位争取到的开发者群体,为此后吸引整个生态到自家“PaaS”上的一个铺垫。**只是这时,“PaaS”定义已全然不是Cloud Foundry描述,而变成一套以Docker容器为技术核心,以Docker镜像为打包标准、全新“容器化”思路****这正是Docker项目一开始悉心运作“容器化”理念和经营整个Docker生态的主要目的**
114+
115+
Swarm项目就是接下来承接Docker公司所有努力的关键。
116+
117+
## 6 总结
118+
119+
### Docker项目迅速崛起的原因
120+
121+
- Docker镜像通过技术手段解决了PaaS的根本性问题
122+
- Docker容器同开发者之间有着与生俱来的密切关系
123+
- PaaS概念已经深入人心的完美契机。
124+
125+
2014年底的DockerCon欧洲峰会,才正式拉开Docker公司扩张序幕。
126+
127+
> 参考
128+
>
129+
> - docker官网
130+
> - Docker实战
131+
> - 深入剖析Kubernetes

0 commit comments

Comments
 (0)