mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-24 18:55:31 +00:00
Add blank lines before headers
This commit is contained in:
@@ -115,6 +115,7 @@ flowchart TD
|
||||
> ⚠️ **笔者特别提醒**:理解这一点可以帮你避免构建出臃肿的镜像。**关键原理**:每一层的文件变化会被记录,但 **删除操作只是标记,不会真正减小镜像体积**。
|
||||
|
||||
```docker
|
||||
|
||||
## 错误示范 ❌
|
||||
|
||||
FROM ubuntu:24.04
|
||||
@@ -122,10 +123,12 @@ RUN apt-get update
|
||||
RUN apt-get install -y build-essential # 安装编译工具(约 200MB)
|
||||
RUN make && make install # 编译应用
|
||||
RUN apt-get remove build-essential # 试图删除编译工具
|
||||
|
||||
## 结果:镜像仍然包含 200MB 的编译工具!
|
||||
```
|
||||
|
||||
```docker
|
||||
|
||||
## 正确做法 ✅
|
||||
|
||||
FROM ubuntu:24.04
|
||||
@@ -135,6 +138,7 @@ RUN apt-get update && \
|
||||
apt-get remove -y build-essential && \
|
||||
apt-get autoremove -y && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
## 在同一层完成安装、使用、清理
|
||||
|
||||
```
|
||||
@@ -142,6 +146,7 @@ RUN apt-get update && \
|
||||
#### 查看镜像的分层
|
||||
|
||||
```bash
|
||||
|
||||
## 查看镜像的历史(每层的构建记录)
|
||||
|
||||
$ docker history nginx:latest
|
||||
@@ -164,6 +169,7 @@ Docker 镜像有多种标识方式:
|
||||
格式:`[仓库地址/]仓库名[:标签]`
|
||||
|
||||
```bash
|
||||
|
||||
## 完整格式
|
||||
|
||||
registry.example.com/myproject/myapp:v1.2.3
|
||||
|
||||
@@ -113,6 +113,7 @@ flowchart TD
|
||||
> **笔者特别强调**:这是新手最容易踩的坑!**容器存储层与容器生命周期绑定。容器删除,数据就没了!**
|
||||
|
||||
```bash
|
||||
|
||||
## 创建容器,写入数据
|
||||
|
||||
$ docker run -it ubuntu bash
|
||||
@@ -137,6 +138,7 @@ $ docker rm abc123
|
||||
| **[绑定挂载 (Bind Mount) ](../08_data/8.2_bind-mounts.md)** | 挂载宿主机目录 | 开发时共享代码 |
|
||||
|
||||
```bash
|
||||
|
||||
## 使用数据卷(推荐)
|
||||
|
||||
$ docker run -v mydata:/var/lib/mysql mysql
|
||||
@@ -173,6 +175,7 @@ stateDiagram-v2
|
||||
#### 常用生命周期命令
|
||||
|
||||
```bash
|
||||
|
||||
## 创建并启动容器(最常用)
|
||||
|
||||
$ docker run nginx
|
||||
@@ -203,6 +206,7 @@ $ docker rm -f abc123 # 强制删除运行中的容器
|
||||
> **核心概念**:容器的生命周期 = 主进程 (PID 1) 的生命周期
|
||||
|
||||
```bash
|
||||
|
||||
## 主进程运行,容器运行
|
||||
|
||||
## 主进程退出,容器停止
|
||||
@@ -212,6 +216,7 @@ $ docker rm -f abc123 # 强制删除运行中的容器
|
||||
这就是为什么:
|
||||
|
||||
```bash
|
||||
|
||||
## 这个容器会立即退出(bash 没有输入就退出了)
|
||||
|
||||
$ docker run ubuntu
|
||||
|
||||
@@ -62,6 +62,7 @@ flowchart TB
|
||||
示例:
|
||||
|
||||
```bash
|
||||
|
||||
## 完整格式
|
||||
|
||||
registry.example.com/mycompany/myapp:v1.2.3
|
||||
@@ -103,6 +104,7 @@ gcr.io/google-containers/pause:3.6
|
||||
- 付费账户支持私有仓库
|
||||
|
||||
```bash
|
||||
|
||||
## 从 Docker Hub 拉取镜像
|
||||
|
||||
$ docker pull nginx # 官方镜像
|
||||
@@ -152,6 +154,7 @@ $ docker push username/myapp:v1.0
|
||||
Docker 官方提供了 [registry](https://hub.docker.com/_/registry/) 镜像,可以快速搭建私有 Registry:
|
||||
|
||||
```bash
|
||||
|
||||
## 启动一个本地 Registry
|
||||
|
||||
$ docker run -d -p 5000:5000 --name registry registry:2
|
||||
@@ -211,6 +214,7 @@ $ docker pull localhost:5000/myapp:v1.0
|
||||
#### 常用命令
|
||||
|
||||
```bash
|
||||
|
||||
## 登录 Registry
|
||||
|
||||
$ docker login # 登录 Docker Hub
|
||||
@@ -242,6 +246,7 @@ $ docker logout
|
||||
Docker Hub 的[官方镜像](https://hub.docker.com/search?q=&type=image&image_filter=official) (标有 “Official Image” 标识) 经过 Docker 团队审核,相对更安全。示例如下:
|
||||
|
||||
```bash
|
||||
|
||||
## 官方镜像示例
|
||||
|
||||
nginx # ✅ 官方
|
||||
@@ -261,6 +266,7 @@ someuser/myapp # ⚠️ 需要评估
|
||||
> 注意:Cosign 默认会把签名写回镜像所在仓库,请使用你有推送权限的镜像地址。
|
||||
|
||||
```bash
|
||||
|
||||
## 准备一个你有写权限的镜像地址
|
||||
$ export IMAGE=<你的仓库名>/nginx:1.27
|
||||
$ docker pull nginx:1.27
|
||||
@@ -278,6 +284,7 @@ $ cosign verify --key cosign.pub $IMAGE
|
||||
#### 漏洞扫描
|
||||
|
||||
```bash
|
||||
|
||||
## 使用 Docker Scout 扫描镜像漏洞
|
||||
|
||||
$ docker scout cves nginx:latest
|
||||
|
||||
Reference in New Issue
Block a user