对于代码使用卷,这是一个docker最佳实践吗?

Cyp*_*ine 7 docker

VOLUME指令应用于公开由docker容器创建的任何数据库存储区域,配置存储或文件/文件夹.强烈建议您将VOLUME用于图像的任何可变和/或用户可维修部分.

你会将你的代码存储在卷中吗?

比如你的jar文件.在不重建映像的情况下部署应用程序可能会有点方便.
如果将代码存储在卷中,是否有任何考虑因素?喜欢表现,安全或其他.

BMi*_*tch 9

我不建议VOLUME在Dockerfile中使用当前版本的docker的任何语句(当前是自引入命名卷以来的任何版本的docker).包含VOLUME命令有多个缺点,包括:

  • 可能无法使用任何后续步骤或子图像更改图像位置的内容(此行为在不同场景和不同版本的docker中似乎不同)
  • 创建卷的可能只有一个哈希的名称混乱docker volume ls输出,如果你需要内部的数据很难找到和重用
  • 对于更改代码,如果将其放在卷中并从新版本的映像重新创建容器,则卷仍将具有代码的旧副本,除非您自己更新该卷(卷的关键功能是持久性数据)您不希望在迭代之间保持不变)

我建议将数据放在您在docker run命令行或docker-compose.yml中定义的卷中.在那里定义的卷可以有一个名称或映射回到docker主机上的路径.您可以创建任何文件夹或文件卷,而无需在Dockerfile中定义它.此步骤中定义的卷不会影响图像,允许您扩展图像,而不会被锁定而无法更改目录.

对于您的代码,如果在应用程序开发期间解释(例如javascript)或已编译(例如jar文件),则将代码注入卷是一种常见的最佳实践.您将在容器(而不是Dockerfile)上定义卷,并使用相同的文件名覆盖也复制到映像中的代码或二进制文件.这使您可以快速迭代开发而无需频繁重建映像.根据应用程序的不同,您可以重新加载代码,否则,重新启动容器应该是查看最新更改所需的全部内容.开发完成后,您可以使用当前代码重建映像,并将其发送给可以使用它的人,而无需代码的卷装入.

如果您想了解更多有关此内容的详细信息,我还在博客中写了我对Dockerfiles中卷的担忧.