gpt4 book ai didi

docker - 对代码使用卷是 docker 最佳实践吗?

转载 作者:IT老高 更新时间:2023-10-28 21:24:50 25 4
gpt4 key购买 nike

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文件。在不重建镜像的情况下部署应用程序可能会更方便。
如果将代码存储在卷中,是否有任何考虑?比如性能、安全或其他。

最佳答案

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

  • 可能无法使用任何后续步骤或子图像更改图像该位置的内容(此行为在不同场景和不同版本的 docker 中似乎有所不同)
  • 可能会使用名称的散列创建卷,这会使 docker volume ls 输出变得困惑,如果您需要其中的数据,以后很难找到和重用
  • 对于您更改的代码,如果您将其放在一个卷中并从新版本的镜像重新创建您的容器,则该卷仍将包含您的代码的旧副本,除非您自己更新该卷(卷的关键功能是您不想在迭代之间保留的持久数据)

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

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

我也有blogged about my concerns with volumes inside of Dockerfiles如果您想了解更多详情。

关于docker - 对代码使用卷是 docker 最佳实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com