Как извлечь образ Docker

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

Введение

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"

Эта команда:

  1. Создает новый контейнер из образа ubuntu:22.04
  2. Запускает команду echo "Hello from Ubuntu container" внутри контейнера
  3. Отображает вывод:
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

Эта команда:

  1. Создает контейнер с именем nginx-server из образа nginx
  2. Запускает его в фоновом режиме (-d)
  3. Отображает порт 8080 на вашем хосте на порт 80 в контейнере
  4. Возвращает 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:

  1. Понимание того, что такое образы Docker и как они организованы в реестрах
  2. Поиск и извлечение образов Docker из Docker Hub
  3. Управление локальными образами Docker, включая их просмотр, инспектирование и удаление
  4. Использование образов Docker для запуска контейнеров в различных режимах

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

Следующие шаги для дальнейшего обучения:

  • Создание собственных образов Docker с помощью Dockerfiles
  • Работа с Docker Compose для многоконтейнерных приложений
  • Использование Docker volumes для постоянного хранения данных
  • Настройка сетевого взаимодействия контейнеров

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