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

Docker, copy files in production and use volume in development

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

我有一个场景,我想 link 当前项目目录作为一个卷到开发模式下的 运行 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

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

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

我想到的解决方案:

My problem is that with only one dockerfile, for the development command a volume will be mounted at /app and also files copied with ADD . /app. I haven't tested what happens in this scenario, but I am assuming it is incorrect to have both for the same destination.

对于这个场景,会做如下操作:

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

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

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