🐳 Docker 部署
Composer Skills 自带 Dockerfile 和 docker-compose.yml,方便你把 CLI 工具或基于 SDK 的程序容器化。本页基于项目自带的 Docker 文件给出使用说明,并给出多阶段构建建议。
📦 项目自带的 Dockerfile
项目根目录的 Dockerfile 采用多阶段构建,把构建环境与运行环境分离:
# ---- 构建阶段 ----
FROM golang:1.20-alpine AS build
WORKDIR /app
COPY go.mod go.sum* ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o /composer-skills cmd/main.go
# ---- 运行阶段 ----
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=build /composer-skills .
RUN mkdir -p /data
ENV OUTPUT_DIR=/data
ENTRYPOINT ["./composer-skills"]
CMD ["--help"]要点:
- 🐹 构建阶段用
golang:1.20-alpine,编译出静态二进制(CGO_ENABLED=0)。 - 🪶 运行阶段用
alpine,只装ca-certificates支持 HTTPS,镜像极小。 - 📁
/data目录用于挂载输出,环境变量OUTPUT_DIR=/data。
Go 版本对齐
项目 go.mod 声明 go 1.23.0。如果你用自带 Dockerfile 报版本错误,请把基础镜像升到 golang:1.23-alpine。建议复用下文"推荐 Dockerfile"。
🚀 用 Docker 运行
构建镜像:
docker build -t composer-skills .跑几个常用命令(结果挂载到 ./data):
mkdir -p data
# 统计信息
docker run -v "$(pwd)/data:/data" composer-skills \
-stats -output /data/statistics.json
# 指定包详情
docker run -v "$(pwd)/data:/data" composer-skills \
-package symfony/console -output /data/symfony-console.json
# 安全公告
docker run -v "$(pwd)/data:/data" composer-skills \
-advisories -output /data/advisories.json纯 Go,无需 PHP
上面这些命令走的是 Packagist API(-stats/-package/-advisories),容器里不需要装 PHP。镜像因此能保持极小。只有要跑本地 composer install/audit 时才需要 PHP。
🐙 用 Docker Compose 运行
项目根目录的 docker-compose.yml 预定义了多个服务,一条命令跑一个任务:
version: '3'
services:
composer-skills: # 获取统计信息
build: .
volumes: [./data:/data]
command: ["-stats"]
get-package: # 获取指定包信息
build: .
volumes: [./data:/data]
command: ["-package", "symfony/console", "-output", "/data/symfony-console.json"]
get-advisories: # 获取安全公告
build: .
volumes: [./data:/data]
command: ["-advisories", "-output", "/data/advisories.json"]
popular-packages: # 运行流行包示例
build: .
volumes: [./data:/data]
entrypoint: ["/bin/sh", "-c"]
command: |
cd /app && go build -o /root/popular-packages examples/popular_packages/main.go &&
cd /root && ./popular-packages
security-monitor: # 运行安全监控示例
build: .
volumes: [./data:/data]
entrypoint: ["/bin/sh", "-c"]
command: |
cd /app && go build -o /root/security-monitor examples/security_monitor/main.go &&
cd /root && ./security-monitor常用操作:
docker-compose up composer-skills # 统计
docker-compose up get-package # 包详情
docker-compose up get-advisories # 安全公告
docker-compose up popular-packages # 流行包示例
docker-compose up security-monitor # 安全监控示例结果落在 ./data 目录。
权限问题
若 ./data 写不进去,调整权限:
chmod -R 777 ./data📌 自定义运行
想跑别的包或参数,直接覆盖 command:
docker run -v "$(pwd)/data:/data" composer-skills \
-package laravel/framework -output /data/laravel-framework.json或在 docker-compose.yml 里新增一个服务。
🛠️ 推荐 Dockerfile(对齐 Go 1.23 + 多阶段)
如果你要基于 SDK 写自己的程序,推荐用下面这个对齐 Go 版本的多阶段 Dockerfile:
# ---- 构建阶段 ----
FROM golang:1.23-alpine AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# 编译你自己的程序,静态链接
RUN CGO_ENABLED=0 GOOS=linux go build -o /app ./ci/main.go
# ---- 运行阶段 ----
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=build /app .
ENTRYPOINT ["./app"]如果运行阶段需要本地 Composer CLI(要跑 install/audit),改用带 PHP 的运行镜像:
# ---- 运行阶段(需要 PHP + Composer)----
FROM php:8.2-cli
RUN apt-get update && apt-get install -y --no-install-recommends \
git unzip libzip-dev && docker-php-ext-install zip
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY --from=build /app /usr/local/bin/app
WORKDIR /project
ENTRYPOINT ["app"]借用官方 Composer 镜像
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer 直接从官方 Composer 镜像复制二进制,省去手动安装。你也可以让 Composer Skills 在容器启动时自动安装,但预装更快。
🧭 下一步
- 🔄 CI/CD 流水线 —— 把容器化的程序接进 GitHub Actions。
- 🖥️ 跨平台支持 —— 容器外的平台策略。
- 🔧 自动安装机制 —— 容器启动时自动补齐 Composer。
- 🌐 Packagist API SDK —— 容器里最常用的纯 Go 能力。