Поиск по сайту:

Учебное пособие по Podman — начало работы с Podman

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

Прежде чем мы начнем с Podman, убедитесь, что вы установили Podman на свой компьютер с Linux.

  • Что такое Podman и как установить Podman в Linux

Начните работу с Подманом

Podman предоставляет интерфейс командной строки (CLI), аналогичный механизму контейнеров Docker. Фактически, Podman стремится стать полноценной заменой Docker-клиента, предоставляемого Docker.

Команды Podman и Docker практически одинаковы. Вы можете просто заменить docker на podman в большинстве команд docker. Например, команда docker run становится podman run, а docker build становится podman build и так далее.

Вы даже можете создать псевдоним docker для podman, как показано ниже:

alias docker=podman

С этого момента вы можете использовать команды docker и podman одновременно. Например, если вы запустите docker ps, он автоматически выполнит команду podman ps. Переход с Docker на Podman стал намного проще!

1. Получение помощи Podman

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

Чтобы просмотреть справочное руководство Podman, а также список доступных подкоманд и общих параметров, выполните:

podman --help

Отобразить раздел справки Podman

Чтобы научиться использовать любую подкоманду, например attach, просто выполните:

podman attach --help

2. Поиск изображений

К счастью, образы, созданные Docker и Podman, совместимы со стандартом OCI. Таким образом, Podman может отправлять и извлекать образы из реестров контейнеров, таких как Docker Hub и Quay.io.

Давайте найдем образы Alpine Linux с помощью команды:

podman search alpine

Поиск изображений с помощью Podman

Как видите, Podman перечисляет образы Alpine как из Docker Hub, так и из Quay.

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

Аналогичным образом вы можете искать изображения на основе Arch Linux, как показано ниже:

podman search archlinux

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

3. Загрузите изображения

Для целей данного руководства я загрузлю универсальный базовый образ Redhat 8 (UBI).

Чтобы загрузить образ Redhat с помощью Podman, запустите:

podman pull redhat/ubi8

Вам будет предложено выбрать реестр контейнеров для загрузки. Я выбрал Docker Hub. Вы увидите небольшую стрелку перед выбранным реестром.

? Please select an image: 
    registry.fedoraproject.org/redhat/ubi8:latest
    registry.access.redhat.com/redhat/ubi8:latest
  ▸ docker.io/redhat/ubi8:latest
    quay.io/redhat/ubi8:latest

Образ контейнера будет загружен из выбранного реестра.

✔ docker.io/redhat/ubi8:latest

Trying to pull docker.io/redhat/ubi8:latest...
Getting image source signatures
Copying blob a50df8fd88fe done  
Copying blob 1cadda38f72d done  
Copying config 0ced1c7c9b done  
Writing manifest to image destination
Storing signatures
0ced1c7c9b23d0e107c7b15d5a0017abbbcf7e64e49a4c9f9efa1b9589ca8b68

Загрузка изображений с помощью Podman

Вы можете загружать и запускать образы разных типов независимо от используемого типа распространения. Например, вы можете загружать и использовать образы Alpine на хосте Fedora и наоборот.

podman pull alpine

Вы даже можете загрузить определенную версию изображения. Следующая команда загружает образ Ubuntu версии 20.04:

podman pull ubuntu:20.04

Поскольку мы используем Podman как пользователь без полномочий root, все образы контейнеров хранятся в домашнем каталоге пользователя, т. е. $HOME/.local/share/containers/storage вместо /var/lib. /контейнеры.

$ ls ~/.local/share/containers/storage/
cache  libpod  mounts  overlay  overlay-containers  overlay-images  overlay-layers  storage.lock  tmp  userns.lock

4. Просмотр изображений

Чтобы просмотреть список локально загруженных изображений, запустите:

$подман изображения

Пример вывода:

REPOSITORY                TAG         IMAGE ID      CREATED      SIZE
docker.io/library/ubuntu  20.04       1318b700e415  7 days ago   75.2 MB
docker.io/redhat/ubi8     latest      0ced1c7c9b23  13 days ago  234 MB
docker.io/library/alpine  latest      d4ff818577bc  6 weeks ago  5.87 MB

Просмотр образов контейнеров с помощью Podman

Как вы можете видеть, в приведенном выше выводе указано имя репозитория, в который мы загрузили изображения, тег изображения, идентификатор изображения, время создания изображения и его размер.

Для тех, кому интересно: TAG относится к конкретному снимку образа Ubuntu (например, 20.04 и новее). TAG — это просто дополнительное имя к локальному изображению. IMAGE ID (например, 1318b700e415) — это уникальный идентификатор образа Ubuntu.

5. Запускаем контейнеры

Контейнер можно запустить либо с помощью тега изображения, либо с помощью идентификатора изображения.

Давайте запустим новый контейнер с образом Redhat UBI, используя его тег:

podman run -it ubi8:latest

Эта команда создает контейнер Redhat 8, используя образ ubi8:latest, и подключает контейнер к терминалу, чтобы вы могли с ним взаимодействовать.

Здесь,

  • -i: позволяет нам установить интерактивное соединение, захватив стандартный вход (STDIN) контейнера.
  • -t: назначает новый псевдотерминал внутри контейнера Redhat 8.
  • ubi8:latest : контейнер Redhat 8 с тегом «последний».

После запуска контейнера вы автоматически попадете в оболочку контейнера (командная строка):

Запускайте контейнеры с помощью Podman

Вы заметили число 607a288c810d в приведенном выше выводе? Это идентификатор контейнера.

Внимание! Обратите внимание, что Идентификатор контейнера и идентификатор образа Docker отличаются.

Вы можете начать играть со своим Контейнером прямо сейчас.

Чтобы вернуться к терминалу вашего хоста, не выходя из контейнера, нажмите CTRL+p, а затем CTRL+q.

Теперь вы будете отключены от контейнера и возвращены обратно в консоль хост-компьютера. Контейнер по-прежнему будет работать в фоновом режиме.

Чтобы выйти из контейнера, просто введите exit в консоли контейнера и нажмите клавишу ENTER:

exit

Эта команда завершит работу работающего Контейнера.

Если вы хотите запустить контейнер с идентификатором IMAGE, просто замените ТЕГ изображения (ubi8:latest) на идентификатор изображения (0ced1c7c9b23) в предыдущей команде:

podman run -it 0ced1c7c9b23

Это запустит контейнер Redhat 8.

6. Запуск контейнеров в фоновом режиме

Вы также можете запускать контейнеры в фоновом режиме в автономном режиме.

Чтобы запустить контейнер в автономном режиме, мы используем флаг -d:

podman run -it -d ubi8:latest

Когда мы запускаем контейнер в автономном режиме, Podman отобразит идентификатор контейнера в стандартном выводе.

a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29

Давайте проверим работающие контейнеры с помощью команды:

podman ps

Запускайте контейнеры в фоновом режиме с помощью Podman

Теперь Контейнер работает в фоновом режиме.

Вы можете прикрепить к нему, как описано в следующем разделе.

7. Прикрепляйте и отсоединяйте контейнеры.

Как указано в предыдущем разделе, вы можете безопасно отсоединиться от работающего контейнера, нажав CTRL+p, а затем CTRL+q . . Это позволит вам вернуться в терминал хоста.

Чтобы снова подключиться к контейнеру, сначала найдите идентификатор работающего контейнера или его имя с помощью команды podman ps:

podman ps

Пример вывода:

CONTAINER ID  IMAGE                         COMMAND     CREATED      STATUS          PORTS       NAMES
607a288c810d  docker.io/redhat/ubi8:latest  /bin/bash   2 hours ago  Up 2 hours ago              cool_cannon

Здесь 607a288c810d — это идентификатор контейнера.

А затем просто введите команду podman Attach, а затем идентификатор контейнера, как показано ниже:

podman attach 607a288c810d

Прикрепить к контейнеру с помощью Podman

Вы также можете подключиться к нему, используя имя контейнера, как показано ниже:

podman attach cool_cannon

Чтобы отсоединиться от контейнера, просто нажмите CTRL+p и CTRL+q.

8. Просмотр запущенных контейнеров

Чтобы найти или просмотреть запущенные контейнеры, введите:

podman ps

Пример вывода:

CONTAINER ID  IMAGE                            COMMAND     CREATED         STATUS             PORTS       NAMES
e783c0202b7d  docker.io/library/alpine:latest  /bin/sh     37 seconds ago  Up 38 seconds ago              optimistic_murdock

Это будет только список запущенных контейнеров. Если вы хотите вывести список как запущенных, так и остановленных контейнеров, используйте флаг -a.

podman ps -a

Пример вывода:

CONTAINER ID  IMAGE                            COMMAND     CREATED         STATUS                         PORTS       NAMES
56c20497cbcd  docker.io/redhat/ubi8:latest     /bin/bash   3 hours ago     Exited (0) 3 hours ago                     wizardly_albattani
d23672b15cff  docker.io/redhat/ubi8:latest     /bin/bash   3 hours ago     Exited (0) 3 hours ago                     nifty_merkle
89b2c038e1ba  docker.io/redhat/ubi8:latest     /bin/bash   3 hours ago     Exited (0) 2 hours ago                     xenodochial_euler
607a288c810d  docker.io/redhat/ubi8:latest     /bin/bash   2 hours ago     Exited (0) About a minute ago              cool_cannon
e783c0202b7d  docker.io/library/alpine:latest  /bin/sh     43 seconds ago  Up 43 seconds ago                          optimistic_murdock

Просмотр запущенных и остановленных контейнеров с помощью Podman

9. Автоматически удалять контейнер после его закрытия

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

podman run -it --rm ubi8:latest

Как только вы выйдете из Контейнера, он будет автоматически удален.

10. Запуск и остановка контейнеров

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

Чтобы создать несколько новых контейнеров, мы можем использовать команду podman run, как описано в разделе "5. Запуск контейнеров"< раздел.

Чтобы запустить (включить) существующий Контейнер, мы просто делаем:

podman start <container_name>

Аналогичным образом мы можем остановить (выключить) выполняемую команду с помощью команды:

podman stop <container_name>

Позвольте мне показать вам пример, чтобы вы лучше поняли.

Сначала найдите список всех Контейнеров:

$ podman ps -a
CONTAINER ID  IMAGE                            COMMAND     CREATED         STATUS                     PORTS       NAMES
56c20497cbcd  docker.io/redhat/ubi8:latest     /bin/bash   2 days ago      Exited (0) 2 days ago                  wizardly_albattani
d23672b15cff  docker.io/redhat/ubi8:latest     /bin/bash   2 days ago      Exited (0) 2 days ago                  nifty_merkle
89b2c038e1ba  docker.io/redhat/ubi8:latest     /bin/bash   2 days ago      Exited (0) 2 days ago                  xenodochial_euler
607a288c810d  docker.io/redhat/ubi8:latest     /bin/bash   2 days ago      Exited (0) 2 days ago                  cool_cannon
e783c0202b7d  docker.io/library/alpine:latest  /bin/sh     2 days ago      Exited (0) 2 days ago                  optimistic_murdock

Имена контейнеров показаны в разделе NAMES (последний столбец) приведенного выше вывода.

Я собираюсь запустить контейнер с именем wizardly_albattani с помощью команды:

podman start wizardly_albattani

Проверим, запустился ли он:

$ podman ps
CONTAINER ID  IMAGE                         COMMAND     CREATED     STATUS            PORTS       NAMES
56c20497cbcd  docker.io/redhat/ubi8:latest  /bin/bash   2 days ago  Up 7 seconds ago              wizardly_albattani

Да, это было 7 секунд назад.

Чтобы остановить Контейнер, просто выполните:

podman stop wizardly_albattani

11. Присвойте имена контейнерам

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

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

Имя контейнера

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

Однако вы можете присвоить статическое имя контейнерам с помощью флага --name, как показано ниже:

podman run -it -d --name ostechnix_redhat ubi8:latest

Приведенная выше команда создаст новый контейнер для запуска в автономном режиме и назовет его ostechnix_redhat.

Чтобы просмотреть список запущенных Контейнеров, мы делаем:

$подман, пс

Пример вывода:

CONTAINER ID  IMAGE                         COMMAND     CREATED        STATUS            PORTS       NAMES
6fa78116dcb7  docker.io/redhat/ubi8:latest  /bin/bash   4 seconds ago  Up 5 seconds ago              ostechnix_redhat

Присвойте имя контейнерам с помощью Podman

Вы заметили название Контейнера? Мы дали контейнеру собственное имя (т. е. ostechnix_redhat).

12. Создавайте собственные изображения

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

Сначала запустите существующий контейнер или запустите новый.

Я собираюсь создать новый контейнер Ubuntu:

podman run -it 1318b700e415

Теперь вы внутри Контейнера.

root@b871b0fd5810:/#

Просто установите, обновите или удалите любые приложения в Контейнере.

Для целей этого руководства я установлю веб-сервер Apache:

root@b871b0fd5810:/# apt update
root@b871b0fd5810:/# apt install apache2 -y
root@b871b0fd5810:/# service apache2 start

Закончив, отсоединитесь от контейнера и вернитесь обратно на терминал хоста, нажав CTRL+p и CTRL+q.

Обратите внимание, что Контейнер все еще работает в фоновом режиме!

Теперь создайте образ из существующего контейнера с помощью команды:

podman commit b871b0fd5810 ostechnix/ubuntu_apache

Здесь,

  • b871b0fd5810 — идентификатор контейнера Ubuntu.
  • ostechnix – имя пользователя, создавшего контейнер.
  • ubuntu_apache – имя изображения, созданного пользователем ostechnix.

Теперь проверьте, создано ли новое изображение, перечислив доступные изображения:

podman images

Пример вывода:

REPOSITORY                         TAG         IMAGE ID      CREATED         SIZE
localhost/ostechnix/ubuntu_apache  latest      6c9b2fb66400  25 seconds ago  222 MB
docker.io/library/ubuntu           20.04       1318b700e415  10 days ago     75.2 MB
docker.io/redhat/ubi8              latest      0ced1c7c9b23  2 weeks ago     234 MB
docker.io/library/alpine           latest      d4ff818577bc  7 weeks ago     5.87 MB

Создавайте собственные изображения с помощью Podman

Как вы видите в приведенном выше выводе, создается новый образ под названием ubuntu_apache.

Давайте начнем новый контейнер с этого изображения:

podman run -it --rm --name apache_webserver -p 8080:80 localhost/ostechnix/ubuntu_apache

Здесь я запускаю Контейнер с вновь созданным изображением на предыдущем этапе. Я также сопоставляю локальный порт 8080 в локальной системе с портом 80 внутри контейнера.

После запуска контейнера убедитесь, что веб-сервер Apache запущен с помощью команды:

root@d0f60f4dad85:/# service apache2 start

Теперь откройте браузер в своей хост-системе и перейдите по адресу http://localhost:8080, чтобы проверить, работает ли веб-сервер Apache в контейнере.

Тестовая страница веб-сервера Apache, работающая внутри контейнера

13. Просмотр журналов контейнеров

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

podman logs apache_webserver

Просмотр журналов контейнеров с помощью Podman

14. Удалить контейнеры

Убедитесь, что контейнеры остановлены:

podman stop ostechnix_redhat

После остановки Контейнера удалите его командой:

podman rm ostechnix_redhat

Аналогичным образом удалите все контейнеры один за другим, как показано выше.

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

Чтобы удалить все остановленные контейнеры за один раз, просто запустите:

podman container prune

Введите "Y" для подтверждения и нажмите клавишу ENTER, чтобы удалить контейнеры.

WARNING! This will remove all non running containers.
Are you sure you want to continue? [y/N] y
2124a1fbc85a6be7d516e747723129bd7bb9c39d3a54951c9a81407d30ded1ab
54884f3375947026d4e87b99cb3a09e114c89120b101f5c8c1e614aca963975c
56c20497cbcdd9599c2fa729277ecf679ac29f79a0b06af3ae1a135726465ba7
607a288c810d2e605d9ba7590f8f7558ef5f96e87897a1cdde471ae9a74b36ad
69bbd87b44cb6c9a582749f4ad010b6b273e65f9fe424058fdc0bc55b188d7e4
89b2c038e1baf6ac59f0da8e43a7efedc7ba73a18ed8d704c879ffdbc7eb7f28
a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29
aa14879baf0919323730539dd949231d5bb89ca4207dd36c02a741316e6d0f18
b871b0fd5810f55e75bdd480d5fb34b09b0e293604f88896002a9368a607bf7e
d23672b15cffc0a774227dc6b457a8bff5347073a112f6729d63ddf400f19dc7
e783c0202b7d7a6664e731feeff4bdb57a79df79080046ed2b728df4bce789d2
ebfd6210a6beedce43af0c41296e329d416128752ab603abd44c73117bf5dfd0

15. Удаление изображений

Вы можете удалить изображения, которые больше не нужны!

Выведите список всех загруженных изображений с помощью команды:

podman images

Пример вывода:

REPOSITORY                         TAG         IMAGE ID      CREATED         SIZE
localhost/ostechnix/ubuntu_apache  latest      6c9b2fb66400  37 minutes ago  222 MB
docker.io/library/ubuntu           20.04       1318b700e415  10 days ago     75.2 MB
docker.io/redhat/ubi8              latest      0ced1c7c9b23  2 weeks ago     234 MB
docker.io/library/alpine           latest      d4ff818577bc  7 weeks ago     5.87 MB

Теперь удалите изображение, используя его идентификатор изображения или имя, как показано ниже:

podman rmi 6c9b2fb66400

Пример вывода:

Untagged: localhost/ostechnix/ubuntu_apache:latest
Deleted: 6c9b2fb66400138738ad12643d8461fbbb859f33d3be3c35181bb9ee9b11748d

Аналогичным образом удалите все остальные неиспользуемые изображения,

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

Заключение

В этом подробном руководстве по Podman мы предоставили 15 практических примеров того, как начать работу с Podman в Linux. Если вы разработчик, изучение Podman очень важно для продвижения по карьерной лестнице. Научитесь тщательно использовать Podman. Это стоит вашего времени!

Ресурсы:

  • Веб-сайт Podman
  • Репозиторий Podman на GitHub
  • Документация Podman

Связанное чтение:

  • Начало работы с Toolbox в Fedora Silverblue
  • Руководство по Vagrant. Начало работы с Vagrant в Linux

Статьи по данной тематике