Alpine Image
Jun 26, 2020
背景
- 公司使用的 alpine 镜像进行过网络参数调优
- 新项目 使用了 cgo (librdkafka-go-bindings)
冲突
- 想要在该项目中使用调优过的 alpine 镜像
- 该镜像不具备编译源代码能力
- librdkafka-go-bindings 需要编译时开启 cgo
结果
- 通过 多阶段编译 方式解决上面问题
- 使用 golang:alpine 环境 作为编译阶段的底包
- apk 安装 build-base vim git 等包组和实用工具
- 编译阶段产物 复制到最终阶段 (使用公司调优的 alpine)
- 形成了通用的 多阶段编译方案 (伸手党最爱)
- 源码放置 相关 Dockerfile Makefile
- ci 配置 编译路径
- just build
感想
- 解决这个问题 使用的 go 库自带电池是非常贴心的
- 大大降低了 折腾编译依赖库的成本
- 对比同组的巨巨 手工编译依赖的代码库 我真是 一部到位
- 大大降低了 折腾编译依赖库的成本
- 使用一个好的 底包也有很大关系
- alpine 自带的包管理 使得我能够以最低成本调整出编译代码的必要环境
- 前期对问题的了解 也很重要
- 问题识别不清楚 很容易抓不到核心矛盾