После завершения этого раздела вы сможете установить утилиты управления контейнерами и запустить простой контейнер без прав root.
Чтобы начать запускать контейнеры в системе и управлять ими, необходимо установить соответствующие утилиты командной строки. Установите модуль container-tools с помощью команды yum.
yum
[root@host ~]# yum module install container-tools
[root@host ~]#
yum module install container-tools
Модуль container-tools содержит программные пакеты, которые устанавливают несколько утилит. В этой главе используются следующие утилиты: podman и skopeo.
podman
skopeo
По умолчанию система устанавливает утилиты быстрых потоков container-tools:rhel8, которые каждые три месяца обновляются с использованием последней стабильной версии контейнерных утилит.
container-tools:rhel8
Альтернативные стабильные потоки, которые используют только определенную версию утилит, не получают обновлений компонентов. Red Hat планирует один раз в год выпускать новые стабильные потоки, которые будут поддерживаться в течение двух лет.
Реестр контейнеров ― это репозиторий для хранения и извлечения образов контейнеров. Разработчик отправляет (push) образы контейнеров в реестр. Вы извлекаете (pull) эти образы контейнеров из реестра в локальную систему, чтобы использовать их для запуска контейнеров.
Вы можете использовать открытый реестр, содержащий сторонние образы, или закрытый реестр, контролируемый вашей организацией. Источник образов контейнеров имеет большое значение. Как и в случае с любым другим программным пакетом, необходимо знать, можно ли доверять коду в образе контейнера. В разных реестрах применяются разные политики, регулирующие предоставление, оценку и тестирование отправляемых в них образов контейнеров.
Red Hat распространяет сертифицированные образы контейнеров через два основных реестра контейнеров, доступ к которым возможен с помощью учетных данных Red Hat:
registry.redhat.io для контейнеров на основе официальных продуктов Red Hat;
registry.redhat.io
registry.connect.redhat.com для контейнеров на основе продуктов сторонних поставщиков.
registry.connect.redhat.com
Red Hat постепенно выводит из эксплуатации старый реестр registry.access.redhat.com.
registry.access.redhat.com
Red Hat Container Catalog (https://access.redhat.com/containers) предоставляет веб-интерфейс, который можно использовать для поиска сертифицированного контента в этих реестрах.
В этой учебной аудитории для предоставления образов контейнеров используется закрытый реестр на основе Red Hat Quay. Дополнительные сведения об этом программном обеспечении см. на странице https://access.redhat.com/products/red-hat-quay.
Образы контейнеров именуются на основе следующего синтаксиса полностью определенного имени образа:
registry_name/user_name/image_name:tag
registry_name ― это имя реестра, в котором хранится образ. Как правило, это полностью определенное доменное имя реестра.
registry_name
user_name представляет пользователя или организацию, которым принадлежит образ.
user_name
image_name должно быть уникальным именем образа в пространстве имен пользователя.
image_name
tag указывает версию образа. Если в имени образа не указан тег образа, предполагается тег latest.
tag
latest
Чтобы запустить контейнер в локальной системе, сначала необходимо извлечь образ контейнера. Используйте утилиту Podman для извлечения образа из реестра. При извлечении образов всегда используйте полностью определенное имя образа. Команда podman pull извлекает указанный образ из реестра и сохраняет его локально.
podman pull
[user@host ~]$ podman pull registry.access.redhat.com/ubi8/ubi:latest Trying to pull registry.access.redhat.com/ubi8/ubi:latest...Getting image source signatures Copying blob 77c58f19bd6e: 70.54 MiB / 70.54 MiB [=========================] 10s Copying blob 47db82df7f3f: 1.68 KiB / 1.68 KiB [===========================] 10s Copying config a1f8c9699786: 4.26 KiB / 4.26 KiB [==========================] 0s Writing manifest to image destination Storing signatures a1f8c969978652a6d1b2dfb265ae0c6c346da69000160cd3ecd5f619e26fa9f3
[user@host ~]$
podman pull registry.access.redhat.com/ubi8/ubi:latest
Podman сохраняет извлеченные образы локально, и посмотреть их можно с помощью команды podman images.
podman images
[user@host ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi8/ubi latest a1f8c9699786 5 weeks ago 211 MB
В предыдущем выводе показано, что тег образа — latest, а идентификатор образа ― a1f8c96699786.
a1f8c96699786
Чтобы запустить контейнер из этого образа, используйте команду podman run. При выполнении команды podman run вы создаете и запускаете новый контейнер из образа контейнера. При необходимости используйте опции -it для взаимодействия с контейнером. Опции -it выделяют терминал для контейнера и позволяют отправлять в него команды нажатием клавиш.
podman run
-it
[user@host ~]$ podman run -it registry.access.redhat.com/ubi8/ubi:latest [root@8b032455db1a /]#
podman run -it registry.access.redhat.com/ubi8/ubi:latest
Если вы запускаете контейнер, используя полностью определенное имя образа, но образ еще не сохранен локально, команда podman run сначала извлекает образ из реестра, а затем запускает его.
Многие флаги Podman также имеют альтернативную длинную форму. Некоторые из них описаны ниже.
Флаг -t эквивалентен --tty. Он означает, что контейнеру выделяется pseudo-tty (псевдотерминал).
-t
--tty
pseudo-tty
Флаг -i эквивалентен --interactive. При использовании этой опции контейнер принимает стандартный поток ввода.
-i
--interactive
Флаг -d (или его длинная форма --detach) означает, что контейнер работает в фоновом режиме (отсоединен). При использовании этой опции утилита Podman запускает контейнер в фоновом режиме и отображает сформированный идентификатор контейнера.
-d
--detach
Полный список флагов см. на man-странице podman-run(1).
podman-run
При указании контейнера утилита Podman распознает имя или сформированный идентификатор контейнера. При запуске контейнера с помощью Podman используйте опцию --name, чтобы задать имя контейнера. Имена контейнеров должны быть уникальными. Если в команде podman run не указано имя контейнера, утилита Podman формирует произвольное уникальное имя.
--name
В следующем примере назначается имя контейнера, терминал Bash запускается непосредственно внутри контейнера, и на нем интерактивно выполняется команда.
Обратите внимание, что в случае, если теги не указаны явным образом, предполагается тег latest.
Команда в следующем примере вводится в одной строке.
[user@host ~]$ podman run -it --name=rhel8 registry.access.redhat.com/ubi8/ubi /bin/bash [root@c20631116955 /]# cat /etc/os-release NAME="Red Hat Enterprise Linux" VERSION="8.2 (Ootpa)" ID="rhel" ID_LIKE="fedora" VERSION_ID="8.2" PLATFORM_ID="platform:el8" PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8" REDHAT_BUGZILLA_PRODUCT_VERSION=8.2 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="8.2" [root@c20631116955 /]# exit exit [user@host ~]$
podman run -it --name=rhel8 registry.access.redhat.com/ubi8/ubi /bin/bash
[root@c20631116955 /]#
cat /etc/os-release
exit
Вы также можете выполнить быструю команду в контейнере, не взаимодействуя с ним, а после завершения команды удалить контейнер. Для этого используйте команду podman run --rm, указав после нее образ контейнера и соответствующую команду.
podman run --rm
[user@host ~]$ podman run --rm registry.access.redhat.com/ubi8/ubi cat /etc/os-release NAME="Red Hat Enterprise Linux" VERSION="8.2 (Ootpa)" ID="rhel" ID_LIKE="fedora" VERSION_ID="8.2" PLATFORM_ID="platform:el8" PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8" REDHAT_BUGZILLA_PRODUCT_VERSION=8.2 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="8.2" [user@host ~]$
podman run --rm registry.access.redhat.com/ubi8/ubi cat /etc/os-release
Контейнеры обеспечивают изоляцию ресурсов во время выполнения. Контейнеры используют пространства имен Linux, чтобы предоставлять отдельные изолированные окружения для ресурсов, таких как процессы, сетевые подключения и тома. Процессы, работающие в контейнере, изолированы от всех остальных процессов на хост-машине.
Просмотрите процессы, запущенные внутри контейнера.
[user@host ~]$ podman run -it registry.access.redhat.com/ubi7/ubi /bin/bash [root@ef2550ed815d /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 4.5 0.1 11840 2904 pts/0 Ss 22:10 0:00 /bin/bash root 15 0.0 0.1 51768 3388 pts/0 R+ 22:10 0:00 ps aux
podman run -it registry.access.redhat.com/ubi7/ubi /bin/bash
ps aux
Обратите внимание, что имя пользователя и идентификатор в контейнере отличаются от имени пользователя и идентификатора на хост-машине.
[root@ef2550ed815d /]# id uid=0(root) gid=0(root) groups=0(root) [root@ef2550ed815d /]# exit exit [user@host ~]$ id uid=1000(user) gid=1000(user) groups=1000(user),10(wheel)
[root@ef2550ed815d /]#
id
Man-страницы podman-pull(1), podman-images(1) и podman-run(1)
podman-pull
podman-images
Дополнительные сведения см. в главе Starting with containers руководства Red Hat Enterprise Linux 8 Building, Running, and Managing Containers: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index#starting-with-containers_building-running-and-managing-containers