Как создать именованный и последний тег в Docker?

Предположим, у меня есть изображение, которое я хочу отметить как 0.10.24 (в моем случае это изображение, содержащее Node.js 0.10.24). Я построил этот образ, используя Dockerfile и выполняя docker build и предоставив тег с помощью -t параметр.

Я ожидаю, что однажды у меня появятся дополнительные версии этого образа, поэтому я перезапущу процесс, просто с другим именем тега.

Все идет нормально. Это прекрасно работает и все хорошо.

Но, и именно здесь начинаются проблемы, я также хочу всегда иметь новейшее объявление с тегами latest дополнительно. Поэтому я думаю, что мне нужно дать два имени одному и тому же изображению.

Как мне это сделать? Мне действительно нужно перезапустить docker build снова на той же версии, но на этот раз используйте другой тег, есть ли лучший вариант?

8 ответов

Решение

Вы можете иметь несколько тегов при построении изображения:

$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

Ссылка: https://docs.docker.com/engine/reference/commandline/build/

Как только у вас есть ваше изображение, вы можете использовать

$ docker tag <image> <newName>/<repoName>:<tagName>

1. Постройте и пометьте изображение с помощью creack/node: последнее

$ ID=$(docker build -q -t creack/node .)

2. Добавить новый тег

$ docker tag $ID creack/node:0.10.24

3. Вы можете использовать это и пропустить часть -t из сборки

$ docker tag $ID creack/node:latest

Вот мой скрипт bash

docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest

Затем вы можете удалить непомеченные изображения, если вы перестроили ту же версию с

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

ссылка на сайт

или же

docker rmi $(docker images | grep "^<none>" | tr -s " " | cut -d' ' -f3 | tr '\n' ' ')

или же

Команды очистки: в docker 1.13 введены команды очистки. Чтобы удалить все неиспользуемые контейнеры, изображения, сети и тома:

docker system prune

или индивидуально:

docker container prune

docker image prune

docker network prune

docker volume prune

ID=$(docker build -t creack/node .) не работает для меня с тех пор ID будет содержать вывод из сборки.

Поэтому я использую этот небольшой скрипт BASH:

#!/bin/bash

set -o pipefail

IMAGE=...your image name...
VERSION=...the version...

docker build -t ${IMAGE}:${VERSION} . | tee build.log || exit 1
ID=$(tail -1 build.log | awk '{print $3;}')
docker tag $ID ${IMAGE}:latest

docker images | grep ${IMAGE}

docker run --rm ${IMAGE}:latest /opt/java7/bin/java -version

Просто наберите идентификатор из docker images:

docker build -t creack/node:latest .
ID="$(docker images | grep 'creak/node' | head -n 1 | awk '{print $3}')"
docker tag "$ID" creack/node:0.10.24
docker tag "$ID" creack/node:latest

Не нуждается во временном файле и дает полный вывод сборки. Вы все еще можете перенаправить его на /dev/null или файл журнала.

Чтобы дать тег файлу докера во время команды сборки:

      docker build -t image_name:tag_name .

иначе это даст latestтег к вам изображение автоматически.

Вариация ответа Аарона. Использование sed без временных файлов

#!/bin/bash
VERSION=1.0.0
IMAGE=company/image
ID=$(docker build  -t ${IMAGE}  .  | tail -1 | sed 's/.*Successfully built \(.*\)$/\1/')

docker tag ${ID} ${IMAGE}:${VERSION}
docker tag -f ${ID} ${IMAGE}:latest

Хе, это очень просто, вам просто нужно выполнить следующие шаги:

Итак, для создания и пометки образа в Docker мы можем использовать следующие команды

Сначала удалите свой идентификатор Docker , выполнив приведенную ниже команду.

      docker ps 

Копировать -> Имена

      docker build -t dockerId/Name of your image you want:latest .

Для меня я использую docker build -t condescending_greider/newdoc:latest .

Спасибо за ваше время

Другие вопросы по тегам