docker-compose up不会创建最新标记或docker版本确实如何工作

问题描述 投票:0回答:1

情况:

我已将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

然后第一个命令再次重建新图像:

docker-compose -f env/docker-compose.base.yml -f env/dev/docker-compose.yml up -d

然后我有标签local的新图像。 (而不是latest,但为什么?)

然后我想推动图像。我推了它。然后在Amazon ECR中,我看到带有标签`local'的图片..:/

我真的很困惑,你们如何处理版本化码头图像的流程?

我在登台服务器中有一个脚本,用:latest拉出新图像。

git docker docker-image
1个回答
1
投票

不幸的是,你对docker-compose的使用从根本上说是不正确的。

首先要做的事情是:Docker Compose用作开发工具来部署一堆服务,卷,网络等,以便任何人都可以进入并启动使用您的应用程序所需的环境。

这是唯一的目标 - 是的,当然 - 如果你的撰写文件中有build节,它可以“建立一个图像”;但它实际上只用于然后立即运行该图像。我想你可以像那样构建,然后通过标记重命名你的图像 - 但这不是正确的过程。

其次;如果你只想为你的撰写文件构建图像 - 你想使用docker-compose build;将根据指定的指令构建 - 但不会运行它。

现在 - 实际回答你的问题;你想使用命令docker builddocker 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 tag my_image_name:my_tag my_new_name:latest。

希望这能为您解决问题!

© www.soinside.com 2019 - 2024. All rights reserved.