Как использовать команду docker image push для загрузки образов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы узнаете, как загружать свои Docker-образы в реестр с помощью команды docker image push. Этот процесс является важной частью для обмена собственными настраиваемыми образами с другими пользователями или развертывания их в различных средах.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555160{{"Как использовать команду docker image push для загрузки образов"}} docker/ps -.-> lab-555160{{"Как использовать команду docker image push для загрузки образов"}} docker/pull -.-> lab-555160{{"Как использовать команду docker image push для загрузки образов"}} docker/tag -.-> lab-555160{{"Как использовать команду docker image push для загрузки образов"}} docker/push -.-> lab-555160{{"Как использовать команду docker image push для загрузки образов"}} docker/images -.-> lab-555160{{"Как использовать команду docker image push для загрузки образов"}} end

Фиксация контейнера в новом образе

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

Сначала запустим простой контейнер на основе образа Ubuntu. Мы будем использовать образ ubuntu. Поскольку мы будем вносить изменения внутри контейнера, нам нужно запустить его в интерактивном режиме с псевдотерминалом.

docker run -it ubuntu

Теперь вы должны находиться в оболочке контейнера Ubuntu. Давайте внесем простое изменение, например, установим пакет curl.

apt-get update
apt-get install -y curl

После завершения установки выйдите из оболочки контейнера, набрав exit.

exit

Теперь, когда вы вышли из контейнера, изменения, которые вы внесли (установка curl), по-прежнему присутствуют в этом конкретном экземпляре контейнера. Чтобы сохранить эти изменения в новом образе, вам нужно зафиксировать контейнер.

Сначала найдите идентификатор контейнера, из которого вы только что вышли. Вы можете использовать команду docker ps -a для вывода списка всех контейнеров, включая остановленные.

docker ps -a

Найдите контейнер, созданный из образа ubuntu, и запишите его CONTAINER ID.

Теперь используйте команду docker commit для создания нового образа из этого контейнера. Базовый синтаксис: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]. Мы зафиксируем контейнер и дадим новому образу имя и тег. Замените <CONTAINER_ID> на фактический идентификатор, который вы нашли.

docker commit < CONTAINER_ID > my-ubuntu-with-curl:v1

Эта команда создает новый образ с именем my-ubuntu-with-curl и тегом v1. Вы можете убедиться, что новый образ был создан, выведя список локальных образов.

docker images

В списке образов вы должны увидеть my-ubuntu-with-curl. Этот новый образ теперь включает пакет curl, который вы установили в контейнере.

Пометка образа для конкретного реестра

На этом этапе вы узнаете, как пометить Docker-образ таким образом, чтобы его можно было загрузить в конкретный реестр контейнеров. Когда вы загружаете образ в реестр, тег используется для идентификации образа в рамках этого реестра. Стандартный формат пометки образа для реестра: [registry-hostname[:port]]/repository[:tag].

На предыдущем этапе вы создали образ с именем my-ubuntu-with-curl и тегом v1. Теперь давайте пометим этот образ для условного реестра. В демонстрационных целях мы будем использовать localhost:5000 в качестве адреса нашего реестра.

Вы можете использовать команду docker tag для создания нового тега для существующего образа. Базовый синтаксис: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG].

Давайте пометим образ my-ubuntu-with-curl:v1 для нашего условного реестра.

docker tag my-ubuntu-with-curl:v1 localhost:5000/my-ubuntu-with-curl:v1

Эта команда создает новый тег localhost:5000/my-ubuntu-with-curl:v1, который ссылается на тот же образ, что и my-ubuntu-with-curl:v1.

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

docker images

Теперь вы должны увидеть запись для localhost:5000/my-ubuntu-with-curl с тегом v1. Это означает, что образ теперь помечен и готов к загрузке в реестр по адресу localhost:5000.

Загрузка помеченного образа в реестр

На этом этапе вы узнаете, как загрузить помеченный Docker-образ в реестр контейнеров. Загрузка образа делает его доступным для скачивания и использования другими пользователями.

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

Сначала скачайте образ registry.

docker pull registry:2

Теперь запустите контейнер реестра. Мы сопоставим порт 5000 на хосте с портом 5000 в контейнере.

docker run -d -p 5000:5000 --name local-registry registry:2

Эта команда запускает отсоединенный контейнер с именем local-registry, в котором работает Docker-реестр.

На предыдущем этапе вы пометили образ my-ubuntu-with-curl:v1 как localhost:5000/my-ubuntu-with-curl:v1. Этот тег включает адрес нашего локального реестра (localhost:5000).

Теперь вы можете загрузить этот помеченный образ в локальный реестр с помощью команды docker push. Синтаксис: docker push NAME[:TAG].

docker push localhost:5000/my-ubuntu-with-curl:v1

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

После завершения загрузки образ my-ubuntu-with-curl:v1 теперь хранится в вашем локальном реестре по адресу localhost:5000.

Загрузка всех тегов образа

На этом этапе вы узнаете, как загрузить все теги, связанные с определенным образом, в реестр контейнеров. Иногда у вас может быть несколько тегов, ссылающихся на один и тот же образ (например, latest, v1.0, stable). Вы можете загрузить все эти теги одной командой.

На предыдущих этапах вы создали образ my-ubuntu-with-curl и пометили его как v1 и localhost:5000/my-ubuntu-with-curl:v1. Давайте добавим еще один тег этому образу. Мы пометим его как latest для нашего локального реестра.

Используйте команду docker tag еще раз, чтобы добавить тег latest.

docker tag my-ubuntu-with-curl:v1 localhost:5000/my-ubuntu-with-curl:latest

Теперь выведите список своих образов, чтобы увидеть новый тег.

docker images

Теперь вы должны увидеть localhost:5000/my-ubuntu-with-curl с тегами v1 и latest, оба ссылающиеся на один и тот же идентификатор образа.

Для загрузки всех тегов этого образа в локальный реестр вы можете использовать команду docker push с именем репозитория без указания тега.

docker push localhost:5000/my-ubuntu-with-curl

Docker определит все теги, связанные с репозиторием localhost:5000/my-ubuntu-with-curl, и загрузит каждый из них в реестр. Вы увидите вывод, показывающий ход загрузки как для тега v1, так и для тега latest.

После завершения загрузки обе версии вашего образа (v1 и latest) будут доступны в вашем локальном реестре.

Резюме

В этом практическом занятии вы узнали, как сохранить изменения, внесенные в работающий Docker-контейнер, в новый образ. Этот процесс включает запуск контейнера, внесение изменений в его рамках (например, установка программного обеспечения), выход из контейнера, определение идентификатора контейнера и затем использование команды docker commit для создания нового образа на основе состояния контейнера. Вы также узнали, как присвоить имя и тег только что созданному образу и проверить его существование с помощью команды docker images.