【问题标题】:Should I Set docker image version in docker-compose?我应该在 docker-compose 中设置 docker 映像版本吗?
【发布时间】:2022-01-22 04:51:13
【问题描述】:

假设我有docker-compose.yml 用于添加mongo 作为容器,在图像名称前面设置verion 还是默认让它成为最新的是一件好事吗?

version: '3.8'
services:
  mongo:
    image: mongo:4.0
    ports:
      - "27017:27017"

究竟应用在开发和生产方面的优缺点是什么?

image: mongo:4.0 VS image: mongo

【问题讨论】:

  • 在生产中,您应该始终对依赖项/图像进行版本控制。否则,您将有未定义的行为。在开发中,你可以使用 latest,当你想部署到 prod 时,你使用你在 dev 中当前最新的版本并固定它。

标签: docker docker-compose dockerfile


【解决方案1】:

像您所做的那样包含版本号是一种很好的做法。我通常会使用仅主要的图像标签 (mongo:4) 或主要+次要标签 (mongo:4.4),但不会使用超级特定版本 (mongo:4.4.10),除非您可以自动定期更新它。

通常,Docker Hub 映像会定期进行重建;但是,在给定的补丁行中,只有最新版本才能获得补丁。假设debian:focal 基础映像获得了安全更新。在撰写本文时,mongo 图像具有 44.44.4.10 标记,因此所有这些都会被重建,但 例如 4.4.9 不会。因此,使用过于具体的版本可能意味着您不会获得重要的更新。

相反,使用latest 意味着您根本不在乎您拥有什么版本。您的问题提到了mongo:4.0,但mongo:latest 目前是5.0.5 版;该主要版本升级是否存在兼容性问题?

这里的主要规则是:

  1. 如果您在本地已经有一些image:tag,则启动容器不会再次拉取它,即使它已在存储库中更新。
  2. mongo:4.4 这样的次要版本标签将继续获得更新,只要它们受支持,但您可能需要docker-compose pull 才能获得更新。
  3. 补丁版本标签,如mongo:4.4.9,一旦有更新的补丁版本,就会停止更新,即使你是docker pull mongo:4.4.9
  4. 使用像...:latest 这样的浮动标签或次要版本标签可能意味着不同的系统会获得不同的映像版本,具体取决于它们在本地的内容。 (您的同事可能拥有与您不同的 mongo:latest;这在 Kubernetes 等集群环境中是一个更大的问题。)

【讨论】:

    【解决方案2】:

    我觉得把version放在图片名前面是个好东西,可以更方便管理,但是要注意定期通过更新,避免出现漏洞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多