Допустим, вы работаете над приложением sandbox/tremaine-test-app на своем локальном компьютере и только что создали образ. Когда вы запускаете $ docker images, вы можете видеть изображение среди всех других изображений, сохраненных на вашем компьютере.

Теперь вы хотите отправить его в свой частный репозиторий Docker, чтобы ваш друг по всей стране мог вытащить его, а затем запустить и протестировать на своей машине. Однако вы хотите изменить имя изображения и также отметить его как SNAPSHOT версию, чтобы подчеркнуть, что на самом деле он не предназначен для официального выпуска.

Тегирование важно не только из чисто эстетических соображений по поводу возможного переименования образа, потому что оно сообщает Docker о репозитории, в который вы хотите поместить образ, на стороне реестра.

Отметьте это!

Ключ здесь - пометить изображение. Это в основном означает, что вы переименовываете изображение. Он имеет следующий формат:

Теги, которые являются необязательными, как обозначены круглыми скобками, должны состоять из символов ASCII, цифр, подчеркиваний, точек и дефисов; кроме того, он не может начинаться с точки или тире и не может превышать 128 символов.

yourRegistryHost:<port> соответствует имени хоста вашего частного реестра Docker вместе с портом, если это необходимо. Это на всякий случай, когда вы будете отправлять образ Docker с новыми тегами.

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

Тег по идентификатору изображения

Если мы посмотрим на список, предоставленный нам $ docker images ранее в статье, мы увидим соответствующие идентификаторы изображений. Мы можем использовать один из них в этой команде, и интерфейс командной строки Docker будет знать, что нужно ссылаться на этот идентификатор.

В предыдущем примере у sandbox/tremaine-test-app были и 1.0.0, и latest версии, но их идентификаторы изображений были одинаковыми. Это потому, что на самом деле это один и тот же образ; если было больше тегов sandbox/tremaine-test-app с разными версиями, то этот тег не обязательно должен быть последним, и поэтому они могут иметь разные идентификаторы изображений.

В этом примере и во всех последующих мы помечаем наше локальное sandbox/tremaine-test-app изображение тегом tremaine/hello-world:1.0.0-SNAPSHOT.

Тем самым мы говорим, что хотим, чтобы новый тег изображения под названием hello-world с тегом версии 1.0.0-SNAPSHOT был помещен в tremaine репозиторий.

Отметить по имени изображения

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

В этом случае мы не указали тег в нашем исходном (крайнем левом) образе, поэтому Docker сделает вывод, что он предназначен для тега latest.

Тег по имени и тегу

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

Давай!

Теперь, когда у нас есть помеченное изображение yourRegistryHost:<port>/tremaine/hello-world:1.0.0-SNAPSHOT, мы можем отправить его в наш частный реестр Docker с помощью простой команды:

Поскольку у нас уже есть хост Docker в образе, Docker будет знать, как отправить его туда.

Отправка займет немного времени, но когда все будет сказано и сделано, ваш друг сможет запустить $ docker pull, чтобы вытащить образ на свой компьютер, а затем запускать его по своему усмотрению.

В следующей статье, на которую будет ссылка после публикации, я рассмотрю некоторые более тонкие детали и параметры, доступные в $ docker push.

Источник