【问题标题】:Docker, copy files in production and use volume in developmentDocker,在生产中复制文件并在开发中使用卷
【发布时间】:2018-12-23 19:10:58
【问题描述】:

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

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

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

相比之下,在生产中我想从当前项目目录中复制文件。 docker 文件中的 E.G 有 ADD . /app(使用 .dockerignore 文件忽略某些文件夹)。另外,我想安装一个用于持久存储的卷。对于这种情况,我有以下命令:

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

我的问题是只有一个 dockerfile,对于开发命令,一个卷将安装在 /app 以及使用 ADD . /app 复制的文件。我还没有测试在这种情况下会发生什么,但我假设将两者都用于同一个目的地是不正确的。

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

我想到的解决方案:

  • 在开发过程中将项目文件夹挂载到与/app不同的路径并忽略dockerfile在容器中创建的/app目录
  • 有两个 docker 文件,一个复制当前项目,一个不复制。

【问题讨论】:

    标签: docker dockerfile production


    【解决方案1】:

    我的问题是,只有一个 dockerfile,对于开发命令,一个卷将安装在 /app 以及使用 ADD 复制的文件。 /应用程序。我还没有测试在这种情况下会发生什么,但我假设将两者都用于同一个目的地是不正确的。

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

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

    b) docker run 时,将本地应用挂载到容器中的文件夹,这里将永远是你最新的开发代码。

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

    【讨论】:

    • 所以-v $(pwd):/app 覆盖ADD . /app?如果是这样那就完美了!没想到会:D
    • 是的,ADD 仅在您执行 docker build 时执行,-v 将在 docker run 时覆盖容器中的文件夹。你可以试试看。
    • 这听起来合乎逻辑,但是不知道它是这样实现的还是为了抛出错误而实现的。我会测试一下。这是否很常见,或者人们是否有其他方法可以解决这个问题?
    • 对于您的方案,这是最简单的方法。无论如何,如果情况更复杂,人们可能会在 docker build 时将--build-arg 传输到 dockerfile。然后dockerfile可以根据不同的环境做不同的事情(你的场景:控制是否将文件添加到图像)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2019-05-15
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多