- 设置 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.6 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,通过配置中国镜像源、设置时区、创建非 root 用户和集成自定义证书等优化措施,提供了一个轻量、安全、网络优化的 Linux 运行时环境。预装的常用工具集(如 curl、wget、git、bash 等)显著提升了开发效率。该模块在微服务架构中扮演着基础支撑角色,为上层镜像提供一致且可靠的运行环境。
Section sources
项目结构
alpine-base 模块包含以下核心文件:
Dockerfile.base:定义基础镜像的 Dockerfilebuild-base-image.sh:用于构建和推送镜像的脚本README.md:模块的说明文档
这些文件共同构成了一个完整的镜像构建和管理解决方案,确保了镜像的一致性和可重复性。
graph TD
A[Dockerfile.base] --> B[基础镜像定义]
C[build-base-image.sh] --> D[构建与推送]
E[README.md] --> F[使用说明]
B --> G[alpine-base:latest]
D --> G
F --> G
Diagram sources
Section sources
核心特性
alpine-base 镜像具备以下核心特性:
基础环境
- 基础镜像:基于最新的
alpine:latest,确保系统安全性和稳定性 - 镜像源:配置阿里云中国镜像源,显著加速软件包下载速度
- 时区:设置为
Asia/Shanghai,符合中国用户的时区需求
预装工具
- 网络工具:预装
curl、wget、git,方便网络操作和代码管理 - 系统工具:包含
bash、tar、gzip,提供基本的系统操作能力 - 证书管理:集成
ca-certificates和自定义证书,确保安全通信 - 包管理:预装
apk-tools,便于后续软件包管理
用户配置
- 非 root 用户:创建
appuser用户(UID 1001),以非 root 权限运行应用,提升安全性 - 应用目录:创建
/app目录并设置正确的文件权限 - 安全权限:所有文件和目录均设置为安全的权限配置
Section sources
架构设计
alpine-base 的架构设计体现了分层继承和优化配置的理念。
分层继承机制
镜像基于 alpine:latest 进行构建,通过 Docker 的分层机制,每一层都添加特定的配置和工具。这种设计使得镜像构建过程清晰且可维护。
中国镜像源配置
通过修改 /etc/apk/repositories 文件,将 Alpine 的软件源替换为阿里云镜像源。这不仅加快了软件包的下载速度,还提高了构建的稳定性。
时区设置
通过设置 TZ 环境变量和复制时区文件,将系统时区设置为 Asia/Shanghai。这确保了容器内的时间与本地时间一致。
非 root 用户创建
使用 addgroup 和 adduser 命令创建 appuser 用户,并将其主目录设置为 /app。通过 USER 指令切换到该用户,确保应用以非 root 权限运行。
自定义证书集成
通过 curl 下载自定义证书并使用 update-ca-certificates 命令更新证书库,确保容器能够信任特定的证书颁发机构。
classDiagram
class AlpineBase {
+string base_image : alpine : latest
+string timezone : Asia/Shanghai
+string registry : git.oceanpay.cc/danial
+string user : appuser (UID : 1001)
+string workdir : /app
+list tools : [curl, wget, git, bash, ...]
+list certificates : [ca-certificates, custom.crt]
+build() : void
+push() : void
}
AlpineBase : --|> alpine : latest : inherits
AlpineBase : uses "阿里云镜像源" : configures
AlpineBase : creates "appuser" : user management
AlpineBase : installs "预装工具" : package management
AlpineBase : integrates "自定义证书" : security
Diagram sources
Section sources
构建流程
alpine-base 的构建流程由 build-base-image.sh 脚本自动化完成。
构建脚本逻辑
- 配置参数:设置镜像名称、注册表和版本号
- 构建镜像:使用
docker build命令基于Dockerfile.base构建镜像 - 标记镜像:为本地和远程注册表创建相应的标签
- 推送镜像:如果指定了远程注册表,则推送镜像
- 显示信息:输出构建完成的信息和镜像大小
环境变量
DOCKER_REGISTRY:指定镜像推送的目标注册表,默认为git.oceanpay.cc/danialVERSION:指定镜像版本,默认为latest
flowchart TD
A[开始构建] --> B[读取环境变量]
B --> C{是否指定注册表?}
C --> |是| D[设置REGISTRY]
C --> |否| E[使用默认值]
D --> F[构建镜像]
E --> F
F --> G[标记本地镜像]
G --> H{是否远程注册表?}
H --> |是| I[标记远程镜像]
H --> |否| J[跳过]
I --> K[推送镜像]
J --> L[完成]
K --> L
L --> M[显示镜像信息]
Diagram sources
Section sources
使用方法
本地构建与推送
# 构建基础镜像
./build-base-image.sh
# 推送到镜像仓库
DOCKER_REGISTRY=git.oceanpay.cc/danial ./build-base-image.sh
在应用 Dockerfile 中使用
# 使用基础镜像
FROM git.oceanpay.cc/danial/alpine-base:latest
# 复制应用代码
COPY --chown=appuser:appuser . /app/
# 切换到非 root 用户
USER appuser
# 运行应用
CMD ["./your-app"]
Section sources
性能与安全
性能优化
- 镜像缓存:利用 Docker 的层缓存机制,避免重复下载和安装
- 精简安装:使用
--no-cache选项,减少镜像体积 - 并行构建:在 CI/CD 中并行构建多个镜像
安全加固
- 非 root 运行:应用以
appuser用户身份运行,降低安全风险 - 最小权限:只安装必要的工具和包
- 定期更新:定期更新基础镜像和软件包
CI/CD 集成
- 自动化构建:在 CI/CD 流水线中自动构建和推送镜像
- 版本管理:使用语义化版本号管理镜像版本
- 镜像扫描:集成安全扫描工具,检测漏洞
Section sources
结论
alpine-base 模块通过精心设计的架构和优化配置,为上层镜像提供了一个轻量、安全、高效的 Linux 运行时环境。其预装的工具集和中国镜像源配置显著提升了开发效率和构建速度。通过非 root 用户运行和自定义证书集成,确保了应用的安全性。该模块在微服务架构中扮演着基础支撑角色,为构建稳定可靠的容器化应用提供了坚实的基础。