Как собрать под
Под (pod) — это группа из одного или нескольких контейнеров, которые работают вместе как единое целое и разделяют общие ресурсы.
Ниже инструкция, как создавать свой под, на примере Gitea — сервиса разработки ПО. Под в данном случае нужен для запуска приложения Gitea и сопутствующей базы данных.
1. Создайте под
Команда podman pod create создает под и инфра-контейнер для него.
$ podman pod create [опции]
Создать под gitea и пробросить порты с хоста в контейнеры:
$ podman pod create --name gitea -p 3000:3000 -p 2222:22
Опции
Примечание
- Имя пода можно не задавать — тогда Podman сгенерирует случайное имя новому поду.
- Задать имя пода можно как через опцию
--name, так и аргументом в конце команды (для совместимости с более ранними версиями Podman). Мы рекомендуем задавать имя через опцию, как показано в примере, так как это более надежный вариант в случае сложного синтаксиса команды.
2. Добавьте контейнеры в под
Команда podman run с опцией --pod добавит контейнер в под и запустит его.
$ podman run [опции] --pod <имя_пода> <имя_образа>
Пример запуска контейнера с образом базы данных Postgres для хранения данных Gitea в поде gitea:
$ podman run -d --pod gitea --name gitea-db \
-e POSTGRES_RANDOM_ROOT_PASSWORD=yes \
-e POSTGRES_USER=gitea \
-e POSTGRES_PASSWORD=gitea \
-e POSTGRES_DATABASE=gitea \
-v gitea-db-volume:/var/lib/postgres:Z \
docker.io/library/postgres:15
Вывод
Trying to pull docker.io/library//postgres:15...
Getting image source signatures
Copying blob 45ca6c0b3caf done
Copying blob ec5b0ea5c7ed done
Copying blob 10aec8a104c7 done
Copying blob b263198a7994 done
Copying blob 48102d6aaafe done
Copying blob 29def2d20dd4 done
Copying blob 29875012b20a done
Copying blob 97ec2e379797 done
Copying blob 0f9d7adf4bfa done
Copying blob 95d93b00a668 done
Copying config 2db55517bc done
Writing manifest to image destination
Storing signatures
1740424caa284c97f4f7dce66fcc338b4189013d64fd9c582874d584ed4b2edc
Аналогичный пример запуска контейнера с образом приложения Gitea в поде gitea:
$ podman run -d --pod gitea --name gitea-app \
-e GITEA__database__DB_TYPE=postgres \
-e GITEA__database__HOST=gitea-db:3306 \
-e GITEA__database__NAME=gitea \
-e GITEA__database__USER=gitea \
-e GITEA__database__PASSWD=gitea \
-v gitea-data-volume:/var/lib/gitea:Z \
-v gitea-config-volume:/etc/gitea:Z \
docker.io/gitea/gitea:latest
Вывод
Trying to pull docker.io/gitea/gitea:latest...
Getting image source signatures
Copying blob a4a492c751a4 done
Copying blob f919607dbbf1 done
Copying blob 9824c27679d3 done
Copying blob 2a134c4f23ef done
Copying blob 57122ea281e3 done
Copying blob 6afd914700c1 done
Copying blob ef8f822dc8a5 done
Copying config c44db74bae done
Writing manifest to image destination
Storing signatures
50620328a978c197c8cc04335f4e903462fb8397bc42c6652aaf4a676f23d21c
3. Проверьте, что все работает корректно
Команда podman ps с опцией --pod покажет контейнеры с информацией о том, в каком поде они находятся.
$ podman ps --pod
Вывод
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME
1076710e97aa localhost/podman-pause:4.3.1-0 2 hours ago Up 47 minutes ago 0.0.0.0:2222->22/tcp, 0.0.0.0:3000->3000/tcp 9452ddb9997d-infra 9452ddb9997d gitea
1740424caa28 docker.io/library/postgres:15 postgresd 47 minutes ago Up 47 minutes ago 0.0.0.0:2222->22/tcp, 0.0.0.0:3000->3000/tcp gitea-db 9452ddb9997d gitea
50620328a978 docker.io/gitea/gitea:latest /usr/bin/s6-svsca... 3 minutes ago Up 3 minutes ago 0.0.0.0:2222->22/tcp, 0.0.0.0:3000->3000/tcp gitea-app 9452ddb9997d gitea
Проверки, специфичные для приложения Gitea
Проверка, что 3000 порт прослушивается:
netstat -tlnp | grep 3000
# вывод
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 4969/conmon
Проверка доступности контента страницы:
$ curl --head http://localhost:3000
# вывод
HTTP/1.1 200 OK
Date: Fri, 08 Aug 2025 17:51:45 GMT
Просмотр логов:
podman logs gitea-app