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