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

Ela*_*ian 8 production docker dockerfile

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

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

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

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

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

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

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

我想到的解决方案:

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

atl*_*ine 5

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

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

a) 在 docker 构建时将主机服务器中的代码添加到容器中的应用程序文件夹中。

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

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

  • 是的,“ADD”仅在执行“docker build”时执行,“-v”将在“docker run”时覆盖容器中的文件夹。你可以尝试一下。 (3认同)