在构建 docker 图像时,我应该在哪里“制作”编译代码? 运行?命令?
Where should I `make` compiled code while building docker image? RUN? CMD?
我正在为一些需要使用 distutils.extension
编译的代码构建一个 docker 图像。我有一个 运行s python setup.py build_ext --inplace
.
的 Makefile
我应该做吗
RUN make
或
CMD ["make"]
我发现 blog post for maven compile which used RUN
. Also this gcc image suggests using RUN gcc -o myapp main.c
, suggesting that RUN
will work to compile my code, but other resources (How to build a c-image in a container, ) 建议在图像中包含已编译的代码使其大小膨胀,这让我觉得我应该使用 CMD
因为直到容器 CMD
才会执行=31=]。
运行 命令在构建图像时执行一次。 CMD 将在每次启动容器时执行。
使用 CMD 将导致每次启动容器时编译您的代码。您的图像是打算在 运行 应用程序上使用,还是只是创建应用程序,然后将其移动到其他地方?对于前者,您肯定会希望在构建图像时使用 运行 编译它。
自从引入 multi stage builds 以来,增加的图像大小不再是一个问题,因为您可以在一个图像中编译您的应用程序,然后只将生成的可执行文件传输到最终图像。
除非有特殊原因,否则在 CMD 短语中编译是没有意义的。
我正在为一些需要使用 distutils.extension
编译的代码构建一个 docker 图像。我有一个 运行s python setup.py build_ext --inplace
.
我应该做吗
RUN make
或
CMD ["make"]
我发现 blog post for maven compile which used RUN
. Also this gcc image suggests using RUN gcc -o myapp main.c
, suggesting that RUN
will work to compile my code, but other resources (How to build a c-image in a container, CMD
因为直到容器 CMD
才会执行=31=]。
运行 命令在构建图像时执行一次。 CMD 将在每次启动容器时执行。
使用 CMD 将导致每次启动容器时编译您的代码。您的图像是打算在 运行 应用程序上使用,还是只是创建应用程序,然后将其移动到其他地方?对于前者,您肯定会希望在构建图像时使用 运行 编译它。
自从引入 multi stage builds 以来,增加的图像大小不再是一个问题,因为您可以在一个图像中编译您的应用程序,然后只将生成的可执行文件传输到最终图像。
除非有特殊原因,否则在 CMD 短语中编译是没有意义的。