我打算构建一个可以使用LLVM编译ROS项目代码的Docker映像。根据Docker的官方文档https://docs.docker.com/config/containers/multi-service_container/,最好避免在一个容器中使用多种服务。 LLVM和ROS都获得了他们的Docker映像,如何将二者组合为一个并交付?
答案 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
...
您很有可能必须手动解决文件系统压缩文件之间的冲突,才能使基本映像按预期工作。
参考文献: