【问题标题】:How to share apt-package across Docker containers如何跨 Docker 容器共享 apt-package
【发布时间】:2019-02-26 01:53:40
【问题描述】:

我想使用 docker 来帮助我使用 ROS(机器人操作系统)开发和部署包/系统保持井井有条。

我想为各种软件提供多个容器/映像,以及一个包含所有 ROS 依赖项的单个映像。如何让一个容器使用我的依赖主容器中的 apt-package?

例如,我可能有以下容器:

  • MyRosBase: sudo apt-get install 我需要的所有 ros 依赖项(有很多)。设置一些其他环境变量和各种配置项。
  • MyMoveApplication:使用来自 MyRosBase 的依赖项并将任何额外和特定的依赖项安装到此映像。然后运行移动机器人手臂的软件。
  • MySimulateApplication:使用来自 MyRosBase 的依赖项并将任何额外和特定的依赖项安装到此映像。然后运行模拟机械臂的软件。

如何在另一个容器中使用容器中的 apt 包,而无需每次都在每个容器上重新安装它们?

【问题讨论】:

  • 你可以让你的下游镜像来自一个通用的基础镜像。

标签: docker ros


【解决方案1】:

您可以使用 Dockerfiles 创建自己的镜像作为基础镜像。

例子:

mkdir ROSDocker
cd ROSDocker
vim Dockerfile-base

FROM debian:stretch-slim
RUN apt-get install dep1 dep2 depn

sudo docker build -t yourusername/ros-base:0.1 -f Dockerfile-base . 

构建完成后,您可以从此基础映像创建另一个 docker 文件。

FROM yourusername/ros-base:0.1
RUN apt-get install dep1 dep2 depn

现在构建第二个图像:

sudo docker build -t yourusername/mymoveApplication:0.1 -f Dockerfile-base .

现在您有了移动应用程序的映像,您从该映像运行的每个容器都将安装所有依赖项。

您可以拥有 docker 图像存储库来管理您构建的图像并在人员/环境之间共享。

这个例子可以展开多次。

【讨论】:

  • 好的。需要说明的是,如果两个不同的映像来自公共基础映像,那么公共基础不会 apt-get install 两次?包会被缓存,而且只会发生一次?
  • 有一个共同的基础,你的其他 Dockerfiles 从它开始(作为一个预编译的二进制文件,如果你想这样想的话)。当你从某个东西开始时,它不会重复基础镜像的步骤。
  • 太好了,这就是我想要验证的。现在,如果修改基础镜像的 DockerFile,那么只要我再次构建它,镜像就会被“重新编译”?
  • 下游镜像也需要重建。
  • 你能不能说清楚一点,当使用FROM yourusername/ros-base:0.1时,你不需要再次安装相同的依赖项(dep1 dep2 depn),所以它应该是RUN apt-get install depA depB depZ(或其他不同的东西) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多