style: apply global formatting fixes (struct, spacing, zhlint)

This commit is contained in:
Baohua Yang
2026-02-21 11:08:52 -08:00
parent ad68b2d973
commit 79ac9c639a
159 changed files with 1708 additions and 882 deletions

View File

@@ -1,5 +1,7 @@
## 7.5 ENTRYPOINT 入口点
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 什么是 ENTRYPOINT
`ENTRYPOINT` 指定容器启动时运行的入口程序 CMD 不同ENTRYPOINT 定义的命令不会被 `docker run` 的参数覆盖而是**接收这些参数**
@@ -29,6 +31,8 @@ ENTRYPOINT nginx -g "daemon off;"
### ENTRYPOINT vs CMD
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 核心区别
| 特性 | ENTRYPOINT | CMD |
@@ -40,6 +44,8 @@ ENTRYPOINT nginx -g "daemon off;"
#### 行为对比
如下代码块所示展示了相关示例
```docker
## 只用 CMD
@@ -80,12 +86,16 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓
### 场景一让镜像像命令一样使用
#### 需求启动前准备
本节涵盖了相关内容与详细描述主要探讨以下几个方面
创建一个查询公网 IP "命令"镜像
#### 需求 (启动前准备)
创建一个查询公网 IP 命令 镜像
#### 使用 CMD 的问题
如下代码块所示展示了相关示例
```docker
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
@@ -105,6 +115,8 @@ exec: "-i": executable file not found
#### 使用 ENTRYPOINT 解决
如下代码块所示展示了相关示例
```docker
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
@@ -123,6 +135,8 @@ HTTP/1.1 200 OK
#### 交互图示
如下代码块所示展示了相关示例
```
ENTRYPOINT ["curl", "-s", "http://myip.ipip.net"]
@@ -138,12 +152,16 @@ curl -s http://myip.ipip.net -i
### 场景二启动前的准备工作
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 需求
在启动主服务前执行初始化脚本如数据库迁移权限设置
在启动主服务前执行初始化脚本 (如数据库迁移权限设置)
#### 实现方式
如下代码块所示展示了相关示例
```docker
FROM redis:7-alpine
COPY docker-entrypoint.sh /usr/local/bin/
@@ -175,6 +193,8 @@ exec "$@"
#### 工作流程
如下代码块所示展示了相关示例
```
docker run redis docker run redis bash
│ │
@@ -189,14 +209,16 @@ docker-entrypoint.sh redis-server docker-entrypoint.sh bash
#### 关键点
1. **exec "$@"**用传入的参数替换当前进程确保信号正确传递
1. **exec $@**用传入的参数替换当前进程确保信号正确传递
2. **条件判断**根据 CMD 不同执行不同逻辑
3. **用户切换**使用 `gosu` 切换用户 `su` 更适合容器
3. **用户切换**使用 `gosu` 切换用户 ( `su` 更适合容器)
---
### 场景三带参数的应用
如下代码块所示展示了相关示例
```docker
FROM python:3.12-slim
WORKDIR /app
@@ -264,7 +286,11 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
### 最佳实践
#### 1. 使用 exec 格式
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1使用 exec 格式
如下代码块所示展示了相关示例
```docker
## ✅ 推荐
@@ -276,14 +302,16 @@ ENTRYPOINT ["python", "app.py"]
ENTRYPOINT python app.py
```
#### 2. 提供有意义的默认参数
#### 2提供有意义的默认参数
如下代码块所示展示了相关示例
```docker
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
```
#### 3. 入口脚本使用 exec
#### 3入口脚本使用 exec
运行以下命令
@@ -296,7 +324,7 @@ CMD ["-g", "daemon off;"]
exec "$@"
```
#### 4. 处理信号
#### 4处理信号
确保 ENTRYPOINT 脚本能正确传递信号