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 builddocker tag来完成你的任务。

假设你的本地path中有一个Dockerfile ,你可以运行:

 docker build -t my_image_name . 

这将立即用latest标签。 标签completely arbitrarycompletely arbitrary – 它和Git标签非常相似,只是Git标签不能在不重写历史的情况下被覆盖。 我还应该说, 使用最新的做法是不好的做法 。 为什么? 因为你不知道你正在部署什么 – 如果你总是引用最新的,当你去更新你的服务,并发现一个你没有想到的新的最新 – 你可能会遇到麻烦。

现在, latest被用作默认版本 – 但是您可以通过以下方式轻松地为其指定一个名称:

 docker build -t my_image_name:my_tag . 

最后 – 如果你想重命名这个标签(如果你select的话,你可以用latest标签来取代my_tagmy_tag ,它是任意的,你也可以创build一个完全不同的图片名称。

docker标签my_image_name:my_tag my_new_name:最新。

希望这个清理你的东西!