构建可以使用LLVM编译ROS项目的Docker映像

时间:2018-12-27 20:47:45

标签: docker llvm ros

我打算构建一个可以使用LLVM编译ROS项目代码的Docker映像。根据Docker的官方文档https://docs.docker.com/config/containers/multi-service_container/,最好避免在一个容器中使用多种服务。 LLVM和ROS都获得了他们的Docker映像,如何将二者组合为一个并交付?

1 个答案:

答案 0 :(得分:0)

您有一些可用的策略:

合并Dockerfile s

如果您同时有权使用{em> {em} {em} {em} {em} {em} Dockerfile,然后尝试将其中的内容组合成一个Dockerfile您必须选择一条FROM指令,但是其他指令也可以按照您选择的方式进行组合。

FROM更改为一个

如果您只能访问一个 Dockerfile,请尝试更改其FROM指令以从另一个图像继承。例如,ros:kinetic-ros-core-xenial图像继承自ubuntu:xenial;尝试将其更改为继承自reaverproject/llvm

ADD两个压缩包

如果您既无法访问 Dockerfile,则必须进行一些反向工程。首先从每个图像创建一个“空”容器,然后export从其中创建一个文件系统tarball。即......

$ docker container run --name noop-foobar foobar sh -c 'exit 0'
$ docker container export --output foobar.tar noop-foobar
$ docker container rm noop-foobar

...根据需要替换为“ foobar”。

一旦导出了两个文件系统tarball,请通过ADD将它们压缩为scratch图像来创建“基础图像”:

FROM scratch
ADD llvm.tar
ADD ros.tar
...

您很有可能必须手动解决文件系统压缩文件之间的冲突,才能使基本映像按预期工作。

参考文献: