Dan*_*l F 2 copy docker docker-build
我有一个Dockerfile,其中我首先在一个层中编译Mosquitto服务器,然后使用COPY将身份验证插件的源文件复制到映像中,最后运行该插件的编译。
总而言之,生成的图像很适合在容器中使用,然后容器中装有该插件运行的Mosquitto服务器。
我想修改此插件并通过重新运行Dockerfile的构建来重新编译它。由于第一层未修改,因此它仅复制修改后的文件并再次运行编译。
我现在要做的是从新映像中提取插件(.so文件),并将其移动到主机上的挂载目录,这样,当前正在运行的Mosquitto服务器将只需要重新启动即可。
是否可以反向使用COPY命令,以便将编译后的插件复制到指定的主机目录,以便随后删除新创建的映像?
还是这完全是一种不好的做法?我是否应该更好地执行到正在运行的容器中并让其重新构建插件(这将使我只能在运行服务器的计算机上构建插件)?
我不知道您正在使用的特定编译器工具的详细信息,但是我想我知道您正在尝试实现什么:
我不会在Dockerfile中包含COPY命令。Dockerfile必须仅包含必要的指令,以具有具有执行编译过程所需的工具和依赖项的映像,并且可能包含具有特定编译顺序的shell脚本。
现在您可以运行了docker build,有了图像,我们称它为mosq。假设:
/home/me/my-source-codedist文件夹中:/home/me/my-source-code/dist/result.so/compile.sh,该脚本可以编译其中存在的源代码/compilation(该文件夹在图像中应该为空)然后,你运行像安装体积PARAM:/home/me/my-source-code在/compilation容器内
假设所有上述几点,该docker run命令应类似于以下内容:
docker run -d --name my-compiler -v /home/me/my-source-code:/source mosq /compile.sh
等等,容器将以静默方式运行并死亡,然后,您将在其中进行编译 /home/me/my-source-code/dist/result.so
具体细节可能会有所不同,具体取决于细节,但是我希望您能想到:准备映像中的所有内容,以便执行单个sh脚本,编译器从某个地方获取代码并运行。使用该文件夹中的代码挂载卷。如果编译器将结果输出到其他地方,请从主机上装入另一个卷以在那获得结果。
| 归档时间: |
|
| 查看次数: |
3634 次 |
| 最近记录: |