Deep-Dive into building software with Docker
大家好,我是无羡,大家也可以叫我Hinsteny·Hisoka.
今天在这里,我想带大家一起深度了解一下关于Docker Build的一些最佳实践!
Docker Build最佳实战系列
第一篇:Building and exporting binaries
问题
如果我们要构建一个复杂的软件,它有很多依赖需要安装,不想装怎么办?
如果我们只有一台mac电脑,现在需要在ubunt下构建一个软件包,能怎么办?
目标
在不依赖本地环境的情况下,轻松一键构建目标软件包
方案
Docker一般被我们用于跨环境应用部署,其实这里我们也可以用它进行软件构建,比如构建一个GO或者Cpp的可执行文件;
案例
需求
在一个大型项目中(Higress),构建CPP实现的WasmPlugin.
DockerFile
ARG BUILDER=higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/build-tools-proxy:release-1.12-2021-12-09T23-01-43
FROM $BUILDER as builder
ARG PLUGIN_NAME
WORKDIR /workspace
COPY . .
RUN bazel build //extensions/$PLUGIN_NAME:$PLUGIN_NAME.wasm
FROM scratch as output
ARG PLUGIN_NAME
COPY --from=builder /workspace/bazel-bin/extensions/$PLUGIN_NAME/$PLUGIN_NAME.wasm plugin.wasm
Docker build command
DOCKER_BUILDKIT=1 docker build --build-arg PLUGIN_NAME=request_block \
-t build-tools-proxy:1.0.x \
--output extensions/request_block \
.
总结
本篇文章,我们主要介绍并举例实践了通过 Docker build
命令构建可以自由分发的二进制包!