Введение
Docker произвел революцию в способах разработки, развертывания и управления приложениями. В основе этой экосистемы лежат образы Docker (Docker images), которые служат строительными блоками для создания и запуска контейнеризированных приложений. В этом руководстве мы проведем вас через процесс извлечения образов Docker из реестра (registry), что является важным шагом в использовании возможностей Docker для ваших проектов.
К концу этой лабораторной работы вы сможете искать образы Docker, извлекать их из Docker Hub и понимать, как использовать их в ваших контейнеризированных приложениях.
Понимание образов Docker
Прежде чем мы начнем извлекать образы Docker, важно понять, что такое образы Docker и как они работают.
Что такое образ Docker?
Образ Docker (Docker image) — это легкий, автономный пакет, который содержит все необходимое для запуска приложения:
- Код приложения
- Среда выполнения
- Библиотеки и зависимости
- Переменные окружения
- Файлы конфигурации
Образы — это шаблоны, используемые для создания контейнеров Docker, которые являются запущенными экземплярами этих образов.
Репозитории образов Docker
Образы Docker хранятся в репозиториях (repositories) внутри реестров (registries). Самым популярным публичным реестром является Docker Hub, который содержит тысячи готовых к использованию образов. Некоторые ключевые моменты о Docker Hub:
- Он содержит официальные образы, поддерживаемые поставщиками программного обеспечения
- Он содержит образы, созданные сообществом пользователей
- Он позволяет организациям иметь частные репозитории для собственных образов
Именование образов Docker
Образы Docker следуют определенному соглашению об именовании:
[registry/]username/repository:tag
Где:
registry— имя хоста реестра (необязательно, по умолчанию Docker Hub)username— имя пользователя Docker Hub или название организацииrepository— имя образаtag— версия образа (необязательно, по умолчанию "latest")
Например: ubuntu:22.04 или nginx:latest
Проверка установки Docker
Прежде чем продолжить, давайте убедимся, что Docker правильно установлен в вашей системе. Откройте терминал и выполните:
docker --version
Вы должны увидеть вывод, похожий на:
Docker version 20.10.21, build baeda1f
Это подтверждает, что Docker установлен и готов к использованию.
На следующем шаге мы будем искать и извлекать наш первый образ Docker.
Поиск и извлечение вашего первого образа Docker
Теперь, когда мы понимаем, что такое образы Docker, давайте узнаем, как их находить и извлекать из Docker Hub.
Поиск образов Docker
Прежде чем извлекать образ, вы можете захотеть поискать доступные варианты. Используйте команду docker search, чтобы найти образы на Docker Hub:
docker search ubuntu
Это покажет вам список образов, связанных с Ubuntu, доступных на Docker Hub. Вы должны увидеть вывод, похожий на:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 14938 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 111 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 256 [OK]
...
Столбец OFFICIAL с пометкой [OK] указывает на образы, поддерживаемые Docker или поставщиком программного обеспечения.
Извлечение образа Docker
Чтобы загрузить образ Docker на ваш локальный компьютер, используйте команду docker pull, за которой следует имя образа:
docker pull ubuntu:22.04
Эта команда извлекает образ Ubuntu 22.04 из Docker Hub. Вы должны увидеть ход загрузки, похожий на:
22.04: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04
Вывод показывает, что Docker загружает отдельные слои образа. Каждый слой представляет собой набор изменений файловой системы.
Извлечение образов без тега
Если вы не укажете тег, Docker извлечет образ с тегом latest:
docker pull nginx
Это извлечет последнюю версию образа веб-сервера Nginx:
Using default tag: latest
latest: Pulling from library/nginx
a603fa5e3b41: Pull complete
(...more layers...)
Digest: sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
Извлечение из других реестров
По умолчанию docker pull загружает образы из Docker Hub. Чтобы извлечь из других реестров, включите имя хоста реестра:
docker pull mcr.microsoft.com/dotnet/sdk:6.0
Эта команда извлекает образ .NET SDK 6.0 из Microsoft Container Registry.
Теперь, когда вы извлекли несколько образов Docker, давайте перейдем к следующему шагу, чтобы узнать, как ими управлять.
Управление образами Docker
После извлечения образов Docker вам необходимо знать, как эффективно их просматривать, инспектировать и управлять ими.
Просмотр образов Docker
Чтобы увидеть все образы Docker, которые вы загрузили на свой локальный компьютер, используйте команду docker images (или ее псевдоним docker image ls):
docker images
Вы должны увидеть вывод, похожий на:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 58db3edaf2be 3 weeks ago 77.8MB
nginx latest 605c77e624dd 4 weeks ago 142MB
Этот вывод показывает:
REPOSITORY: Имя образаTAG: Версия образаIMAGE ID: Уникальный идентификатор образаCREATED: Когда был создан образSIZE: Размер образа на диске
Инспектирование образов Docker
Чтобы получить подробную информацию о конкретном образе, используйте команду docker inspect:
docker inspect ubuntu:22.04
Эта команда отображает массив JSON, содержащий все сведения об образе, включая:
- Информацию о слоях
- Переменные окружения
- Архитектуру
- Операционную систему
- Конфигурацию
Вывод довольно длинный и подробный. Вот фрагмент того, что вы можете увидеть:
[
{
"Id": "sha256:58db3edaf2beXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"RepoTags": [
"ubuntu:22.04"
],
"RepoDigests": [
"ubuntu@sha256:2b7412e6465c3fc7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f"
],
...
}
]
История образа
Чтобы увидеть историю слоев образа (как он был построен), используйте команду docker history:
docker history ubuntu:22.04
Вывод показывает каждый слой, из которого состоит образ:
IMAGE CREATED CREATED BY SIZE
58db3edaf2be 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:15efc167a417... 77.8MB
Удаление образов Docker
Когда вам больше не нужен образ, вы можете удалить его, чтобы освободить место на диске, используя команду docker rmi:
docker rmi nginx
В случае успеха Docker показывает удаленные идентификаторы образов:
Untagged: nginx:latest
Untagged: nginx@sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Deleted: sha256:605c77e624ddb75e6110f997c58876bba43f0blindividualayeridshereXX
(...more layers deleted...)
Если образ используется контейнером, вам сначала нужно удалить контейнер или использовать опцию -f (force):
docker rmi -f nginx
Теперь вы знаете, как управлять своими образами Docker. Давайте перейдем к заключительному шагу, где мы фактически используем образ для запуска контейнера.
Использование образов Docker
Извлечение образов Docker — это только первый шаг. Теперь давайте узнаем, как использовать эти образы для запуска контейнеров.
Запуск контейнера из образа
Чтобы создать и запустить контейнер из образа, используйте команду docker run:
docker run ubuntu:22.04 echo "Hello from Ubuntu container"
Эта команда:
- Создает новый контейнер из образа
ubuntu:22.04 - Запускает команду
echo "Hello from Ubuntu container"внутри контейнера - Отображает вывод:
Hello from Ubuntu container
После выполнения команды контейнер останавливается, потому что он завершил свою задачу.
Запуск интерактивного контейнера
Чтобы запустить интерактивную оболочку внутри контейнера, используйте опции -i (interactive) и -t (terminal):
docker run -it ubuntu:22.04 bash
Это предоставит вам оболочку bash внутри контейнера Ubuntu, где вы можете выполнять команды:
root@a1b2c3d4e5f6:/## ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
Чтобы выйти из контейнера, введите exit или нажмите Ctrl+D:
root@a1b2c3d4e5f6:/## exit
exit
Запуск контейнера в фоновом режиме
Чтобы запустить контейнер в фоновом режиме (detached mode), используйте опцию -d:
docker run -d --name nginx-server -p 8080:80 nginx
Эта команда:
- Создает контейнер с именем
nginx-serverиз образаnginx - Запускает его в фоновом режиме (
-d) - Отображает порт 8080 на вашем хосте на порт 80 в контейнере
- Возвращает ID контейнера:
e1d0ac1dcb21a93d9d878dcf40c054eb9f3c2b1bf5ecce7c29b6fa8ce6b219c1
Доступ к работающему контейнеру
Теперь вы можете получить доступ к веб-серверу Nginx по адресу http://localhost:8080 в своем браузере или использовать curl, чтобы убедиться, что он работает:
curl localhost:8080
Это должно отобразить HTML-страницу приветствия Nginx:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
Просмотр запущенных контейнеров
Чтобы увидеть все запущенные контейнеры, используйте:
docker ps
Это показывает информацию о ваших запущенных контейнерах:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1d0ac1dcb21 nginx "/docker-entrypoint.…" 30 seconds ago Up 29 seconds 0.0.0.0:8080->80/tcp nginx-server
Остановка и удаление контейнеров
Чтобы остановить работающий контейнер:
docker stop nginx-server
Чтобы удалить остановленный контейнер:
docker rm nginx-server
Теперь вы успешно использовали образы Docker для запуска контейнеров. Это основной рабочий процесс для использования Docker в ваших процессах разработки и развертывания.
Заключение
Поздравляем с завершением этой лабораторной работы по образам Docker. Вы изучили основные навыки работы с образами Docker:
- Понимание того, что такое образы Docker и как они организованы в реестрах
- Поиск и извлечение образов Docker из Docker Hub
- Управление локальными образами Docker, включая их просмотр, инспектирование и удаление
- Использование образов Docker для запуска контейнеров в различных режимах
Эти навыки составляют основу работы с Docker и позволят вам использовать контейнеризацию в вашем процессе разработки. Теперь вы можете извлекать любой образ Docker из публичных или частных реестров и использовать их для запуска контейнеризованных приложений.
Следующие шаги для дальнейшего обучения:
- Создание собственных образов Docker с помощью Dockerfiles
- Работа с Docker Compose для многоконтейнерных приложений
- Использование Docker volumes для постоянного хранения данных
- Настройка сетевого взаимодействия контейнеров
Продолжайте изучать обширную экосистему образов Docker, доступных на Docker Hub, чтобы найти инструменты и приложения, которые могут ускорить ваш процесс разработки.



