создать образ докера с несколькими тегами


160

Как можно прикрепить несколько тегов к одному образу Docker? Можно ли создать несколько тегов с помощью одного Dockerfile ?

Это возможно, так или иначе ; например, docker pull ubuntuвы получите несколько изображений, некоторые из которых имеют несколько тегов:

ubuntu                  13.10               9f676bd305a4        2 weeks ago         182.1 MB
ubuntu                  saucy               9f676bd305a4        2 weeks ago         182.1 MB
ubuntu                  raring              eb601b8965b8        2 weeks ago         170.2 MB
ubuntu                  13.04               eb601b8965b8        2 weeks ago         170.2 MB
ubuntu                  12.10               5ac751e8d623        2 weeks ago         161.4 MB
ubuntu                  quantal             5ac751e8d623        2 weeks ago         161.4 MB
ubuntu                  10.04               9cc9ea5ea540        2 weeks ago         183 MB
ubuntu                  lucid               9cc9ea5ea540        2 weeks ago         183 MB
ubuntu                  12.04               9cd978db300e        2 weeks ago         204.7 MB
ubuntu                  latest              9cd978db300e        2 weeks ago         204.7 MB
ubuntu                  precise             9cd978db300e        2 weeks ago         204.7 MB

Ответы:


84

Вы не можете создавать теги с помощью Dockerfiles, но вы можете создать несколько тегов на своих изображениях через командную строку.

Используйте это, чтобы перечислить идентификаторы ваших изображений:

$ docker images

Затем отметьте:

$ docker tag 9f676bd305a4 ubuntu:13.10
$ docker tag 9f676bd305a4 ubuntu:saucy
$ docker tag eb601b8965b8 ubuntu:raring
...

4
Главное - в Dockerfile, эти команды нельзя было записать в Dockerfile.
Daniel YC Lin

1
См. Этот ответ, чтобы узнать, как избежать необходимости вручную определять идентификатор.
Джонатон Рейнхарт

483

Начиная с версии 1.10 , теперь вы можете добавлять сразу несколько тегов при сборке:

docker build -t name1:tag1 -t name1:tag2 -t name2 .

Источник: Добавить возможность добавления нескольких тегов с помощью сборки докеров


8
Я думаю, что это более правильный ответ для простоты использования в процессе сборки
brasskazoo

Это неправильно, потому что в тегах ubuntu для другой версии содержимое неоднозначно.
Daniel YC Lin

3
Как мне заставить эти теги отображаться в репозитории после нажатия? К сожалению, в репозитории появляется только тот, который я использую в команде push.
Chechnology

5
Даже в конце 2018 года Docker все еще остается невероятно незрелым в этом отношении, каждый «тег» по- прежнему нужно вставлять отдельно, несмотря на то, что он прикреплен к одному и тому же образу. Здесь требуется некоторая возможность, аналогичная тегам Git.
Эд Рэндалл

1
@EdRandall это не имеет значения, потому что, если изображение уже существует в вашем репо, докер просто добавляет тег к изображению вместо того, чтобы снова нажимать все изображение.
Ваду,

-10

Как этого не делать:

При создании изображения вы также можете пометить его таким образом.

docker build -t ubuntu:14.04 .

Затем вы строите его снова с другим тегом:

docker build -t ubuntu:latest .

Если ваш Dockerfile хорошо использует кеш, то должен получиться тот же образ, и он фактически делает то же самое, что и изменение тегов того же образа. Если вы это сделаете, docker imagesвы увидите, что у них одинаковый идентификатор.

Хотя, вероятно, есть случай, когда это пойдет не так ... Но, как сказал @ david-braun, вы не можете создавать теги с помощью самих файлов Docker, только с помощью команды docker.


3
Могу добавить, что делать это как @ david-braun чище.
маниока

14
Не стройте дважды. Смотрите этот ответ .
Джонатон Рейнхарт

1
build two побеждает понятие CI / CD ... вторая компиляция может отличаться в зависимости от зависимостей ... все дело во времени.
Ричард

4
С четким заголовком «Как этого не делать» этот ответ теперь добавляет кое-что к пониманию того, как это работает.
Эд Рэндалл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.