Use a better structure

This commit is contained in:
Baohua Yang
2026-02-09 09:32:05 -08:00
parent fdb879dcf2
commit e669ee0fe8
167 changed files with 2462 additions and 2462 deletions

View File

@@ -1,8 +1,8 @@
# 快速上手 (5分钟)
## 快速上手 (5分钟)
本节将通过一个简单的 Web 应用例子带你快速体验 Docker 的核心流程构建镜像运行容器
## 1. 准备代码
### 1. 准备代码
创建一个名为 `hello-docker` 的文件夹并在其中创建一个 `index.html` 文件
@@ -10,7 +10,7 @@
<h1>Hello, Docker!</h1>
```
## 2. 编写 Dockerfile
### 2. 编写 Dockerfile
在同级目录下创建一个名为 `Dockerfile` (无后缀) 的文件
@@ -19,7 +19,7 @@ FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
```
## 3. 构建镜像
### 3. 构建镜像
打开终端进入该目录执行构建命令
@@ -31,7 +31,7 @@ $ docker build -t my-hello-world .
* `-t my-hello-world`: 给镜像起个名字标签
* `.`: 指定上下文路径为当前目录
## 4. 运行容器
### 4. 运行容器
使用刚才构建的镜像启动一个容器
@@ -43,22 +43,22 @@ $ docker run -d -p 8080:80 my-hello-world
* `-d`: 后台运行
* `-p 8080:80`: 将宿主机的 8080 端口映射到容器的 80 端口
## 5. 访问测试
### 5. 访问测试
打开浏览器访问 [http://localhost:8080](http://localhost:8080),你应该能看到 "Hello, Docker!"。
## 6. 清理
### 6. 清理
停止并删除容器
```bash
# 查看正在运行的容器 ID
## 查看正在运行的容器 ID
$ docker ps
# 停止容器
## 停止容器
$ docker stop <CONTAINER_ID>
# 删除容器
## 删除容器
$ docker rm <CONTAINER_ID>
```

View File

@@ -1,6 +1,6 @@
# 什么是 Docker
## 什么是 Docker
## 一句话理解 Docker
### 一句话理解 Docker
> **Docker 是一种轻量级的虚拟化技术它让应用程序及其依赖环境可以被打包成一个标准化的单元在任何地方都能一致地运行**
@@ -10,7 +10,7 @@
Docker 做的事情类似无论你的应用是用 PythonJavaNode.js 还是其他语言写的无论它需要什么样的依赖库和环境一旦被打包成 Docker 镜像就可以用同样的方式在任何支持 Docker 的机器上运行
## Docker 的核心价值
### Docker 的核心价值
笔者认为Docker 解决的是软件开发中最古老的问题之一**"在我机器上明明能跑啊!"**
@@ -37,25 +37,25 @@ Docker 做的事情类似:无论你的应用是用 Python、Java、Node.js 还
运行正常 运行正常
```
## Docker vs 虚拟机
### Docker vs 虚拟机
很多人第一次接触 Docker 时会问**"这不就是虚拟机吗?"**
答案是**不是而且差别很大**
### 传统虚拟机
#### 传统虚拟机
传统虚拟机技术是虚拟出一套完整的硬件在其上运行一个完整的操作系统再在该系统上运行应用
![传统虚拟化](../_images/virtualization.png)
### Docker 容器
#### Docker 容器
Docker 容器内的应用直接运行于宿主的内核容器内没有自己的内核也没有进行硬件虚拟
![Docker](../_images/docker.png)
### 关键区别
#### 关键区别
| 特性 | Docker 容器 | 传统虚拟机 |
|------|-------------|------------|
@@ -67,7 +67,7 @@ Docker 做的事情类似:无论你的应用是用 Python、Java、Node.js 还
> 笔者经常用这个类比来解释虚拟机像是每个应用都住在一栋独立的房子里有自己的地基水电系统而容器像是大家住在同一栋公寓楼里的不同房间共享地基和水电系统但各自独立
## Docker 的技术基础
### Docker 的技术基础
Docker 使用 [Go 语言](https://golang.google.cn/) 开发,基于 Linux 内核的以下技术:
@@ -77,7 +77,7 @@ Docker 使用 [Go 语言](https://golang.google.cn/) 开发,基于 Linux 内
> 如果你对这些底层技术感兴趣可以阅读本书的[底层实现](../13_implementation/README.md)章节
### Docker 架构演进
#### Docker 架构演进
Docker 的底层实现经历了多次演进
@@ -101,7 +101,7 @@ LXC ──→ libcontainer ──→ runC ──→ containerd + runC
> `containerd` 是一个守护程序它管理容器生命周期提供了在一个节点上执行容器和管理镜像的最小功能集
## Docker 的历史与生态
### Docker 的历史与生态
**Docker** 最初是 `dotCloud` 公司创始人 [Solomon Hykes](https://github.com/shykes) 在法国期间发起的一个公司内部项目,于 [2013 年 3 月以 Apache 2.0 授权协议开源](https://en.wikipedia.org/wiki/Docker_(software))。
@@ -114,11 +114,11 @@ Docker 的发展历程:
Docker 的成功推动了整个容器生态的发展催生了 KubernetesPodman 等众多相关项目笔者认为Docker 最大的贡献不仅是技术本身更是它**让容器技术从系统管理员的工具变成了每个开发者都能使用的标准工具**
## 本章小结
### 本章小结
- Docker 是一种轻量级虚拟化技术核心价值是**环境一致性**
- 与虚拟机相比Docker 更轻量更快速资源利用率更高
- Docker 基于 Linux 内核的 NamespaceCgroups Union FS 技术
- Docker 推动了容器技术的标准化OCI和生态发展
接下来让我们了解[为什么要使用 Docker](why.md)
接下来让我们了解[为什么要使用 Docker](1.3_why.md)

View File

@@ -1,10 +1,10 @@
# 为什么要使用 Docker
## 为什么要使用 Docker
在回答"为什么用 Docker"之前笔者想先问一个问题**你有没有经历过这些场景**
## 没有 Docker 的世界
### 没有 Docker 的世界
### 场景一"在我电脑上明明能跑"
#### 场景一"在我电脑上明明能跑"
```
周五下午 5:00
@@ -21,7 +21,7 @@
- 某些环境变量没有设置
- "哦,忘了说我本地装了个 XXX"
### 场景二环境配置的噩梦
#### 场景二环境配置的噩梦
```
新同事入职
@@ -32,7 +32,7 @@
Day 5终于能跑起来了但不知道为什么
```
### 场景三服务器迁移的恐惧
#### 场景三服务器迁移的恐惧
```
运维"我们需要把服务迁移到新服务器"
@@ -41,9 +41,9 @@
所有人😱
```
## Docker 如何解决这些问题
### Docker 如何解决这些问题
### 核心理念一次构建到处运行
#### 核心理念一次构建到处运行
```
开发环境 测试环境 生产环境
@@ -57,9 +57,9 @@
完全一致 完全一致 完全一致
```
## Docker 的核心优势
### Docker 的核心优势
### 1. 环境一致性
#### 1. 环境一致性
Docker 镜像包含了应用运行所需的**一切**代码运行时系统工具配置这意味着
@@ -68,13 +68,13 @@ Docker 镜像包含了应用运行所需的**一切**:代码、运行时、系
- 新人入职一条命令就能启动开发环境
```bash
# 新同事入职第一天
## 新同事入职第一天
$ git clone https://github.com/company/project.git
$ docker compose up
# 完整的开发环境就准备好了
## 完整的开发环境就准备好了
```
### 2. 秒级启动
#### 2. 秒级启动
传统虚拟机启动需要几分钟引导操作系统 Docker 容器启动通常只需要**几秒甚至几百毫秒**
@@ -91,7 +91,7 @@ $ docker compose up
- **弹性扩容**流量高峰时能快速启动更多实例
- **开发体验**快速重启服务进行调试
### 3. 资源效率
#### 3. 资源效率
Docker 容器共享宿主机内核无需为每个应用运行完整的操作系统
@@ -119,7 +119,7 @@ Docker 方案:
实际可用于应用 60GB
```
### 4. 持续交付和部署
#### 4. 持续交付和部署
Docker 完美契合 DevOps 的工作流程
@@ -131,12 +131,12 @@ Docker 完美契合 DevOps 的工作流程:
push build 运行测试 更新
```
使用 [Dockerfile](../04_image/build.md) 定义镜像构建过程使得
使用 [Dockerfile](../04_image/4.5_build.md) 定义镜像构建过程使得
- 构建过程**可重复可追溯**
- 任何人都能从代码重建完全相同的镜像
- 配合 [GitHub Actions](../14_cases/ci/actions/README.md) CI 系统实现自动化
### 5. 轻松迁移
#### 5. 轻松迁移
Docker 可以在几乎任何平台上运行
- 本地开发机macOSWindowsLinux
@@ -146,7 +146,7 @@ Docker 可以在几乎任何平台上运行:
**同一个镜像在任何地方运行结果都一致** 这让应用迁移变得前所未有的简单
### 6. 微服务架构的基石
#### 6. 微服务架构的基石
现代微服务架构几乎都依赖容器技术Docker 让你可以
@@ -168,27 +168,27 @@ Docker 可以在几乎任何平台上运行:
```
## Docker 不适合的场景
### Docker 不适合的场景
笔者认为技术选型要客观Docker 并非银弹以下场景可能不太适合
### 1. 需要完全隔离的场景
#### 1. 需要完全隔离的场景
容器共享宿主机内核隔离性不如虚拟机如果你需要运行不受信任的代码虚拟机可能更安全
### 2. 需要特殊内核的场景
#### 2. 需要特殊内核的场景
容器使用宿主机内核如果应用需要特定版本的内核或内核模块可能需要虚拟机
### 3. Windows 原生应用
#### 3. Windows 原生应用
虽然 Docker 支持 Windows 容器但生态不如 Linux 容器成熟传统 Windows 应用的容器化仍有挑战
### 4. 桌面应用
#### 4. 桌面应用
Docker 主要面向服务端应用桌面 GUI 应用的容器化虽然可行但通常得不偿失
## 与传统虚拟机的对比总结
### 与传统虚拟机的对比总结
| 特性 | Docker 容器 | 传统虚拟机 |
|:------|:-----------|:-----------|
@@ -199,7 +199,7 @@ Docker 主要面向服务端应用。桌面 GUI 应用的容器化虽然可行
| 隔离性 | 进程级别 | 完全隔离 |
| 最佳场景 | 微服务CI/CD开发环境 | 多租户高安全需求 |
## 本章小结
### 本章小结
Docker 的核心价值可以用一句话概括**让应用的开发测试部署保持一致同时极大提高资源利用效率**

View File

@@ -1,14 +1,14 @@
# 简介
# 第一章 Docker 简介
本章将带领你进入 **Docker** 的世界
## 本章内容
* [什么是 Docker](what.md)
* [什么是 Docker](1.2_what.md)
* 介绍 Docker 的起源发展历程以及其背后的核心技术Cgroups, Namespaces, UnionFS
* 了解 Docker 是如何改变软件交付方式的
* [为什么要用 Docker](why.md)
* [为什么要用 Docker](1.3_why.md)
* 对比传统虚拟机技术阐述 Docker 在启动速度资源利用率交付效率等方面的巨大优势
* 探讨 Docker DevOps微服务架构中的关键作用