代码之家  ›  专栏  ›  技术社区  ›  Eladian

Docker,在生产中复制文件,在开发中使用卷

  •  2
  • Eladian  · 技术社区  · 6 年前

    我刚开始使用Docker进行开发,但想在我的最新项目中尝试一下,遇到了几个问题。

    我有一个场景,我想将当前项目目录作为卷链接到开发模式下正在运行的Docker容器,这样就可以在本地完成文件更改,而不必每次重新启动容器。为此,我有以下命令:

    docker run --name app_instance -p 3100:80 -v $(pwd):/app appimage

    相反,在生产环境中,我希望从当前项目目录复制文件。 例如在docker文件中 ADD . /app (使用.dockerignore文件忽略某些文件夹)。另外,我想挂载一个用于持久存储的卷。对于这种情况,我有以下命令:

    docker run --name app_instance -p 80:80 -v ./filestore:/app/filestore appimage

    我的问题是,只有一个dockerfile,对于development命令,卷将在 /app 以及复制的文件 加上。/应用程序 .我还没有测试在这个场景中会发生什么,但我假设在同一个目的地同时使用这两个选项是不正确的。

    我的问题是,处理这种情况的最佳做法是什么?

    我想到的解决方案是:

    • 将项目文件夹装载到不同的路径 /应用程序 在开发过程中,忽略dockerfile在容器中创建的/app目录
    • 有两个docker文件,一个复制当前项目,另一个不复制。
    1 回复  |  直到 6 年前
        1
  •  0
  •   atline    6 年前

    我的问题是,只有一个dockerfile,对于development命令,一个卷将在/app上挂载,而且文件也将用add复制。/应用程序。我还没有测试在这个场景中会发生什么,但我假设在同一个目的地同时使用这两个选项是不正确的。

    对于这种情况,它将执行以下操作:

    a)Docker生成时,将主机服务器中的代码添加到容器中的app文件夹中。

    b)当Docker运行时,将本地应用程序装载到容器中的文件夹中,这里始终是您的最新开发代码。

    但它将覆盖您在dockerfile中添加的内容,因此这可以满足您的要求。你应该试试,不需要任何复杂的解决方案。