Образы — это основной компонент Docker. В этом руководстве мы рассмотрим, что такое образы Docker, как их создавать, как ими управлять и как их использовать.
Приступим.
Необходимые условия
- Прежде чем начать использовать образы Docker, необходимо установить Docker в вашей системе.
- В этом руководстве используется Ubuntu, но шаги должны быть аналогичными для других дистрибутивов.
- Учетная запись пользователя с правами root.
Что нужно знать?
Прежде чем приступить к работе с образами Docker, важно понимать, что они из себя представляют.
Образы Docker — это основные компоненты Docker. Docker использует образы для создания контейнеров. Образы — это, по сути, шаблоны, содержащие всю информацию, необходимую для создания контейнера, такую как код, библиотеки и среда выполнения.
Контейнер Docker — это экземпляр образа в среде выполнения. Он содержит все, что содержит образ, а также любые изменения или дополнения, которые вы вносите во время работы контейнера. Например, если вы установите новое приложение в своей системе, оно будет установлено и в вашем контейнере.
Управление образами с помощью CLI
Управление образами с помощью CLI Docker — обязательное умение для администраторов Docker. CLI Docker — это мощный инструмент, который дает вам полный контроль над вашими образами и контейнерами. В этом разделе вы узнаете, как использовать CLI Docker для управления вашими образами.
1. Запустите приведенную ниже команду, чтобы убедиться, что Docker работает.
sudo systemctl status docker

2. Если Docker не запущен, запустите его с помощью приведенной ниже команды.
sudo systemctl start docker
3. Добавьте свою учетную запись пользователя в группу docker. Выйдите из системы и войдите снова, чтобы изменения вступили в силу.
sudo usermod -aG docker $(whoami)
4. Если вы запустите команду docker image, вы увидите список всех опций, доступных для команды docker image.
docker image
Как показано ниже, команда docker image имеет множество опций, но некоторые из наиболее часто используемых:
- ls: Вывести список образов в вашей системе.
- pull: Загрузить образ из реестра.
- push: Загрузить образ в реестр.
- create: Создать новый образ из файла Dockerfile.
- rm: Удалить образ из вашей системы.
- tag: Пометить образ тегом с именем.

Для начала давайте посмотрим, как вывести список образов в вашей системе.
5. Запустите команду docker image ls, чтобы отобразить список образов на вашем хосте. Команда docker image ls выводит список всех образов на вашем хосте, включая репозитории, из которых они были загружены. Идентификатор, репозиторий, тег и размер образа.
docker image ls

Предположим, что вы хотите удалить образ с вашего хоста. Для этого можно использовать команду rm. Для удаления образа можно использовать либо его имя, либо его ID.
docker image rm
docker image rm
Если вы используете ID, убедитесь, что первые несколько символов в ID являются уникальными для образов в списке. Другими словами, первые несколько букв в ID не должны использоваться никакими другими образами.
6. Например, чтобы удалить образ ubuntu:12.04, вы можете использовать любую из следующих команд. Обратите внимание, что для удаления образа можно использовать только первые несколько символов идентификатора (5b1), так как нет других образов с такими первыми символами.
docker image rm ubuntu:12.04
docker image rm 5b1
Образ ubuntu:12.04 будет удален с вашего хоста вместе со всеми слоями, использованными для создания образа, как показано ниже.

7. Снова выведите список образов в вашей системе, чтобы убедиться, что образ ubuntu:12.04 больше не отображается.
docker image ls

Обратите внимание, что команда docker image ls и команда docker images выполняют абсолютно одно и то же. Однако вторая команда теперь устарела, поскольку Docker предпочитает, чтобы разработчики использовали команду docker с правильными подкомандами. То же самое происходит с командой `docker rmi`. Эта команда используется для удаления образа и всех его слоев точно так же, как и `docker image rm`. Docker рекомендует использовать `docker rm` с правильными подкомандами.
docker image ls
docker images
Мы получаем тот же результат.

До сих пор вы удаляли по одному неиспользуемому образу за раз. А что, если вы хотите удалить два или более неиспользуемых образа одновременно?
Здесь пригодится команда prune. Команда prune позволяет удалить все неиспользуемые образы с хоста за один раз. С помощью команды prune можно удалить все «висячие» образы, все неиспользуемые образы или их комбинацию. «Висячие» образы — это образы, с которыми не связан ни один контейнер.
8. Запустите команду docker image prune, чтобы удалить все неиспользуемые/«висячие» образы из вашей системы.
docker image prune
Как видите, команда prune удалила все неиспользуемые образы и их слои с вашего хоста и при этом сэкономила вам много дискового пространства.

9. Снова перечислите образы на вашем хосте, чтобы убедиться, что они действительно удалены. Теперь вы знаете, как перечислять, удалять и очищать образы с вашего хоста. Эти базовые команды помогут вам поддерживать вашу систему в чистоте и порядке.
docker image ls

Проверка образов Docker
Вы можете думать об образах и контейнерах Docker как о загадочных «черных ящиках». Вам интересно, какая магия происходит внутри них. В этом разделе мы развеем часть этой загадочности, рассмотрев, что находится в образе Docker и как вы можете использовать эту информацию в своих интересах.
1. Docker предоставляет способ проверки содержимого образа. Команда docker inspect принимает путь к образу и выводит обширную информацию о нем, как показано в следующем примере.
docker inspect ubuntu
Как показано ниже, вывод вышеуказанной команды содержит много информации. Здесь вы видите всю информацию в формате, называемом массивом JSON.


Информация в выводе отображается в виде хранилища «ключ-значение». Вы можете использовать инструмент Linux, такой как труба (|), чтобы найти в выводе конкретное ключевое слово с помощью grep. Затем вы можете использовать вывод, пропущенный через трубу, для любых целей. Следующие примеры демонстрируют, как это можно сделать.
2. Выполните приведенную ниже команду, чтобы сохранить вывод команды docker inspect в файл с именем image-inspect.txt.
docker image inspect ubuntu > image-inspect.txt
3. Затем откройте файл в любом редакторе и просмотрите его содержимое.
sudo nano image-inspect.txt
Вывод команды docker inspect содержит обширную информацию об образе, как показано ниже. В редакторе вы можете легко перемещаться, например, прокручивать вверх/вниз, чтобы просматривать различную информацию. При желании вы можете редактировать эту информацию.

Вы также можете использовать аргумент —format, чтобы отформатировать вывод определенным образом.
4. Например, чтобы вывести ID образа ubuntu, вы можете использовать следующую команду.
docker image inspect ubuntu --format='{{.ID}}'
![]()
5. Выведите список образов, чтобы проверить ID образа.
docker image ls

6. Запустите приведенную ниже команду, чтобы перенаправить вывод команды docker inspect в команду more. Это позволит вам просматривать вывод по страницам, чтобы увидеть всю содержащуюся в нем информацию.
docker image inspect ubuntu | more
На этот раз вы увидите Имя хоста(b32714f341a6) в разделе ContainerConfig , как показано ниже.

7. Что делать, если вам нужно только значение hostname (b32714f341a6)? Это можно сделать, выполнив приведенную ниже команду.
docker image inspect ubuntu --format='{{.ContainerConfig.Hostname}}'
![]()
Как видите, вы можете использовать команду docker inspect вместе с инструментами Linux для дополнительной фильтрации. Например, для диапазона. Например, чтобы перечислить все IP-адреса в диапазоне 192.168.0.0/16. И вы даже можете комбинировать её с другими инструментами для написания скриптов, чтобы делать ещё более интересные вещи.
По мере работы с образами Docker вам захочется начать использовать теги. Теги позволяют легко идентифицировать образы и управлять ими. Например, вы можете создать тег для каждой среды, в которой используется образ, или для каждого заказчика или клиента, для которого используется образ. Это упрощает поиск нужного образа и позволяет отслеживать, какие образы использовались для каких целей.
Синтаксис добавления тега к образу следующий:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Ваш тег может быть любой допустимой ASCII-строкой и может содержать строчные и заглавные буквы, цифры, подчеркивания, точки и тире. Он не может начинаться с точки или тире и не должен превышать 128 символов в длину. Давайте посмотрим на пример.
1. Чтобы добавить тег к образу, нам сначала нужно узнать имя или ID образа, который мы хотим пометить. Мы можем вывести список всех доступных образов в нашей системе, выполнив следующую команду:
docker image ls
2. Теперь выполните приведенную ниже команду, чтобы добавить тег «myubuntu» к образу.
docker tag ubuntu:latest ubuntu:myubuntu
3. Теперь, если мы снова запустим команду docker image ls, мы увидим, что наш образ был помечен тегом «myubuntu».

Обратите внимание, что теги — это просто псевдонимы. Это означает, что образ может иметь несколько тегов, но все они ссылаются на один и тот же исходный образ. Поэтому вы можете использовать любой тег, который хотите, главное, чтобы он имел для вас смысл. И рекомендуется добавлять теги при создании образов, чтобы впоследствии вам было проще их отслеживать.
4. Давайте рассмотрим ещё один пример. Предположим, мы хотим создать образ Ubuntu с тегом «original». Мы можем сделать это, выполнив следующую команду:
docker tag myubuntu:latest myubuntu:original
Вышеуказанная команда создаст образ с тегом «original», основанный на образе с тегом «latest». Теперь у нас есть два образа myubuntu: один с тегом latest , и один с тегом original, но они ссылаются на один и тот же идентификатор исходного образа (2b4cba85892a).

Работа с реестрами Docker
Теперь, когда мы имеем базовое представление о том, что такое образы Docker, давайте рассмотрим работу с реестрами. Docker Hub — самый популярный публичный реестр, но есть и другие варианты.
Docker Hub — это публичный реестр, который можно использовать бесплатно как в личных, так и в коммерческих целях. В нём доступно широкое разнообразие образов, и вы также можете создавать свои собственные образы и делиться ими с другими. Чтобы использовать Docker Hub, вам просто нужно создать учётную запись, а затем установить клиент Docker. После этого вы можете использовать команду docker search для поиска образов и команду docker pull для их загрузки.
До сих пор мы работали с образом ubuntu, доступным на Docker Hub, общедоступном реестре Docker. Однако вы также можете создать частный реестр для хранения своих образов.
Развертывание частного реестра Docker
Есть несколько причин, по которым вам может понадобиться частный реестр:
- Для хранения образов, предназначенных только для внутреннего использования. Возможно, у вас есть образы, содержащие конфиденциальную информацию, и вы не хотите, чтобы они были общедоступны. Или, возможно, вы хотите отслеживать, какие образы использовались в вашей среде, и не хотите, чтобы другие могли загружать их без вашего разрешения.
- Для ускорения загрузки образов в вашем конвейере CI/CD за счет их кэширования локально. Запуск собственного реестра и его хранение на собственном сервере — отличный способ интегрировать его с вашей системой CI/CD и улучшить ее работу.
1. Проверьте, готов ли ваш хост Docker к созданию локального реестра.
docker version
2. Запустите приведенную ниже команду docker run, чтобы запустить локальный и частный реестр. Где:
- -p 5000:5000 = сопоставляет порт 5000 на хосте Docker с портом 5000 в контейнере
- —restart=always = гарантирует, что контейнер всегда будет перезапускаться в случае сбоя
- —name registry = имя вашего частного реестра
- registry:2 = образ, который будет использоваться для создания контейнера реестра
docker run -d -p 5000:5000 --restart=always --name registry registry:2

3. Выполните приведенную ниже команду, чтобы отобразить список всех запущенных контейнеров на вашем хосте Docker.
docker ps
Вы увидите следующий вывод. Этот вывод указывает, что контейнер реестра запущен и работает на вашем хосте Docker. Обозначение :::5000->5000/tcp — это сокращение, которое сопоставляет порт на хосте Docker с портом на контейнере реестра.

Теперь, когда наш частный реестр запущен и работает, давайте посмотрим, как добавлять в него образы. В следующем примере показано, как добавить образ ubuntu в реестр. Сначала вам нужно загрузить образ с Docker Hub на ваш локальный хост и присвоить ему определенный тег. Затем вы отправляете образ с новым тегом в ваш частный реестр. Наконец, удалите образ Ubuntu с локального хоста и загрузите образ из частного реестра, чтобы протестировать его.
4. Выполните приведенную ниже команду, чтобы загрузить образ Ubuntu с тегом 20.04 с Docker Hub на локальный хост.
docker image pull ubuntu:20.04

5. Затем выполните приведенную ниже команду, чтобы пометить загруженный образ Ubuntu тегом «my-ubuntu». Вы можете использовать любой тег, но рекомендуется использовать тег, который имеет смысл для вашей организации.
docker tag ubuntu:20.04 localhost:5000/my-ubuntu
6. Выполните приведенную ниже команду, чтобы отправить образ с новым тегом в ваш частный реестр, работающий на порту localhost:5000.
docker push localhost:5000/my-ubuntu

7. Выполните приведенную ниже команду, чтобы удалить образы Ubuntu из локального кэша на вашем localhost и протестировать работу частного реестра.
docker image remove ubuntu:20.04 && docker image remove localhost:5000/my-ubuntu
![]()
8. После удаления локально кэшированных образов ubuntu вы можете выполнить приведенную ниже команду, чтобы загрузить образ из вашего частного реестра.
docker pull localhost:5000/my-ubuntu
9. Выполните приведенную ниже команду, чтобы отобразить список всех образов на вашем хосте Docker.
docker image ls
Вы увидите my-ubuntu , указанный как загруженный из вашего частного реестра, как показано ниже. Этот вывод подтверждает, что образ был успешно загружен из вашего частного реестра и ваш частный реестр работает правильно.

Загрузка, извлечение и подписание образов
Docker предлагает несколько опций командной строки для загрузки, извлечения и поиска образов. В этом разделе вы узнаете, как использовать эти команды для управления вашими образами в реестрах из командной строки на вашем хосте. В этом примере для демонстрации используется Docker Hub, но вы можете использовать любые другие реестры.
1. Запустите команду docker login, чтобы войти в реестр Docker Hub . Укажите свое имя пользователя и пароль при появлении запроса. Если у вас нет учетной записи Docker Hub, вы можете создать ее бесплатно на сайте https://hub.docker.com/.
docker login
2. После входа в систему вы готовы к отправке образов. Предположим, вы хотите отправить последнюю версию образа ubuntu в Docker Hub. Вам также следует присвоить образу тег с понятным именем, чтобы в будущем вы могли легко найти его. В этом примере вы пометите образ как Base/ubuntu:latest. Можете использовать любое имя тега по своему усмотрению.
docker tag ubuntu:latest Base/ubuntu:latest
docker push Base/ubuntu:latest

3. Откройте веб-браузер и перейдите на Docker Hub. Там вы увидите свой образ. Этот репозиторий был создан на основе вашего имени пользователя и использованного вами тега. В этом примере репозиторий называется Base/ubuntu. Перейдите на вкладку тегов, где вы увидите, что ваш тег был успешно применен (latest).
4. Выполните приведенную ниже команду, чтобы удалить локальный образ Ubuntu для тестирования pull.
docker image rm Base/ubuntu
Выведите список образов в вашей системе, чтобы убедиться, что образ Ubuntu был удален.
docker image ls

5. Выполните приведенную ниже команду, чтобы загрузить образ my-ubuntu из вашего Docker Hub.
docker pull Base/ubuntu

6. Снова перечислите образы на вашем хосте, чтобы убедиться, что образ ubuntu был загружен. Вы должны увидеть образ my-ubuntu в своей системе.
docker image ls

Во время работы с образами вам может понадобиться поиск конкретных образов в реестрах Docker. Вы можете использовать команду docker search для поиска образов в реестрах Docker.
7. Запустите команду docker search, чтобы увидеть все доступные опции и параметры.
man docker search
Вы должны увидеть следующий вывод. Вы можете увидеть полезные параметры фильтрации, такие как:
- stars=: фильтрует результаты поиска по количеству звёзд, которые имеет образ на Docker Hub. Вы можете использовать это для поиска самых популярных образов.
- is-automated=(true|false): фильтрует результаты поиска, включая или исключая автоматизированные сборки. Вы можете использовать это для поиска образов, которые являются или не являются автоматизированными сборками.
- is-official=(true|false): фильтрует результаты поиска, включая или исключая официальные образы. Вы можете использовать этот параметр для поиска образов, официально поддерживаемых компанией, стоящей за образом. Например, Ubuntu — это официальная компания, стоящая за образом Ubuntu. Nginx — это официальная компания, стоящая за образом Nginx. Вы всегда должны использовать официальные образы, когда это возможно, так как они были протестированы компанией и с большей вероятностью будут стабильными. Если у вас возникнут проблемы с официальным образом, вы сможете получить помощь от компании, предоставляющей этот образ.

8. Например, выполните команду docker search —filter=stars=4 ubuntu, чтобы найти образ ubuntu с 4 или более звездами на Docker Hub.
docker search --filter=stars=4 ubuntu

9. Выполните приведенную ниже команду, чтобы найти образ ubuntu, который является официальным образом от Ubuntu.
docker search --filter=is-official=true ubuntu
Результатом должен быть список репозиториев, содержащих образ ubuntu, с указанием, что это официальный образ Ubuntu (ОК), как показано ниже.

10. Выполните приведенную ниже команду, чтобы найти образ ubuntu, который имеет рейтинг не менее 100 звезд на Docker Hub и является официальным образом Ubuntu.
docker search --filter="stars=100" --filter=is-official=true ubuntu

Образы Docker — отличный способ хранения кода и конфигурации вашего приложения. Но в то же время легко накопить много неиспользуемых образов, особенно если вы тестируете разные приложения или пробуете разные конфигурации. Вы можете обнаружить, что некоторые образы в ваших реестрах вам больше не нужны.
Вы можете удалить образ, перейдя в репозиторий, содержащий этот образ, и нажав кнопку удаления.
11. Например, на Docker Hub перейдите в репозиторий */ubuntu. Нажмите на Настройки > Удалить репозиторий. Подтвердите, что вы хотите удалить репозиторий, введя его название. Нажмите на Удалить.


Вернитесь на панель управления, и вы увидите, что репозиторий */ubuntu теперь удален вместе с образом ubuntu.

Заключение
Поздравляем! Вы дошли до конца статьи. Теперь у вас должно быть базовое понимание образов Docker и того, как с ними работать. Вот руководство по созданию образов Docker. Если вы хотите узнать больше о Docker, мы рекомендуем прочитать официальную документацию Docker , где вы найдете дополнительную информацию по таким темам, как:
- Dockerfiles
- Сети
- Тома
- Сервисы
- Режим Swarm