The VOLUME instruction should be used to expose any database storage area,configuration storage,or files/folders created by your docker container. You are strongly encouraged to use VOLUME for any mutable and/or user-serviceable parts of your image.
你会将你的代码存储在卷中吗?
比如你的jar文件.在不重建映像的情况下部署应用程序可能会有点方便.
如果将代码存储在卷中,是否有任何考虑因素?喜欢表现,安全或其他.
>可能无法使用任何后续步骤或子图像更改图像位置的内容(此行为在不同场景和不同版本的docker中似乎不同)
>创建卷的可能性只有一个哈希的名称,这会混淆docker volume ls输出,如果你需要里面的数据,以后很难找到和重用
>对于更改代码,如果将其放入卷中并从新版本的映像重新创建容器,则卷仍将具有代码的旧副本,除非您自己更新该卷(卷的关键功能是持久的)您不希望在迭代之间保留的数据)
我建议将数据放在您在docker run命令行或docker-compose.yml中定义的卷中.在那里定义的卷可以有一个名称或映射回到docker主机上的路径.您可以创建任何文件夹或文件卷,而无需在Dockerfile中定义它.此步骤中定义的卷不会影响图像,允许您扩展图像,而不会被锁定而无法更改目录.
对于您的代码,如果在应用程序开发期间解释(例如javascript)或已编译(例如jar文件),则将代码注入卷是一种常见的最佳实践.您将在容器(而不是Dockerfile)上定义卷,并使用相同的文件名覆盖也复制到映像中的代码或二进制文件.这使您可以快速迭代开发而无需频繁重建映像.根据应用程序的不同,您可以重新加载代码,否则,重新启动容器应该是查看最新更改所需的全部内容.开发完成后,您可以使用当前代码重建映像,并将其发送给可以使用它的人,而无需代码的卷装入.
如果您想了解更多细节,我还有blogged about my concerns with volumes inside of Dockerfiles.