gpt4 book ai didi

Dockerfile 从镜像复制到主机

转载 作者:行者123 更新时间:2023-12-01 11:14:27 25 4
gpt4 key购买 nike

我有一个 Dockerfile,其中我首先在一层编译 Mosquitto 服务器,然后使用 COPY 将身份验证插件的源文件复制到镜像中,最后运行该插件的编译。

总而言之,生成的图像很适合在容器中使用,然后在加载该插件的情况下运行 Mosquitto 服务器。

我想修改这个插件并通过重新运行Dockerfile的构建来重新编译它。由于第一层没有修改,它只是复制修改后的文件并再次运行编译。

我现在要做的是从新镜像中提取插件(.so 文件)并将其移动到主机上的挂载目录,这样当前运行的 Mosquitto 服务器只需要重新启动。

是否可以反向使用 COPY 命令,以便它将编译后的插件复制到指定的主机目录,以便我可以删除新创建的镜像?

或者这完全是一种糟糕的方法?我是否应该更好地执行到正在运行的容器并让它重建插件(这将限制我在运行服务器的机器上构建插件)?

最佳答案

我不知道您正在使用的 sepcific 编译器工具的详细信息,但我想我明白您要实现的目标:

我不会在 Dockerfile 中包含 COPY 命令。 Dockerfile 必须只包含必要的指令,以包含执行编译过程所需的工具和依赖项的镜像,并且可能包含具有特定编译顺序的 shell 脚本。

现在你运行 docker build你有你的形象,我们称之为 mosq .让我们假设:

  • 您在本地计算机中的源代码位于 /home/me/my-source-code
  • 编译后,您将在子文件夹中得到结果 dist该文件夹的:/home/me/my-source-code/dist/result.so
  • 您的图片有脚本 /compile.sh编译 /compilation 中的源代码(该文件夹在图像中应该是空的)

  • 然后,您运行图像安装卷参数: /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 脚本,编译器从某处获取代码并运行。使用该文件夹中的代码安装卷。如果编译器在其他地方输出结果,请从主机安装另一个卷以在那里获得结果。

    关于Dockerfile 从镜像复制到主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54498167/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com