使用 Docker 构建 k6 二进制文件
使用 xk6 Docker 镜像 可以简化创建自定义 k6 二进制文件的过程。它避免了需要设置本地 Go 环境和手动安装 xk6 的麻烦。
注意
本教程是关于创建自定义 k6 二进制文件(使用 Docker)的。如果您想创建一个包含自定义 k6 二进制文件的 Docker 镜像,请参阅 使用 Docker 使用模块。
构建您的第一个扩展
例如,要使用最新版本的 k6 以及 xk6-kafka
和 xk6-output-influxdb
扩展 构建自定义 k6 二进制文件,请根据您的操作系统运行以下命令之一
docker run --rm -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" grafana/xk6 build \
--with github.com/mostafa/xk6-kafka \
--with github.com/grafana/xk6-output-influxdb
docker run --rm -e GOOS=darwin -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" \
grafana/xk6 build \
--with github.com/mostafa/xk6-kafka \
--with github.com/grafana/xk6-output-influxdb
docker run --rm -e GOOS=windows -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" `
grafana/xk6 build --output k6.exe `
--with github.com/mostafa/xk6-kafka `
--with github.com/grafana/xk6-output-influxdb
docker run --rm -e GOOS=windows -v "%cd%:/xk6" ^
grafana/xk6 build --output k6.exe ^
--with github.com/mostafa/xk6-kafka ^
--with github.com/grafana/xk6-output-influxdb
这将在当前工作目录中创建 k6
(或 k6.exe
)二进制文件。
要使用具体版本构建二进制文件,请参阅以下示例(k6 v0.45.1
,xk6-kafka v0.19.1
和 xk6-output-influxdb v0.4.1
)
docker run --rm -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" grafana/xk6 build v0.45.1 \
--with github.com/mostafa/xk6-kafka@v0.19.1 \
--with github.com/grafana/xk6-output-influxdb@v0.4.1
docker run --rm -e GOOS=darwin -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" \
grafana/xk6 build v0.45.1 \
--with github.com/mostafa/xk6-kafka@v0.19.1 \
--with github.com/grafana/xk6-output-influxdb@v0.4.1
docker run --rm -e GOOS=windows -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" `
grafana/xk6 build v0.45.1 --output k6.exe `
--with github.com/mostafa/xk6-kafka@v0.19.1 `
--with github.com/grafana/xk6-output-influxdb@v0.4.1
docker run --rm -e GOOS=windows -v "%cd%:/xk6" ^
grafana/xk6 build v0.45.1 --output k6.exe ^
--with github.com/mostafa/xk6-kafka@v0.19.1 ^
--with github.com/grafana/xk6-output-influxdb@v0.4.1
分解命令
示例命令行起初可能看起来有点吓人,但我们只关注第一部分,这部分严格来说与 Docker 相关
docker run --rm -u "$(id -u):$(id -g)" -v "${PWD}:/xk6"
这告诉 Docker 从镜像运行一个新的容器。
--rm
意味着容器在构建完成后将被销毁。-u
指定主机上账户的用户和组 ID。这对于k6
文件与主机用户具有相同的文件权限非常重要。-v
是将当前工作目录挂载到容器内的必需项,以便k6
二进制文件可以写入其中。
对于 Windows 和 Mac,我们还额外包含目标系统作为环境变量
-e GOOS=<target os>
其余部分直接来自 xk6 文档,不同之处在于我们使用的是 grafana/xk6
镜像,而不是本地安装的 xk6
grafana/xk6 build [<k6_version>]
[--output <file>]
[--with <module[@version][=replacement]>...]
[--replace <module=replacement>...]
Flags:
--output specifies the new binary name [default: 'k6']
--replace enables override of dependencies for k6 and extensions [default: none]
--with the extension module to be included in the binary [default: none]
注意
--replace
的使用应被视为高级功能,除非必需,否则应避免使用。
回到我们执行的命令,请注意
- 我们将版本指定为
v0.43.1
。当您省略版本或指定latest
时,您使用的是 k6 的最新源代码进行构建。除非您确实需要最新版本,否则建议使用稳定的 发布版本 作为最佳实践。 - 我们为每个
--with
指定了扩展仓库的完整 GitHub URI。如果未指定版本,默认仍为latest
。请检查您的扩展仓库是否有可用的稳定发布版本,以便锁定您的版本,就像我们对xk6-kafka@v0.17.0
和xk6-output-influxdb@v0.3.0
所做的那样。 - 对于 Windows,我们使用
--output
选项将结果命名为k6.exe
;如果未指定,新的二进制文件在当前目录中命名为k6
。如果您指定目录,新的二进制文件将位于该目录中并命名为k6
。如果您指定一个不存在的文件路径,例如/tmp/k6-extended
,这将是二进制文件的路径和文件名。
运行 ./k6 version
(或 k6.exe version
)来检查您的构建是否基于正确的 k6 版本并包含所需的扩展。例如
$ ./k6 version
k6 v0.43.1 ((devel), go1.20.1, darwin/amd64)
Extensions:
github.com/grafana/xk6-output-influxdb v0.3.0, xk6-influxdb [output]
github.com/mostafa/xk6-kafka v0.17.0, k6/x/kafka [js]
运行您的扩展二进制文件
现在我们有了新构建的 k6 二进制文件,我们可以使用捆绑扩展的功能来运行脚本。
./k6 run my-script.js
k6.exe run my-script.js
请务必将当前目录中刚刚构建的二进制文件指定为
./k6
,否则 Linux/Mac 可能会执行系统路径中的另一个 k6 二进制文件。Windows Shell 默认会先在当前目录中搜索二进制文件。
遇到问题?
如果您遇到问题,请在 k6 社区论坛 中搜索。可能之前有人遇到过同样的问题。