将非空的Docker容器目录暴露给主机

时间:2019-05-02 14:35:48

标签: docker

由于可以拥有一个不错的Docker容器来运行整个构建,因此如果主机可以访问该容器用于构建和运行代码的工具,那就太好了。

想象一下以下用例:

  1. 想象一下,您正在使用OpenJDK 12和Maven 3.6.1开发Java应用程序,以构建,运行所有测试并将整个应用程序打包到可执行的.jar文件中。
  2. 您创建一个充当“构建容器”的Docker容器。此容器已安装OpenJDK 12和Maven 3.6.1,可用于构建和打包整个应用程序(您可以在开发过程中在本地使用它,也可以在构建服务器上使用它,每当代码更改时触发构建。推)。
  3. 现在,您实际上想开始编写一些代码...自然,您将继续在自己喜欢的IDE(IntelliJ IDEA?)中打开您的项目,配置项目SDK,以及需要执行的其他任何操作配置并开始摇摆!

    能够告诉IntelliJ(Eclipse,NetBeans,VSCode等)仅使用与构建容器使用相同版本的相同工具,这不是很奇妙吗?当然,您可以告诉您的IDE将构建委托给“构建容器”(Docker),但是如果没有设置适当的“ Project SDK”(和其他配置),那么您将被“暗中编码” ...您会失去使用功能强大的IDE进行开发的几乎所有好处。没有代码提示,没有静态代码分析,等等,等等。等等。本质上,您酷炫的IDE简化为一个简单的文本编辑器,该编辑器至少可以通过调用构建容器来触发完整构建。

    为了继续从众多IDE功能中受益,您需要安装OpenJDK 12,Maven 3.6.1以及所需的其他任何工具(实质上,您已经花了很多时间来配置Docker映像的工具)然后告诉IDE“这些”是它应用于“此”项目的工具。

很不幸,在主机上(本地)意外安装错误版本的工具太容易了,这有可能导致“它在我的机器上运行”综合症。当然,一旦通过构建容器/服务器使用适当的工具和版本构建了项目,您仍然会在以后发现问题,但是……更不用说当必须维护整个动物园时,烦人的事情了。当您碰巧在多个项目上工作时(一个项目需要JDK 8,另一个JDK 11,另一个使用Gradle),在您的计算机上使用其版本的工具(+可能必须处理各种时髦的不兼容性或所有工具之间的相互作用)。 ,而不是Maven,那么您还需要Node 10,Angular 5,还需要6,等等,等等。

到目前为止,我只遇到过各种时髦的解决方法,但是没有“不错”的解决方案。到目前为止,我发现最能容忍的是从主机上的容器中手动公开(复制)工具(例如:定义两者共享的卷,然后执行手动脚本,该脚本不会将工具从容器复制到共享中卷目录,以便主机也可以访问它们)...虽然这可行,但是不幸的是,它涉及一个手动步骤,这意味着每当容器更新时(例如:使用某些工具的新版本,甚至使用了其他版本的工具,完全新开发者),则开发人员需要记住执行手动复制步骤(明确执行任何脚本),以使所有最新和最棒的内容再次可供主机使用(当然,这可能意味着将IDE配置更新为-通过使这些工具驻留在非版本专用路径中,可以在很大程度上减轻这种情况(至少是版本升级)。

有人知道如何实现吗?虚拟机是不可能的,似乎有点过分……我不明白为什么不能以只读的方式访问Docker容器资源,并且重用和引用< / em>在开发和构建过程中使用适当的工具。

0 个答案:

没有答案