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
复制文件。我没有测试在这种情况下会发生什么,但我假设将两者都用于同一目的地是不正确的。
我的问题是,处理这种情况的最佳做法是什么?
我想到的解决方案:
- 在开发过程中将项目文件夹挂载到不同于
/app
的路径,并忽略由 dockerfile 在容器中创建的 /app 目录
- 有两个 docker 文件,一个复制当前项目,一个不复制。
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文件中添加的内容,所以这可以满足你的要求。你应该尝试一下,不需要任何复杂的解决方案。
我是使用 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
复制文件。我没有测试在这种情况下会发生什么,但我假设将两者都用于同一目的地是不正确的。
我的问题是,处理这种情况的最佳做法是什么?
我想到的解决方案:
- 在开发过程中将项目文件夹挂载到不同于
/app
的路径,并忽略由 dockerfile 在容器中创建的 /app 目录
- 有两个 docker 文件,一个复制当前项目,一个不复制。
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文件中添加的内容,所以这可以满足你的要求。你应该尝试一下,不需要任何复杂的解决方案。