在docker中构建一个二进制文件,并装载回主机



我有一个要求,我需要在docker容器中构建一个可执行的二进制文件,因为在不同的环境中构建二进制文件很困难。我有一个我想要的示例docker-compose,并试图将其转换为Dockerfile。码头工人组成如下。


version: "3.7"
services:
wasm_compile_update:
image: envoyproxy/envoy-build-ubuntu:e33c93e6d79804bf95ff80426d10bdcc9096c785
command: |
bash -c "bazel build //examples/wasm-cc:envoy_filter_http_wasm_updated_example.wasm 
&& cp -a bazel-bin/examples/wasm-cc/* /build"
working_dir: /source
volumes:
- ../..:/source
- ./lib:/build

什么是等效的Dockerfile??我试图使用CMD,但无法使其发挥作用。由于我的最后期限很紧,任何帮助都将不胜感激。感谢

您可以创建一个dockerfile,该文件中有正确的工具来构建二进制文件,但您仍然必须使用dockerrun来进行构建,因为您不能在构建过程中装载驱动器,也不能在构建期间从映像中复制东西。然而,你可以这样做:

码头文件

from envoyproxy/envoy-build-ubuntu:e33c93e6d79804bf95ff80426d10bdcc9096c785
workdir /examples
entrypoint ["bazel", "build"]

像这样构建:

docker build -t MyBuildkit .

并像这样运行:

docker run -it --rm 
-v $(pwd)/examples:/examples 
-v $(pwd)/bin:/bazel-bin/examples/wasm-cc 
MyBuildkit /examples/wasm-cc:envoy_filter_http_wasm_updated_example.wasm

现在,我对这里的目录还不太了解,不知道这是否正确,但要点就在那里。

第一个卷装载(-v(用于将源代码(我假设是examples(装载到容器中的一个文件夹(我也称之为examples(中。最后一个bin目录也被装载在第二个装载中,我已经将其装载到一个名为bin的主机文件夹中,并且我假设您的复制命令包含二进制文件,因此它将映射到容器中的/bazel-bin/examples/wasm-cc

我所做的另一个假设是关于发送到容器的命令。我已经将入口点设置为您的编译器(basel build(,并将要构建的东西的名称(/examples/wasm-cc:envoy_filter_http_wasm_updated_example.wasm(传递给它。

因为我根本不了解巴塞尔,所以我完全有可能在这些细节中有一个或多个错误,但总体模式是正确的。装载您的sourcebin,将构建的目标传递到entrypoint,然后构建到bin

最新更新