Вступ¶
Примітка
Цей документ представляє розширений вміст із [батьківського документа](../../gemstones/containers/podman.md). Якщо вам потрібна коротка інструкція, цього батьківського документа може бути достатньо.
Podman (Pod Manager) — це інструмент керування контейнерами та зображеннями, сумісний з OCI (Ініціатива відкритого контейнера).
Podman:
- працює без демона (може запускати контейнери як службу systemd)
- дозволяє вам керувати контейнерами як непривілейований користувач (не обов’язково бути root)
- включені, на відміну від докерів, у сховища Rocky Linux
Це робить Podman не лише сумісним із докерами альтернативним середовищем виконання контейнерів, але й набагато більше.
Встановлення Podman¶
Використовуйте утиліту dnf
для встановлення Podman:
dnf install podman
Ви можете отримати список доступних підкоманд podman за допомогою наступної команди:
$ podman --help
Manage pods, containers and images
Usage:
podman [options] [command]
Available Commands:
attach Attach to a running container
auto-update Auto update containers according to their auto-update policy
...
Ось неповний список підкоманд, які найчастіше використовуються:
Підкоманда | Опис |
---|---|
build |
Створює зображення, використовуючи інструкції з Containerfiles |
commit |
Створює нове зображення на основі зміненого контейнера |
container |
Керує контейнерами |
cp |
Копіює файли/папки між контейнером і локальною файловою системою |
create |
Створює, але не запускає контейнер |
exec |
Запускає процес у запущеному контейнері |
image |
Керує зображеннями |
images |
Перераховує зображення в локальному сховищі |
info |
Відображає інформацію про систему Podman |
init |
Ініціалізує один або кілька контейнерів |
inspect |
Відображає конфігурацію об'єкта, позначеного ID |
kill |
Вбиває один або кілька запущених контейнерів за допомогою певного сигналу |
login |
Вхід до реєстру контейнерів |
logs |
Отримує журнали одного або кількох контейнерів |
network |
Керує мережами |
pause |
Призупиняє всі процеси в одному або кількох контейнерах |
ps |
Перераховує контейнери |
pull |
Витягує образ із реєстру |
push |
Надсилає зображення до вказаного пункту призначення |
restart |
Перезапускає один або кілька контейнерів |
rm |
Видаляє один або кілька контейнерів |
rmi |
Вилучає одне або кілька зображень із локального сховища |
run |
Виконує команду в новому контейнері |
start |
Запускає один або декілька контейнерів |
stats |
Відображає прямий потік статистики використання ресурсів контейнера |
stop |
Зупиняє один або декілька контейнерів |
system |
Керує podman |
top |
Відображає запущені процеси контейнера |
unpause |
Відновлює процеси в одному або кількох контейнерах |
volume |
Керує обсягами |
Примітка
Podman може запускати майже будь-яку команду Docker завдяки подібному інтерфейсу CLI.
Якщо вам потрібно використовувати файл створення, не забудьте встановити пакет podman-compose
:
dnf install podman-compose
Додавання контейнера¶
Запустіть Nextcloud автономну хмарну платформу як на прикладі:
podman run -d -p 8080:80 nextcloud
Ви отримаєте підказку вибрати реєстр контейнерів для завантаження. У нашому прикладі ви будете використовувати docker.io/library/nextcloud:latest
.
Щойно ви завантажите контейнер Nextcloud, він запуститься.
Введіть ip_address:8080 у своєму веб-браузері (за умови, що ви відкрили порт у firewalld
) і налаштуйте Nextcloud:
Запуск контейнерів як служб systemd¶
Як згадувалося, ви можете запускати контейнери Podman як служби systemd
. Давайте тепер зробимо це за допомогою Nextcloud. Запустіть:
podman ps
Ви отримаєте список запущених контейнерів:
04f7553f431a docker.io/library/nextcloud:latest apache2-foregroun... 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp compassionate_meninsky
Як видно вище, ім’я нашого контейнера – compassionate_meninsky
.
Щоб створити контейнер systemd
і ввімкнути його під час перезавантаження, виконайте наступне:
podman generate systemd --name compassionate_meninsky > /usr/lib/systemd/system/nextcloud.service
systemctl enable nextcloud
Замініть compassionate_meninsky
на назву вашого контейнера.
Коли ваша система перезавантажиться, Nextcloud перезапуститься в Podman.
DockerFiles¶
DockerFile — це файл, який використовується Docker для створення власних зображень контейнерів. Оскільки Podman повністю сумісний з Dockerfile, ви можете створювати образи контейнерів за допомогою Podman так само, як і з Docker.
Веб-сервер із DockerFile¶
Ви створите сервер http
на основі Rocky Linux 9.
Створіть папку, присвячену нашому зображенню:
mkdir myrocky && cd myrocky
Створіть файл index.html
, який працюватиме на нашому веб-сервері:
echo "Welcome to Rocky" > index.html
Створіть файл Dockerfile із таким вмістом:
# Use the latest rockylinux image as a start
FROM rockylinux:9
# Make it uptodate
RUN dnf -y update
# Install and enable httpd
RUN dnf -y install httpd
RUN systemctl enable httpd
# Copy the local index.html file into our image
COPY index.html /var/www/html/
# Expose the port 80 to the outside
EXPOSE 80
# Start the services
CMD [ "/sbin/init" ]
Ви готові створити наш образ під назвою myrockywebserver
:
$ podman build -t myrockywebserver .
STEP 1/7: FROM rockylinux:9
Resolved "rockylinux" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/rockylinux:9...
Getting image source signatures
Copying blob 489e1be6ce56 skipped: already exists
Copying config b72d2d9150 done
Writing manifest to image destination
STEP 2/7: RUN dnf -y update
Rocky Linux 9 - BaseOS 406 kB/s | 2.2 MB 00:05
Rocky Linux 9 - AppStream 9.9 MB/s | 7.4 MB 00:00
Rocky Linux 9 - Extras 35 kB/s | 14 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Upgrading:
basesystem noarch 11-13.el9.0.1 baseos 6.4 k
binutils x86_64 2.35.2-42.el9_3.1 baseos 4.5 M
...
Complete!
--> 2e8b93d30f31
STEP 3/7: RUN dnf -y install httpd
Last metadata expiration check: 0:00:34 ago on Wed Apr 3 07:29:56 2024.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.57-5.el9 appstream 46 k
...
Complete!
--> 71db5cabef1e
STEP 4/7: RUN systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
--> 423d45a3cb2d
STEP 5/7: COPY index.html /var/www/html/
--> dfaf9236ebae
STEP 6/7: EXPOSE 80
--> 439bc5aee524
STEP 7/7: CMD [ "/sbin/init" ]
COMMIT myrockywebserver
--> 7fcf202d3c8d
Successfully tagged localhost/myrockywebserver:latest
7fcf202d3c8d059837cc4e7bc083a526966874f978cd4ab18690efb0f893d583
Ви можете запустити образ Podman і підтвердити, що він запущений:
$ podman run -d --name rockywebserver -p 8080:80 localhost/myrockywebserver
282c09eecf845c7d9390f6878f9340a802cc2e13d654da197d6c08111905f1bd
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
282c09eecf84 localhost/myrockywebserver:latest /sbin/init 16 seconds ago Up 16 seconds 0.0.0.0:8080->80/tcp rockywebserver
Ви запустили образ Podman у режимі демона (-p
) і назвали його rockywebserver
(параметр --name
).
Ви перенаправили порт 80 (захищений) на порт 8080 за допомогою параметра -p
. Перевірте, чи прослуховує порт:
ss -tuna | grep "*:8080"
tcp LISTEN 0 4096 *:8080 *:*
Переконайтеся, що файл index.html
доступний:
$ curl http://localhost:8080
Welcome to Rocky
Вітаємо! Тепер ви можете зупинити та знищити своє запущене зображення, вказавши назву, яку ви вказали під час створення:
podman stop rockywebserver && podman rm rockywebserver
Якщо ви перезапустите процес збирання, podman
використовуватиме кеш на кожному кроці збирання:
$ podman build -t myrockywebserver .
STEP 1/7: FROM rockylinux:9
STEP 2/7: RUN dnf -y update
--> Using cache 2e8b93d30f3104d77827a888fdf1d6350d203af18e16ae528b9ca612b850f844
--> 2e8b93d30f31
STEP 3/7: RUN dnf -y install httpd
--> Using cache 71db5cabef1e033c0d7416bc341848fbf4dfcfa25cd43758a8b264ac0cfcf461
--> 71db5cabef1e
STEP 4/7: RUN systemctl enable httpd
--> Using cache 423d45a3cb2d9f5ef0af474e4f16721f4c84c1b80aa486925a3ae2b563ba3968
--> 423d45a3cb2d
STEP 5/7: COPY index.html /var/www/html/
--> Using cache dfaf9236ebaecf835ecb9049c657723bd9ec37190679dd3532e7d75c0ca80331
--> dfaf9236ebae
STEP 6/7: EXPOSE 80
--> Using cache 439bc5aee524338a416ae5080afbbea258a3c5e5cd910b2485559b4a908f81a3
--> 439bc5aee524
STEP 7/7: CMD [ "/sbin/init" ]
--> Using cache 7fcf202d3c8d059837cc4e7bc083a526966874f978cd4ab18690efb0f893d583
COMMIT myrockywebserver
--> 7fcf202d3c8d
Successfully tagged localhost/myrockywebserver:latest
7fcf202d3c8d059837cc4e7bc083a526966874f978cd4ab18690efb0f893d583
Ви можете очистити цей кеш за допомогою підкоманди prune
:
podman system prune -a -f
Опції | Опис |
---|---|
-a |
Видаляє всі невикористовувані дані, а не лише зовнішні для Podman |
-f |
Немає запиту на підтвердження |
--volumes |
Prune volumes |
Author: Neel Chauhan, Antoine Le Morvan
Contributors: Steven Spencer, Ganna Zhyrnova