Учебное пособие по 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