3. 环境准备:安装 Docker、Go、Python,配置开发环境
说实话,做 SBOM 生成这件事,环境配置往往是第一个坑。我见过不少团队,工具链装好了,结果版本对不上,折腾半天还没开始写代码。这一章,咱们就把基础打牢。
我会带你装好三样东西:Docker、Go、Python。这三样是后面所有实验的基石。别小看这一步,配好了能省 80% 的排错时间。
3.1 为什么是这三样?
你可能想问:做 SBOM 生成,为什么非得装这三样?我简单解释一下:
- Docker:用来跑各种工具链,比如 Syft、Trivy,还能模拟不同的构建环境。说白了,容器化能让你「一次配置,到处运行」。
- Go:很多 SBOM 工具(比如 Syft、Grype)都是用 Go 写的。你后面要二次开发或者调试源码,没 Go 环境可不行。
- Python:用来写脚本、做数据处理、调用 API。SBOM 生成后的解析、格式转换、入库,Python 是最顺手的。
嗯,这三样缺一不可。我建议你按顺序装,避免依赖冲突。
3.2 安装 Docker
Docker 的安装其实很简单,但有几个细节要注意。我在项目中遇到过因为 Docker 版本太老,导致容器内文件权限错乱的问题,折腾了一下午。
3.2.1 Linux 环境(以 Ubuntu 22.04 为例)
# 更新包索引
sudo apt update
# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 将当前用户加入 docker 组(避免每次 sudo)
sudo usermod -aG docker $USER
usermod 后,需要退出当前终端重新登录,组权限才会生效。我曾经忘了这一步,结果后面所有 docker 命令都要加 sudo,非常麻烦。
3.2.2 macOS 环境
macOS 用户直接下载 Docker Desktop for Mac 就行。我个人习惯用 Homebrew 安装,方便后续升级:
brew install --cask docker
安装完成后,打开 Docker Desktop,等状态栏显示绿色就说明跑起来了。
3.2.3 验证安装
docker --version
# 输出示例:Docker version 24.0.7, build afdd53b
docker compose version
# 输出示例:Docker Compose version v2.21.0
docker run hello-world,如果能正常输出欢迎信息,说明环境没问题。这是我最常用的「冒烟测试」。
3.3 安装 Go
Go 的安装我推荐用官方安装包,或者用 gvm 管理多版本。后面我们要编译 Syft 源码,Go 版本最好在 1.21 以上。
3.3.1 下载安装
# 下载 Go 1.21.5(建议去官网查最新版)
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
# 解压到 /usr/local
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
# 配置环境变量(写入 ~/.bashrc 或 ~/.zshrc)
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc
3.3.2 验证安装
go version
# 输出示例:go version go1.21.5 linux/amd64
go env GOPATH
# 输出示例:/home/yourname/go
避坑指南:我曾经在 macOS 上直接用 brew install go,结果版本是 1.19,后面编译 Syft 时报了一堆兼容性错误。所以,尽量用官方包,或者指定版本安装。
3.4 安装 Python
Python 我建议装 3.10 或 3.11。3.8 以下有些库已经不维护了,3.12 以上部分 SBOM 解析库还没适配。
3.4.1 使用 pyenv 管理多版本
我个人习惯用 pyenv,可以随时切换 Python 版本,避免污染系统环境。
# 安装 pyenv
curl https://pyenv.run | bash
# 配置环境变量(写入 ~/.bashrc)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
# 安装 Python 3.11.6
pyenv install 3.11.6
# 设置全局版本
pyenv global 3.11.6
3.4.2 验证安装
python --version
# 输出示例:Python 3.11.6
pip --version
# 输出示例:pip 23.3.1 from /home/yourname/.pyenv/versions/3.11.6/lib/python3.11/site-packages/pip
pip install requests pyyaml jsonschema
3.5 配置开发环境
工具装完了,还得配一下开发环境。我推荐用 VS Code,插件生态好,对 Go 和 Python 的支持都很成熟。
3.5.1 推荐 VS Code 插件
| 插件名称 | 用途 |
|---|---|
| Go | Go 语言支持(自动补全、调试、格式化) |
| Python | Python 语言支持(IntelliSense、Linting) |
| Docker | Dockerfile 语法高亮、容器管理 |
| YAML | YAML 文件支持(SBOM 格式常用) |
| GitLens | 代码溯源,方便看工具源码的修改历史 |
3.5.2 验证整体环境
写一个简单的测试脚本,确保三样工具能协同工作:
# test_env.sh
#!/bin/bash
echo "=== 环境验证 ==="
echo "Docker: $(docker --version)"
echo "Go: $(go version)"
echo "Python: $(python --version)"
echo "================="
# 拉一个轻量镜像测试 Docker
docker pull alpine:latest > /dev/null 2>&1
echo "Docker 拉取镜像: 成功"
# 写一个简单的 Go 程序
cat > /tmp/hello.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Go 环境正常")
}
EOF
go run /tmp/hello.go
# 写一个简单的 Python 脚本
python -c "print('Python 环境正常')"
跑一下这个脚本,如果所有输出都正常,说明环境配好了。
3.6 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以对照着检查自己的环境:
这张图展示了从安装三大工具,到配置开发环境,再到最终验证的完整链路。你可以把它当成一个检查清单,每完成一步就打个勾。
3.7 常见问题与避坑
- Docker 权限问题:如果
docker ps报权限错误,八成是没把用户加入 docker 组,或者没重新登录。我曾经在 CI 环境里忘了这一步,导致流水线一直报错。 - Go 版本不匹配:编译 Syft 时如果报
toolchain相关错误,检查一下 Go 版本是否 ≥ 1.21。用go version确认。 - Python 虚拟环境:我建议每个项目都用虚拟环境,避免全局包冲突。用
python -m venv venv创建,然后source venv/bin/activate激活。 - macOS 的 Docker 性能:如果你用 macOS,Docker Desktop 默认会占用不少资源。可以在设置里限制 CPU 和内存,或者考虑用
colima替代。
最后说一句:环境配置这件事,一次配好,后面能省很多时间。别急着往下走,花 30 分钟把这一步做扎实了,后面 29 章你会感谢自己的。