Fix space with bold markdown

This commit is contained in:
Baohua Yang
2026-02-21 17:39:37 -08:00
parent 6aa7a51fef
commit 2ab40eacc0
64 changed files with 148 additions and 301 deletions

View File

@@ -4,11 +4,11 @@ Docker 镜像作为容器运行的基石,其设计理念和实现机制至关
### 一句话理解镜像
> **Docker 镜像是一个只读的模板包含了运行应用所需的一切代码运行时环境变量和配置文件**如果用一个类比**镜像就像是一张光盘或 ISO 文件**你可以用同一张光盘在不同电脑上安装系统而光盘本身不会被修改同样一个镜像可以创建多个容器而镜像本身保持不变
> **Docker 镜像是一个只读的模板包含了运行应用所需的一切代码运行时环境变量和配置文件** 如果用一个类比**镜像就像是一张光盘或 ISO 文件**你可以用同一张光盘在不同电脑上安装系统而光盘本身不会被修改同样一个镜像可以创建多个容器而镜像本身保持不变
### 镜像与操作系统的关系
我们都知道操作系统分为**内核****用户空间**
我们都知道操作系统分为 **内核** **用户空间**
```mermaid
flowchart TD
@@ -25,9 +25,9 @@ flowchart TD
UserSpace --- KernelSpace
```
对于 Linux 而言内核启动后会挂载 `root` 文件系统来提供用户空间支持**Docker 镜像**本质上就是一个 `root` 文件系统
对于 Linux 而言内核启动后会挂载 `root` 文件系统来提供用户空间支持**Docker 镜像** 本质上就是一个 `root` 文件系统
例如官方镜像 `ubuntu:24.04` 包含了一套完整的 Ubuntu 24.04 最小系统的 root 文件系统**不包含 Linux 内核** (因为容器共享宿主机的内核)
例如官方镜像 `ubuntu:24.04` 包含了一套完整的 Ubuntu 24.04 最小系统的 root 文件系统 **不包含 Linux 内核** (因为容器共享宿主机的内核)
### 镜像包含什么
@@ -40,9 +40,9 @@ Docker 镜像是一个特殊的文件系统,包含:
| **配置文件** | nginx.confmy.cnf |
| **环境变量** | PATHLANG 等预设值 |
| **元数据**| 启动命令暴露端口数据卷定义 |**关键特性**
- 镜像是**只读**
- 镜像**不包含**动态数据
- 镜像构建后**内容不会改变**
- 镜像是 **只读**
- 镜像 **不包含** 动态数据
- 镜像构建后 **内容不会改变**
### 分层存储镜像的核心设计
@@ -110,7 +110,7 @@ flowchart TD
#### 分层存储的 陷阱
> **笔者特别提醒**理解这一点可以帮你避免构建出臃肿的镜像**关键原理**每一层的文件变化会被记录**删除操作只是标记不会真正减小镜像体积**
> **笔者特别提醒**理解这一点可以帮你避免构建出臃肿的镜像**关键原理**每一层的文件变化会被记录 **删除操作只是标记不会真正减小镜像体积**
```docker
## 错误示范 ❌

View File

@@ -4,7 +4,7 @@
### 一句话理解容器
> **容器是镜像的运行实例如果把镜像比作程序那么容器就是进程**用面向对象编程的术语来说**镜像是类 (Class)容器是对象 (Instance)**
> **容器是镜像的运行实例如果把镜像比作程序那么容器就是进程** 用面向对象编程的术语来说**镜像是类 (Class)容器是对象 (Instance)**
- 一个镜像可以创建多个容器
- 每个容器相互独立互不影响
@@ -78,7 +78,7 @@ flowchart TD
#### 镜像层 + 容器层
当容器运行时Docker 会在镜像的只读层之上创建一个**可写层** (容器存储层)
当容器运行时Docker 会在镜像的只读层之上创建一个 **可写层** (容器存储层)
```mermaid
flowchart TD
@@ -95,11 +95,11 @@ flowchart TD
当容器需要修改镜像层中的文件时
1. Docker 将该文件**复制**到容器存储层
1. Docker 将该文件 **复制** 到容器存储层
2. 在容器层中进行修改
3. 原始镜像层保持不变
```
```bash
读取文件:直接从镜像层读取(共享,高效)
修改文件:复制到容器层,然后修改(只有这个容器能看到修改)
```
@@ -125,7 +125,7 @@ $ docker rm abc123
#### 正确的数据持久化方式
按照 Docker 最佳实践容器存储层应该保持**无状态**需要持久化的数据应该使用
按照 Docker 最佳实践容器存储层应该保持 **无状态**需要持久化的数据应该使用
| 方式 | 说明 | 适用场景 |
|------|------|---------|
@@ -142,7 +142,7 @@ $ docker run -v mydata:/var/lib/mysql mysql
$ docker run -v /host/path:/container/path nginx
```
这些位置的读写**会跳过容器存储层**直接写入宿主机性能更好也不会随容器删除而丢失
这些位置的读写 **会跳过容器存储层**直接写入宿主机性能更好也不会随容器删除而丢失
### 容器的生命周期

View File

@@ -48,14 +48,14 @@ flowchart TB
| 概念 | 说明 | 示例 |
|------|------|------|
| **Registry** | 存储镜像的服务 | Docker Hubghcr.io |
| **Repository (仓库) ** | 同一软件的镜像集合 | `nginx``mysql``mycompany/myapp` |
| **Tag (标签) ** | 仓库内的版本标识 | `latest``1.25``alpine` |
| **Repository (仓库)** | 同一软件的镜像集合 | `nginx``mysql``mycompany/myapp` |
| **Tag (标签)** | 仓库内的版本标识 | `latest``1.25``alpine` |
#### 镜像的完整名称
一个完整的 Docker 镜像名称由 Registry 地址用户名/组织名仓库名和标签组成了解其结构有助于我们更准确地定位镜像基本格式如下
```
```bash
[registry地址/][用户名/]仓库名[:标签]
```
@@ -128,7 +128,7 @@ $ docker push username/myapp:v1.0
### 镜像加速器
由于网络原因在国内直接访问 Docker Hub 可能会很慢可以配置**镜像加速器** (Registry Mirror) 来加速下载配置示例如下
由于网络原因在国内直接访问 Docker Hub 可能会很慢可以配置 **镜像加速器** (Registry Mirror) 来加速下载配置示例如下
```json
// /etc/docker/daemon.json
@@ -190,7 +190,7 @@ $ docker pull localhost:5000/myapp:v1.0
如图 2-3 所示镜像从开发环境构建后推送到 Registry再由生产环境拉取并运行
```
```bash
开发者机器 Registry 生产服务器
│ │ │
│ docker build │ │

View File

@@ -38,8 +38,8 @@
| 概念 | 要点 |
|------|------|
| **Registry** | 存储和分发镜像的服务 |
| **仓库 (Repository) ** | 同一软件的镜像集合 |
| **标签 (Tag) ** | 版本标识默认为 latest |
| **仓库 (Repository)** | 同一软件的镜像集合 |
| **标签 (Tag)** | 版本标识默认为 latest |
| **Docker Hub** | 默认的公共 Registry |
| **私有 Registry** | 企业内部使用推荐 Harbor |