docker-compose up不会创build最新的标签,或者docker版本控制是如何工作的
情况:
我已经从gitlab克隆现有的代码到我的本地机器。 然后我做了:
docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d
那么我有一个标签local
的新形象。
然后我在Dockerfile中改变一些东西,然后把代码推到gitlab。 然后我manuelly删除图像:
docker rmi -f image_hash
然后第一个命令再次重build新的图像:
docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d
那么我有标签local
新形象。 (而不是latest
,但为什么?)
那么我想要推动这个形象。 我推了它。 然后在亚马逊ECR,我看到与标签“本地”的形象..:/
我真的很困惑,你们如何处理版本化docker图像的stream程?
我在登台服务器上有一个脚本,用于最新的图像。
不幸的是,你使用docker-compose从根本上是不正确的。
首先要做的事情是:Docker Compose被用作部署一堆服务,卷,networking等的开发工具,这样任何人都可以进入并启动使用您的应用程序所需的环境。
这是唯一的目标 – 是的,当然 – 如果您在撰写文件中有一个build
节,它可以“构build一个图像”; 然而它只是用于立即运行该图像。 我想你可以像这样build立,然后通过标记重新命名你的图像 – 但这不是正确的过程。
其次; 如果您只想为您的撰写文件构build图像 – 您想使用docker-compose build
; 这将build立给定的指示 – 但不会运行它。
现在 – 实际回答你的问题; 你想使用docker build
和docker tag
来完成你的任务。
假设你的本地path中有一个Dockerfile
,你可以运行:
docker build -t my_image_name .
这将立即用latest
标签。 标签completely arbitrary
是completely arbitrary
– 它和Git标签非常相似,只是Git标签不能在不重写历史的情况下被覆盖。 我还应该说, 使用最新的做法是不好的做法 。 为什么? 因为你不知道你正在部署什么 – 如果你总是引用最新的,当你去更新你的服务,并发现一个你没有想到的新的最新 – 你可能会遇到麻烦。
现在, latest
被用作默认版本 – 但是您可以通过以下方式轻松地为其指定一个名称:
docker build -t my_image_name:my_tag .
最后 – 如果你想重命名这个标签(如果你select的话,你可以用latest
标签来取代my_tag
, my_tag
,它是任意的,你也可以创build一个完全不同的图片名称。
docker标签my_image_name:my_tag my_new_name:最新。
希望这个清理你的东西!