Q1:我有一个开发和生产环境,如下:
开发环境:主机CPU: x86-64,主机os: ubuntu7.6,docker container os: CentOS 18.04。生产环境:生产机CPU: x86-64,host-os: Ubuntu 18.04。
我想知道,如果我在容器内编译一个程序(依赖于boost等库和CUDA、USB等驱动程序),并将编译后的二进制文件传输到生产环境(已安装所有必需的库和设备驱动程序),是否可以直接执行该二进制文件而无需重新编译?或者,做这样的事情有风险吗?
Q2:如果开发环境更改为:
生产环境:生产机CPU: arm64,host-os: ubuntu18.04。
有没有办法让我仍然可以在容器(像arm64模拟器env)中完成所有的编译工作,并直接在生产环境中运行二进制文件?
发布于 2021-01-13 09:10:46
问题1的答案是:是的,你可以。如果你在一个docker容器中编译你的代码,你将需要安装很多不必要的库来编译代码,你最终会得到一个大的图像。我通常会构建一个docker镜像来运行编译后的代码,然后将我的二进制文件复制到其中。您可能希望创建一个基本映像,然后使用该基本映像构建您的服务,这样您服务器中的所有服务都将共享基本映像,您可以节省更多空间。
Q2的答案:你可以使用docker多架构支持。https://docs.docker.com/docker-for-mac/multi-arch/
通过这种方式,您可以为所需的所有cpu体系结构构建映像。但是,您可能需要一个更复杂的Dockerfile来检查体系结构并更改构建命令,以便为每个体系结构正确编译代码(或为目标体系结构复制正确的编译二进制文件)。
https://stackoverflow.com/questions/61903896
复制相似问题