Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何跨Docker容器共享apt包_Docker_Ros - Fatal编程技术网

如何跨Docker容器共享apt包

如何跨Docker容器共享apt包,docker,ros,Docker,Ros,我想使用docker帮助我使用ROS(机器人操作系统)开发和部署软件包/系统 我希望为各种软件提供多个容器/映像,以及一个具有所有ROS依赖项的映像。如何让一个容器使用从依赖项主容器打包的apt 例如,我可能有以下容器: MyRosBase:sudo apt get install我需要的所有ros依赖项(有很多)。设置一些其他环境变量和各种配置项 MyMoveApplication:使用MyRosBase中的依赖项,并将任何额外的和特定的依赖项安装到此映像。然后运行移动机器人手臂的软件 My

我想使用docker帮助我使用ROS(机器人操作系统)开发和部署软件包/系统

我希望为各种软件提供多个容器/映像,以及一个具有所有ROS依赖项的映像。如何让一个容器使用从依赖项主容器打包的apt

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

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

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

您可以使用DockerFile创建自己的映像,作为基本映像

例如:

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 image repository来管理构建的图像并在人/环境之间共享


此示例可以扩展多次。

您可以使用DockerFile创建自己的图像作为基础图像

例如:

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 image repository来管理构建的图像并在人/环境之间共享


此示例可以展开多次。

您可以使下游图像来自公共基础图像。您可以使下游图像来自公共基础图像。确定。需要明确的是,如果两个不同的映像来自公共基础映像,那么公共基础将不会安装两次?包将被缓存,并且只会发生一次?有一个公共基,而其他DockerFile则从它开始(如果您愿意这样想的话,它是一个预编译的二进制文件)。当你从某个东西开始时,它不会重复基本图像的步骤。太好了,这就是我想要验证的。现在,如果修改了基础映像的DockerFile,那么只要我重新构建它,该映像就会被“重新编译”?您也需要重新构建下游映像。您是否可以更清楚地说明,当从您的用户名/ros base:0.1使用
时,您不需要再次安装相同的依赖项(
dep1 dep2 depn
),所以它应该是
运行apt-get-install-depA-depB-depZ
(或者其他不同的东西)。好的。需要明确的是,如果两个不同的映像来自公共基础映像,那么公共基础将不会安装两次?包将被缓存,并且只会发生一次?有一个公共基,而其他DockerFile则从它开始(如果您愿意这样想的话,它是一个预编译的二进制文件)。当你从某个东西开始时,它不会重复基本图像的步骤。太好了,这就是我想要验证的。现在,如果修改了基础映像的DockerFile,那么只要我重新构建它,该映像就会被“重新编译”?您也需要重新构建下游映像。您是否可以更清楚地说明,当从您的用户名/ros base:0.1使用
时,您不需要再次安装相同的依赖项(
dep1 dep2 depn
),所以它应该是
运行apt get install depA depB depZ
(或者其他不同的东西)。