mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +00:00
Refine Docker concepts
This commit is contained in:
@@ -82,24 +82,24 @@ flowchart TD
|
||||
|
||||
#### 分层是如何工作的?
|
||||
|
||||
笔者用一个实际的 Dockerfile 来解释分层:
|
||||
笔者用一个更贴近最佳实践的 Dockerfile 来解释分层:
|
||||
|
||||
```docker
|
||||
FROM ubuntu:24.04 # 第 1 层:基础系统(约 78MB)
|
||||
RUN apt-get update # 第 2 层:更新包索引
|
||||
RUN apt-get install nginx # 第 3 层:安装 nginx
|
||||
COPY app.conf /etc/nginx/ # 第 4 层:复制配置文件
|
||||
FROM ubuntu:24.04 # 第 1 层:基础系统(约 78MB)
|
||||
RUN apt-get update && apt-get install -y nginx # 第 2 层:更新索引并安装 nginx
|
||||
COPY app.conf /etc/nginx/ # 第 3 层:复制配置文件
|
||||
```
|
||||
这里特意把 `apt-get update` 和 `apt-get install` 放在同一个 `RUN` 里,避免构建缓存导致包索引过期。
|
||||
|
||||
构建后的镜像结构:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Layer4["第 4 层: COPY app.conf (只读)<br/>← 最新添加的层"]
|
||||
Layer3["第 3 层: nginx 安装文件 (只读)"]
|
||||
Layer2["第 2 层: apt 缓存更新 (只读)"]
|
||||
Layer3["第 3 层: COPY app.conf (只读)<br/>← 最新添加的层"]
|
||||
Layer2["第 2 层: nginx 安装文件与包索引 (只读)"]
|
||||
Layer1["第 1 层: Ubuntu 基础系统 (只读)<br/>← 基础镜像层"]
|
||||
|
||||
Layer4 --> Layer3 --> Layer2 --> Layer1
|
||||
Layer3 --> Layer2 --> Layer1
|
||||
```
|
||||
每一层的特点:
|
||||
|
||||
@@ -137,7 +137,7 @@ RUN apt-get update && \
|
||||
|
||||
```
|
||||
|
||||
### 2.1.5 查看镜像的分层
|
||||
### 2.1.5 查看镜像的构建历史
|
||||
|
||||
```bash
|
||||
## 查看镜像的历史(每层的构建记录)
|
||||
@@ -152,6 +152,7 @@ a6bd71f48f68 2 weeks ago CMD ["nginx" "-g" "daemon off;"] 0B
|
||||
<missing> 2 weeks ago COPY 30-tune-worker-processes.sh /docker-ent… 4.62kB
|
||||
...
|
||||
```
|
||||
需要注意:`docker history` 展示的是镜像的构建历史。像 `CMD`、`ENTRYPOINT`、`EXPOSE`、`STOPSIGNAL` 这类 `0B` 项主要是镜像配置元数据,并不等同于新增了可见的文件系统内容;真正占用空间的通常是 `RUN`、`COPY`、`ADD` 等带来的文件变化。
|
||||
|
||||
### 2.1.6 镜像的标识
|
||||
|
||||
|
||||
Reference in New Issue
Block a user