Skip to content

Commit e669ee0

Browse files
committed
Use a better structure
1 parent fdb879d commit e669ee0

167 files changed

Lines changed: 2462 additions & 2462 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
# 快速上手 (5分钟)
1+
## 快速上手 (5分钟)
22

33
本节将通过一个简单的 Web 应用例子,带你快速体验 Docker 的核心流程:构建镜像、运行容器。
44

5-
## 1. 准备代码
5+
### 1. 准备代码
66

77
创建一个名为 `hello-docker` 的文件夹,并在其中创建一个 `index.html` 文件:
88

99
```html
1010
<h1>Hello, Docker!</h1>
1111
```
1212

13-
## 2. 编写 Dockerfile
13+
### 2. 编写 Dockerfile
1414

1515
在同级目录下创建一个名为 `Dockerfile` (无后缀) 的文件:
1616

@@ -19,7 +19,7 @@ FROM nginx:alpine
1919
COPY index.html /usr/share/nginx/html/index.html
2020
```
2121

22-
## 3. 构建镜像
22+
### 3. 构建镜像
2323

2424
打开终端,进入该目录,执行构建命令:
2525

@@ -31,7 +31,7 @@ $ docker build -t my-hello-world .
3131
* `-t my-hello-world`: 给镜像起个名字(标签)
3232
* `.`: 指定上下文路径为当前目录
3333

34-
## 4. 运行容器
34+
### 4. 运行容器
3535

3636
使用刚才构建的镜像启动一个容器:
3737

@@ -43,22 +43,22 @@ $ docker run -d -p 8080:80 my-hello-world
4343
* `-d`: 后台运行
4444
* `-p 8080:80`: 将宿主机的 8080 端口映射到容器的 80 端口
4545

46-
## 5. 访问测试
46+
### 5. 访问测试
4747

4848
打开浏览器访问 [http://localhost:8080](http://localhost:8080),你应该能看到 "Hello, Docker!"。
4949

50-
## 6. 清理
50+
### 6. 清理
5151

5252
停止并删除容器:
5353

5454
```bash
55-
# 查看正在运行的容器 ID
55+
## 查看正在运行的容器 ID
5656
$ docker ps
5757

58-
# 停止容器
58+
## 停止容器
5959
$ docker stop <CONTAINER_ID>
6060

61-
# 删除容器
61+
## 删除容器
6262
$ docker rm <CONTAINER_ID>
6363
```
6464

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# 什么是 Docker
1+
## 什么是 Docker
22

3-
## 一句话理解 Docker
3+
### 一句话理解 Docker
44

55
> **Docker 是一种轻量级的虚拟化技术,它让应用程序及其依赖环境可以被打包成一个标准化的单元,在任何地方都能一致地运行。**
66
@@ -10,7 +10,7 @@
1010

1111
Docker 做的事情类似:无论你的应用是用 Python、Java、Node.js 还是其他语言写的,无论它需要什么样的依赖库和环境,一旦被打包成 Docker 镜像,就可以用同样的方式在任何支持 Docker 的机器上运行。
1212

13-
## Docker 的核心价值
13+
### Docker 的核心价值
1414

1515
笔者认为,Docker 解决的是软件开发中最古老的问题之一:**"在我机器上明明能跑啊!"**
1616

@@ -37,25 +37,25 @@ Docker 做的事情类似:无论你的应用是用 Python、Java、Node.js 还
3737
运行正常 运行正常!
3838
```
3939

40-
## Docker vs 虚拟机
40+
### Docker vs 虚拟机
4141

4242
很多人第一次接触 Docker 时会问:**"这不就是虚拟机吗?"**
4343

4444
答案是:**不是,而且差别很大。**
4545

46-
### 传统虚拟机
46+
#### 传统虚拟机
4747

4848
传统虚拟机技术是虚拟出一套完整的硬件,在其上运行一个完整的操作系统,再在该系统上运行应用:
4949

5050
![传统虚拟化](../_images/virtualization.png)
5151

52-
### Docker 容器
52+
#### Docker 容器
5353

5454
而 Docker 容器内的应用直接运行于宿主的内核,容器内没有自己的内核,也没有进行硬件虚拟:
5555

5656
![Docker](../_images/docker.png)
5757

58-
### 关键区别
58+
#### 关键区别
5959

6060
| 特性 | Docker 容器 | 传统虚拟机 |
6161
|------|-------------|------------|
@@ -67,7 +67,7 @@ Docker 做的事情类似:无论你的应用是用 Python、Java、Node.js 还
6767

6868
> 笔者经常用这个类比来解释:虚拟机像是每个应用都住在一栋独立的房子里(有自己的地基、水电系统),而容器像是大家住在同一栋公寓楼里的不同房间(共享地基和水电系统,但各自独立)。
6969
70-
## Docker 的技术基础
70+
### Docker 的技术基础
7171

7272
Docker 使用 [Go 语言](https://golang.google.cn/) 开发,基于 Linux 内核的以下技术:
7373

@@ -77,7 +77,7 @@ Docker 使用 [Go 语言](https://golang.google.cn/) 开发,基于 Linux 内
7777

7878
> 如果你对这些底层技术感兴趣,可以阅读本书的[底层实现](../13_implementation/README.md)章节。
7979
80-
### Docker 架构演进
80+
#### Docker 架构演进
8181

8282
Docker 的底层实现经历了多次演进:
8383

@@ -101,7 +101,7 @@ LXC ──→ libcontainer ──→ runC ──→ containerd + runC
101101
102102
> `containerd` 是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。
103103
104-
## Docker 的历史与生态
104+
### Docker 的历史与生态
105105

106106
**Docker** 最初是 `dotCloud` 公司创始人 [Solomon Hykes](https://github.com/shykes) 在法国期间发起的一个公司内部项目,于 [2013 年 3 月以 Apache 2.0 授权协议开源](https://en.wikipedia.org/wiki/Docker_(software))
107107

@@ -114,11 +114,11 @@ Docker 的发展历程:
114114

115115
Docker 的成功推动了整个容器生态的发展,催生了 Kubernetes、Podman 等众多相关项目。笔者认为,Docker 最大的贡献不仅是技术本身,更是它**让容器技术从系统管理员的工具变成了每个开发者都能使用的标准工具**
116116

117-
## 本章小结
117+
### 本章小结
118118

119119
- Docker 是一种轻量级虚拟化技术,核心价值是**环境一致性**
120120
- 与虚拟机相比,Docker 更轻量、更快速、资源利用率更高
121121
- Docker 基于 Linux 内核的 Namespace、Cgroups 和 Union FS 技术
122122
- Docker 推动了容器技术的标准化(OCI)和生态发展
123123

124-
接下来,让我们了解[为什么要使用 Docker](why.md)
124+
接下来,让我们了解[为什么要使用 Docker](1.3_why.md)
Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# 为什么要使用 Docker?
1+
## 为什么要使用 Docker?
22

33
在回答"为什么用 Docker"之前,笔者想先问一个问题:**你有没有经历过这些场景?**
44

5-
## 没有 Docker 的世界
5+
### 没有 Docker 的世界
66

7-
### 场景一:"在我电脑上明明能跑"
7+
#### 场景一:"在我电脑上明明能跑"
88

99
```
1010
周五下午 5:00
@@ -21,7 +21,7 @@
2121
- 某些环境变量没有设置
2222
- "哦,忘了说我本地装了个 XXX"
2323

24-
### 场景二:环境配置的噩梦
24+
#### 场景二:环境配置的噩梦
2525

2626
```
2727
新同事入职
@@ -32,7 +32,7 @@
3232
└── Day 5:终于能跑起来了!但不知道为什么……
3333
```
3434

35-
### 场景三:服务器迁移的恐惧
35+
#### 场景三:服务器迁移的恐惧
3636

3737
```
3838
运维:"我们需要把服务迁移到新服务器"
@@ -41,9 +41,9 @@
4141
所有人:😱
4242
```
4343

44-
## Docker 如何解决这些问题
44+
### Docker 如何解决这些问题
4545

46-
### 核心理念:一次构建,到处运行
46+
#### 核心理念:一次构建,到处运行
4747

4848
```
4949
开发环境 测试环境 生产环境
@@ -57,9 +57,9 @@
5757
完全一致 完全一致 完全一致
5858
```
5959

60-
## Docker 的核心优势
60+
### Docker 的核心优势
6161

62-
### 1. 环境一致性
62+
#### 1. 环境一致性
6363

6464
Docker 镜像包含了应用运行所需的**一切**:代码、运行时、系统工具、库、配置。这意味着:
6565

@@ -68,13 +68,13 @@ Docker 镜像包含了应用运行所需的**一切**:代码、运行时、系
6868
- ✅ 新人入职,一条命令就能启动开发环境
6969

7070
```bash
71-
# 新同事入职第一天
71+
## 新同事入职第一天
7272
$ git clone https://github.com/company/project.git
7373
$ docker compose up
74-
# 完整的开发环境就准备好了
74+
## 完整的开发环境就准备好了
7575
```
7676

77-
### 2. 秒级启动
77+
#### 2. 秒级启动
7878

7979
传统虚拟机启动需要几分钟(引导操作系统),而 Docker 容器启动通常只需要**几秒甚至几百毫秒**
8080

@@ -91,7 +91,7 @@ $ docker compose up
9191
- **弹性扩容**:流量高峰时能快速启动更多实例
9292
- **开发体验**:快速重启服务进行调试
9393

94-
### 3. 资源效率
94+
#### 3. 资源效率
9595

9696
Docker 容器共享宿主机内核,无需为每个应用运行完整的操作系统。
9797

@@ -119,7 +119,7 @@ Docker 方案:
119119
实际可用于应用:约 60GB ✅
120120
```
121121

122-
### 4. 持续交付和部署
122+
#### 4. 持续交付和部署
123123

124124
Docker 完美契合 DevOps 的工作流程:
125125

@@ -131,12 +131,12 @@ Docker 完美契合 DevOps 的工作流程:
131131
push build 运行测试 更新
132132
```
133133

134-
使用 [Dockerfile](../04_image/build.md) 定义镜像构建过程,使得:
134+
使用 [Dockerfile](../04_image/4.5_build.md) 定义镜像构建过程,使得:
135135
- 构建过程**可重复、可追溯**
136136
- 任何人都能从代码重建完全相同的镜像
137137
- 配合 [GitHub Actions](../14_cases/ci/actions/README.md) 等 CI 系统实现自动化
138138

139-
### 5. 轻松迁移
139+
#### 5. 轻松迁移
140140

141141
Docker 可以在几乎任何平台上运行:
142142
- ✅ 本地开发机(macOS、Windows、Linux)
@@ -146,7 +146,7 @@ Docker 可以在几乎任何平台上运行:
146146

147147
**同一个镜像,在任何地方运行结果都一致。** 这让应用迁移变得前所未有的简单。
148148

149-
### 6. 微服务架构的基石
149+
#### 6. 微服务架构的基石
150150

151151
现代微服务架构几乎都依赖容器技术。Docker 让你可以:
152152

@@ -168,27 +168,27 @@ Docker 可以在几乎任何平台上运行:
168168
└───────────────────────────────────────────────────┘
169169
```
170170

171-
## Docker 不适合的场景
171+
### Docker 不适合的场景
172172

173173
笔者认为,技术选型要客观。Docker 并非银弹,以下场景可能不太适合:
174174

175-
### 1. 需要完全隔离的场景
175+
#### 1. 需要完全隔离的场景
176176

177177
容器共享宿主机内核,隔离性不如虚拟机。如果你需要运行不受信任的代码,虚拟机可能更安全。
178178

179-
### 2. 需要特殊内核的场景
179+
#### 2. 需要特殊内核的场景
180180

181181
容器使用宿主机内核。如果应用需要特定版本的内核或内核模块,可能需要虚拟机。
182182

183-
### 3. Windows 原生应用
183+
#### 3. Windows 原生应用
184184

185185
虽然 Docker 支持 Windows 容器,但生态不如 Linux 容器成熟。传统 Windows 应用的容器化仍有挑战。
186186

187-
### 4. 桌面应用
187+
#### 4. 桌面应用
188188

189189
Docker 主要面向服务端应用。桌面 GUI 应用的容器化虽然可行,但通常得不偿失。
190190

191-
## 与传统虚拟机的对比总结
191+
### 与传统虚拟机的对比总结
192192

193193
| 特性 | Docker 容器 | 传统虚拟机 |
194194
|:------|:-----------|:-----------|
@@ -199,7 +199,7 @@ Docker 主要面向服务端应用。桌面 GUI 应用的容器化虽然可行
199199
| 隔离性 | 进程级别 | 完全隔离 |
200200
| 最佳场景 | 微服务、CI/CD、开发环境 | 多租户、高安全需求 |
201201

202-
## 本章小结
202+
### 本章小结
203203

204204
Docker 的核心价值可以用一句话概括:**让应用的开发、测试、部署保持一致,同时极大提高资源利用效率。**
205205

01_introduction/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
# 简介
1+
# 第一章 Docker 简介
22

33
本章将带领你进入 **Docker** 的世界。
44

55
## 本章内容
66

7-
* [什么是 Docker](what.md)
7+
* [什么是 Docker](1.2_what.md)
88
* 介绍 Docker 的起源、发展历程以及其背后的核心技术(Cgroups, Namespaces, UnionFS)。
99
* 了解 Docker 是如何改变软件交付方式的。
1010

11-
* [为什么要用 Docker](why.md)
11+
* [为什么要用 Docker](1.3_why.md)
1212
* 对比传统虚拟机技术,阐述 Docker 在启动速度、资源利用率、交付效率等方面的巨大优势。
1313
* 探讨 Docker 在 DevOps、微服务架构中的关键作用。
1414

0 commit comments

Comments
 (0)