- 设置 PLAYWRIGHT_BROWSERS_PATH 环境变量指向 /app/.browsers - 创建 /app/.browsers 目录用于存放浏览器文件 - 分别以 root 用户和 appuser 用户执行 Playwright 依赖和浏览器安装 - 提升 /app/.browsers 目录权限,保证 appuser 访问权限 - 调整安装步骤顺序,优化权限和用户切换流程 docs(kami-gateway): 新增 kami-gateway 模块文档及构建脚本说明 - 添加了 kami-gateway 模块的整体介绍及项目结构概述 - 详细描述了基础镜像构建流程和核心组件(Dockerfile.base 与 build-base-image.sh) - 分析了 Go 依赖管理方式及 Docker 构建优化机制 - 介绍了 CI/CD 集成流程及自动化构建逻辑 - 阐述了性能优化措施,包括中国镜像源配置和极速构建策略 - 提供了常见故障排查指南以提高镜像构建和推送的稳定性 - 补充了安全性设计,如非 root 用户运行和证书管理 chore(docker): 更新 Go 模块代理地址 - 将 GOPROXY 从 https://goproxy.cn 更改为 https://goproxy.io - 保持其他环境变量配置不变 - 解决国内代理访问速度或稳定性问题
7.7 KiB
alpine-base 模块
**Referenced Files in This Document** - [README.md](file://alpine-base/README.md) - [build-base-image.sh](file://alpine-base/build-base-image.sh) - [Dockerfile.base](file://alpine-base/Dockerfile.base)目录
简介
alpine-base 模块是一个优化的 Alpine Linux 基础镜像,专为各种容器化应用设计。该镜像基于 alpine:latest,配置了中国镜像源以加速包下载,设置了 Asia/Shanghai 时区,并预装了常用的网络和系统工具。此外,镜像还包含了 CA 证书和自定义证书,确保了安全性和兼容性。通过创建非 root 用户 appuser(UID: 1001),提高了安全性。镜像大小约为 50MB,适合轻量级应用。
项目结构
alpine-base 模块包含以下文件:
README.md:项目说明文档build-base-image.sh:基础镜像构建脚本Dockerfile.base:基础镜像定义文件
graph TD
A[alpine-base] --> B[README.md]
A --> C[build-base-image.sh]
A --> D[Dockerfile.base]
Diagram sources
Section sources
核心组件
alpine-base 模块的核心组件包括 Dockerfile.base 和 build-base-image.sh。Dockerfile.base 定义了基础镜像的构建过程,而 build-base-image.sh 脚本则负责执行构建、打标和推送操作。
Section sources
架构概述
alpine-base 模块的架构主要包括以下几个部分:
- 基础镜像:基于
alpine:latest。 - 镜像源配置:使用阿里云镜像源加速包下载。
- 时区设置:设置为
Asia/Shanghai。 - 预装工具:包括
curl、wget、git、bash、tar、gzip等。 - 证书管理:包含 CA 证书和自定义证书。
- 用户配置:创建非 root 用户
appuser(UID: 1001)。 - 应用目录:创建
/app目录并设置权限。
graph TD
A[alpine:latest] --> B[配置阿里云镜像源]
B --> C[设置时区为Asia/Shanghai]
C --> D[安装预装工具]
D --> E[下载并更新证书]
E --> F[创建非root用户appuser]
F --> G[创建应用目录/app]
G --> H[切换到appuser用户]
H --> I[设置工作目录为/app]
I --> J[标记镜像]
Diagram sources
详细组件分析
Dockerfile.base 分析
Dockerfile.base 文件定义了基础镜像的构建过程。以下是其主要步骤:
- 基础镜像:从
alpine:latest开始。 - 环境变量:设置
TZ为Asia/Shanghai。 - 镜像源配置:将阿里云镜像源写入
/etc/apk/repositories。 - 安装包:更新包列表,升级现有包,并安装一系列常用工具和证书。
- 时区设置:复制
Asia/Shanghai时区信息到/etc/localtime,并写入/etc/timezone。 - 清理缓存:删除
/var/cache/apk/*以减少镜像大小。 - 下载自定义证书:从指定 URL 下载自定义证书并更新 CA 证书。
- 创建非 root 用户:创建
appuser用户和组,UID 为 1001。 - 创建应用目录:创建
/app目录并设置所有者为appuser。 - 切换用户:切换到
appuser用户。 - 设置工作目录:设置工作目录为
/app。 - 标记镜像:添加维护者、版本和描述标签。
flowchart TD
Start([开始]) --> BaseImage["FROM alpine:latest"]
BaseImage --> SetEnv["ENV TZ=Asia/Shanghai"]
SetEnv --> ConfigureRepo["配置阿里云镜像源"]
ConfigureRepo --> InstallPackages["安装包"]
InstallPackages --> SetupTimezone["设置时区"]
SetupTimezone --> Cleanup["清理缓存"]
Cleanup --> DownloadCerts["下载自定义证书"]
DownloadCerts --> CreateUser["创建非root用户appuser"]
CreateUser --> CreateAppDir["创建应用目录/app"]
CreateAppDir --> SwitchUser["切换到appuser用户"]
SwitchUser --> SetWorkDir["设置工作目录为/app"]
SetWorkDir --> LabelImage["标记镜像"]
LabelImage --> End([结束])
Diagram sources
Section sources
build-base-image.sh 分析
build-base-image.sh 脚本负责构建、打标和推送基础镜像。以下是其主要步骤:
- 配置:设置基础镜像名称、注册表和版本。
- 构建镜像:使用
docker build命令构建镜像,并打上版本和 latest 标签。 - 标记注册表:如果指定了注册表,则为镜像打上注册表标签。
- 推送镜像:如果指定了注册表,则将镜像推送到注册表。
- 显示镜像大小:显示构建完成后的镜像大小。
flowchart TD
Start([开始]) --> Config["配置变量"]
Config --> BuildImage["构建基础镜像"]
BuildImage --> TagRegistry["标记注册表"]
TagRegistry --> PushImage["推送镜像"]
PushImage --> ShowSize["显示镜像大小"]
ShowSize --> End([结束])
Diagram sources
Section sources
依赖分析
alpine-base 模块依赖于 alpine:latest 镜像,并通过 apk 包管理器安装了一系列工具和证书。这些依赖项确保了镜像的功能性和安全性。
graph TD
A[alpine:latest] --> B[apk-tools]
B --> C[curl]
B --> D[wget]
B --> E[git]
B --> F[bash]
B --> G[tar]
B --> H[gzip]
B --> I[ca-certificates]
I --> J[自定义证书]
Diagram sources
Section sources
性能考虑
alpine-base 模块通过以下方式优化性能:
- 轻量化:基于 Alpine Linux,镜像大小约为 50MB。
- 快速构建:预装常用工具和配置,减少构建时间。
- 网络优化:使用阿里云镜像源加速包下载。
- 安全:创建非 root 用户
appuser,提高安全性。
故障排除指南
如果在构建或使用 alpine-base 镜像时遇到问题,可以参考以下建议:
- 构建失败:检查
Dockerfile.base中的命令是否正确,确保网络连接正常。 - 推送失败:确认
DOCKER_REGISTRY环境变量是否正确设置,检查 Docker 登录状态。 - 权限问题:确保
appuser用户和/app目录的权限设置正确。
Section sources
结论
alpine-base 模块提供了一个优化的 Alpine Linux 基础镜像,适用于各种容器化应用。通过预装常用工具、配置中国镜像源、设置时区和创建非 root 用户,该镜像在功能性和安全性方面表现出色。镜像大小约为 50MB,适合轻量级应用。通过 build-base-image.sh 脚本,可以轻松构建、打标和推送镜像,确保了开发和部署的高效性。