docker-compose up 不创建最新标签或 docker 版本控制如何真正起作用
docker-compose up doesnot create latest tag or how docker versioning really works
情况:
我已将现有代码从 gitlab 克隆到我的本地计算机中。然后我做了:
docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d
然后我有一个带有标签 local
的新图像。
然后我在 Dockerfile 中更改一些内容,然后将代码推送到 gitlab。然后我手动删除图像:
docker rmi -f image_hash
然后第一个命令再次重建新图像:
docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d
然后我有了带有标签 local
的新图像。 (而不是 latest
,但为什么呢?)
那我要推图了。我推了它。然后在 Amazon ECR 中,我看到带有“local”标签的图像.. :/
我真的很困惑,你们如何处理版本控制 docker 图片的流程?
我在暂存服务器中有一个脚本可以使用 :latest
拉取新图像。
不幸的是,您对 docker-compose 的使用从根本上是错误的。
首先要做的事情是:DockerCompose 用作开发工具来部署一堆服务、卷、网络等,以便任何人都可以进入并启动使用所需的环境你的申请。
这是唯一的目标 - 是的,当然 - 如果您的撰写文件中有 build
节,它可以 "build an image";然而,它实际上只用于然后立即 运行 那个图像。我猜你 可以 像那样构建,然后通过标记重命名你的图像 - 但这不是正确的过程。
其次;如果您只想 为您的撰写文件构建图像 - 您想要使用 docker-compose build
;它将根据指定的说明构建 - 但不会 运行 它。
现在 - 实际回答您的问题;您想使用命令 docker build
和 docker tag
来完成您的任务。
假设在你的本地路径中有一个 Dockerfile
,你会 运行:
docker build -t my_image_name .
这将立即用 latest
标记它。标签是 completely arbitrary
- 它与 Git 标签非常相似,除了 Git 标签在不重写历史记录的情况下无法被覆盖。我还应该声明 使用最新的是不好的做法 。为什么?因为你不知道你在部署什么——如果你总是引用最新的,当你去更新你的服务时它发现了一个你没想到的新的最新的——你可能有麻烦了。
现在,latest
被用作默认值 - 但您可以通过以下方式轻松地为其命名:
docker build -t my_image_name:my_tag .
最后 - 如果您想重命名该标签(如果您选择,可以在此处将 my_tag
替换为 latest
- 同样,除了默认设置之外,它是任意的。您也可以如果您愿意,可以创建一个完全不同的图像名称。
docker 标签 my_image_name:my_tag my_new_name:latest .
希望这能帮您解决问题![=22=]
情况:
我已将现有代码从 gitlab 克隆到我的本地计算机中。然后我做了:
docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d
然后我有一个带有标签 local
的新图像。
然后我在 Dockerfile 中更改一些内容,然后将代码推送到 gitlab。然后我手动删除图像:
docker rmi -f image_hash
然后第一个命令再次重建新图像:
docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d
然后我有了带有标签 local
的新图像。 (而不是 latest
,但为什么呢?)
那我要推图了。我推了它。然后在 Amazon ECR 中,我看到带有“local”标签的图像.. :/
我真的很困惑,你们如何处理版本控制 docker 图片的流程?
我在暂存服务器中有一个脚本可以使用 :latest
拉取新图像。
不幸的是,您对 docker-compose 的使用从根本上是错误的。
首先要做的事情是:DockerCompose 用作开发工具来部署一堆服务、卷、网络等,以便任何人都可以进入并启动使用所需的环境你的申请。
这是唯一的目标 - 是的,当然 - 如果您的撰写文件中有 build
节,它可以 "build an image";然而,它实际上只用于然后立即 运行 那个图像。我猜你 可以 像那样构建,然后通过标记重命名你的图像 - 但这不是正确的过程。
其次;如果您只想 为您的撰写文件构建图像 - 您想要使用 docker-compose build
;它将根据指定的说明构建 - 但不会 运行 它。
现在 - 实际回答您的问题;您想使用命令 docker build
和 docker tag
来完成您的任务。
假设在你的本地路径中有一个 Dockerfile
,你会 运行:
docker build -t my_image_name .
这将立即用 latest
标记它。标签是 completely arbitrary
- 它与 Git 标签非常相似,除了 Git 标签在不重写历史记录的情况下无法被覆盖。我还应该声明 使用最新的是不好的做法 。为什么?因为你不知道你在部署什么——如果你总是引用最新的,当你去更新你的服务时它发现了一个你没想到的新的最新的——你可能有麻烦了。
现在,latest
被用作默认值 - 但您可以通过以下方式轻松地为其命名:
docker build -t my_image_name:my_tag .
最后 - 如果您想重命名该标签(如果您选择,可以在此处将 my_tag
替换为 latest
- 同样,除了默认设置之外,它是任意的。您也可以如果您愿意,可以创建一个完全不同的图像名称。
docker 标签 my_image_name:my_tag my_new_name:latest .
希望这能帮您解决问题![=22=]