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

Как установить Podman в Ubuntu 24.04 (Noble Numbat)


Вы начали путь изучения и освоения технологий контейнеризации? Вы наткнулись на Подмана в своем исследовании «лучших механизмов управления контейнерами»? Podman — это бесплатное приложение, которое может управлять контейнерами и модулями. Благодаря мощному интерфейсу командной строки вы можете создавать, находить, запускать и управлять общим жизненным циклом контейнеров. Podman приобрел большую популярность как более безопасная альтернатива Docker. Но в отличие от Docker, podman не требует, чтобы процесс-демон работал в фоновом режиме.

Podman изначально был создан на основе контейнера и в соответствии со стандартами Open Container Initiative (OCI). Он поддерживает следующие функции, связанные с контейнерами:

  • Управление образами контейнеров. Используйте podman для создания образов контейнеров, отправки их в реестр или извлечения из реестра.
  • Запуск контейнерных приложений: подкоманда run используется для запуска контейнера из образа, входа в его оболочку и управления приложением в контейнере.
  • Управление хранилищем: Podman позволяет создавать постоянные тома, подключаться к контейнеру и удалять тома.
  • Управление сетью: Podman предоставляет вам команды для управления сетью контейнеров. Создание сетевого моста и подключение сети к приложению.
  • Управление модулями. Основная задача Podman — не управление модулями, а возможность управлять группой контейнеров как модулями. Это похоже на функциональность, которую вы получаете в Kubernetes.

Что включает в себя эта статья:

  • Как установить подман на Ubuntu 24.04
  • Как создать образ докера с помощью Dockerfile
  • Как запускать контейнеры в Podman
  • Как подключить внешнее хранилище в контейнер Podman
  • Как запустить поды в Podman
  • Как создать сеть в Podman и использовать со своими контейнерами

1 – Установите Podman на Ubuntu 24.04.

Обновите список пакетов в вашей системе Ubuntu.

sudo apt update

Установите Podman с помощью инструмента управления пакетами apt, доступного в Ubuntu.

sudo apt install podman -y

Установка займет всего несколько секунд.

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  aardvark-dns buildah catatonit conmon containernetworking-plugins crun fuse-overlayfs golang-github-containers-common golang-github-containers-image libslirp0 libsubid4 libyajl2 login netavark
  passt passwd slirp4netns uidmap
Suggested packages:
  containers-storage libwasmedge0 docker-compose
The following NEW packages will be installed:
  aardvark-dns buildah catatonit conmon containernetworking-plugins crun fuse-overlayfs golang-github-containers-common golang-github-containers-image libslirp0 libsubid4 libyajl2 netavark passt
  podman slirp4netns uidmap
The following packages will be upgraded:
  login passwd
2 upgraded, 17 newly installed, 0 to remove and 187 not upgraded.
Need to get 33.4 MB of archives.
After this operation, 130 MB of additional disk space will be used.
Get:1 http://ke.archive.ubuntu.com/ubuntu noble/main amd64 login amd64 1:4.13+dfsg1-4ubuntu3 [202 kB]
Get:2 http://ke.archive.ubuntu.com/ubuntu noble/main amd64 passwd amd64 1:4.13+dfsg1-4ubuntu3 [845 kB]
Get:3 http://ke.archive.ubuntu.com/ubuntu noble/universe amd64 netavark amd64 1.4.0-4 [1,666 kB]
8% [3 netavark 1,217 kB/1,666 kB 73%]
... 

2. Создайте свое приложение с помощью Dockerfile.

Подтвердите установку Podman, проверив его версию.

$ podman --version
podman version 4.9.3

Давайте создадим образ веб-сервера Nginx, используя Dockerfile. Создайте новый файл с именем Dockerfile.

vim Dockerfile

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

FROM ubuntu
MAINTAINER Josphat Mutai <[email >

RUN apt update
RUN apt install nginx -y
RUN echo "Hello World from Podman" > /var/www/html/index.html

EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

Создайте образ контейнера с помощью команды podman build.

podman build -t nginx:latest .

Это загрузит базовый образ Ubuntu, установит пакет nginx, создаст простую веб-страницу hello world и установит порт, на котором будет работать служба, на 80.

....
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Setting up nginx (1.18.0-6ubuntu14.4) ...
Processing triggers for libc-bin (2.35-0ubuntu3.6) ...
--> 10af6f97e841
STEP 5/7: RUN echo "Hello World from Podman" > /var/www/html/index.html
--> 5f7aff2e1220
STEP 6/7: EXPOSE 80
--> b506f58bddca
STEP 7/7: CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
COMMIT nginx:latest
--> 4bf25c100a11
Successfully tagged localhost/nginx:latest
4bf25c100a116551b0d727e827d560357f6a5edc15265e2fb7805f16677e2ecc

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

$ podman images
REPOSITORY                TAG         IMAGE ID      CREATED         SIZE
localhost/nginx           latest      4bf25c100a11  40 seconds ago  188 MB
docker.io/library/ubuntu  latest      7af9ba4f0a47  10 days ago     80.4 MB

3 – Запуск контейнерного приложения в контейнере

У нас есть образ контейнера, который можно использовать для создания работающего экземпляра приложения — это контейнер. Вы можете создать контейнер с помощью команд podman run.

podman run -d -p 8080:80 --name nginx  localhost/nginx

Флаг -d укажет podman запустить контейнер в фоновом режиме и отключить его, -p 8080 привязывает службу к порту вашего локального хоста с номером 8080. Контейнер будет иметь имя nginx.

Список запущенных контейнеров Podman в системе.

$ podman ps
CONTAINER ID  IMAGE                   COMMAND               CREATED        STATUS        PORTS                 NAMES
40c59fdad9ae  localhost/nginx:latest  /usr/sbin/nginx -...  3 seconds ago  Up 3 seconds  0.0.0.0:8080->80/tcp  nginx

Получите доступ к веб-странице приложения через IP-порт сервера 8080.

Команду curl также можно использовать для проверки функциональности приложения из CLI.

$ curl http://192.168.1.201:8080/
Hello World from Podman

4 – Подключите внешнее хранилище в контейнер Podman

Если вы удалите контейнер, все данные, хранящиеся в нем, будут потеряны. Для сохранения данных требуется внешнее хранилище. Мы можем рассмотреть некоторые доступные для этого варианты.

1. Использование локального каталога

В качестве примера мы создаем каталог /data.

mkdir -p ~/data/container
echo "Test file for container data persistence"|tee ~/data/container/test.txt

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

$ podman run -it -v ~/data/container:/mnt ubuntu /bin/bash
root@ebd6efbb01bf:/# cat  /mnt/test.txt
Test file for container data persistence

2. Использование томов Podman

Тома Podman хранят данные в каталоге /var/lib/containers/storage/volumes/. Давайте создадим тестовый том, чтобы проверить это.

podman volume create testvolume

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

jkmutai@ubuntu-2404-server:~$ podman volume ls
DRIVER      VOLUME NAME
local       testvolume

jkmutai@ubuntu-2404-server:~$ podman volume inspect testvolume
[
     {
          "Name": "testvolume",
          "Driver": "local",
          "Mountpoint": "/home/jkmutai/.local/share/containers/storage/volumes/testvolume/_data",
          "CreatedAt": "2024-04-21T13:13:47.175944787Z",
          "Labels": {},
          "Scope": "local",
          "Options": {},
          "MountCount": 0,
          "NeedsCopyUp": true,
          "NeedsChown": true,
          "LockNumber": 3
     }
]

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

$ podman run -it -v testvolume:/mnt ubuntu /bin/bash

Подтвердите, перечислив точки монтирования в контейнере.

root@8bf46bd77811:/# df -hT
Filesystem                        Type     Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4      15G  5.7G  8.3G  41% /mnt
tmpfs                             tmpfs    392M  184K  392M   1% /etc/hosts
shm                               tmpfs     63M     0   63M   0% /dev/shm
overlay                           overlay   15G  5.7G  8.3G  41% /
tmpfs                             tmpfs     64M     0   64M   0% /dev

Чтобы удалить запуск тома:

podman volume rm testvolume

3. Файловые системы NFS

Создайте том с информацией о доступе к NFS.

podman volume create \
--opt type=nfs4 \
--opt o=rw \
--opt device=192.168.1.22:/nfsshare nfsvolume 

Где;

  • 192.168.1.22 — IP-адрес вашего NFS-сервера.
  • /nfsshare — это экспортированный путь к общему ресурсу NFS – общий ресурс NFS.

Теперь смонтируйте том в контейнере, как и любые другие тома.

 podman run -it -v nfsvolume:/nfsshare ubuntu

5 – Как запускать модули в Podman

Создайте модуль, службы которого будут находиться на порту 8085.

podman pod create -p 8085:80 -n mypod

Список созданных модулей.

$ podman pod ls
POD ID        NAME        STATUS      CREATED        INFRA ID      # OF CONTAINERS
fd73821c2dbb  mypod       Created     5 seconds ago  aaacb992072e  1

Затем вы можете создать контейнер внутри модуля.

podman run -dt --pod mypod localhost/nginx

Посмотреть работающие контейнеры

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED             STATUS         PORTS                 NAMES
aaacb992072e  localhost/podman-pause:4.9.3-0                        About a minute ago  Up 19 seconds  0.0.0.0:8085->80/tcp  fd73821c2dbb-infra
e3d2331926fc  localhost/nginx:latest          /usr/sbin/nginx -...  19 seconds ago      Up 19 seconds  0.0.0.0:8085->80/tcp  heuristic_tu

Тестовый сервис.

$ curl localhost:8085
Hello World from Podman

Мы создаем несколько контейнеров, например запускаем Nginx и MySQL, как показано ниже.

podman run -dt --pod new:mypod2 -p 8086:80 -p 3306:3306 localhost/nginx
podman run -dt --pod mypod2 -e MYSQL_ROOT_PASSWORD=DBPassword docker.io/library/mariadb

Получение списка контейнеров

$ podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED             STATUS             PORTS                                         NAMES
aaacb992072e  localhost/podman-pause:4.9.3-0                          7 minutes ago       Up 6 minutes       0.0.0.0:8085->80/tcp                          fd73821c2dbb-infra
e3d2331926fc  localhost/nginx:latest            /usr/sbin/nginx -...  6 minutes ago       Up 6 minutes       0.0.0.0:8085->80/tcp                          heuristic_tu
54c1f7f605af  localhost/podman-pause:4.9.3-0                          About a minute ago  Up About a minute  0.0.0.0:3306->3306/tcp, 0.0.0.0:8086->80/tcp  1f3c516682fc-infra
38aec09c76dc  localhost/nginx:latest            /usr/sbin/nginx -...  About a minute ago  Up About a minute  0.0.0.0:3306->3306/tcp, 0.0.0.0:8086->80/tcp  competent_easley
543ebb2a4874  docker.io/library/mariadb:latest  mariadbd              26 seconds ago      Up 26 seconds      0.0.0.0:3306->3306/tcp, 0.0.0.0:8086->80/tcp  lucid_nash

Тестирование юзабилити.

$ curl localhost:8086
Hello World from Podman

$ mysql -u root -p'DBPassword' -h 192.168.1.201 -e "show variables like 'hostname';"
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| hostname      | mypod2 |
+---------------+--------+

6 – Создание сети Podman

Чтобы создать новую сеть с подсетью 172.20.50.0/24, используйте:

podman network create --subnet 172.20.50.0/24 network50

Прикрепляем его к контейнеру.

podman run --network network50 ubuntu /bin/bash

Вы можете подключить сеть к работающему контейнеру

 podman network connect <networkname> <container>

Для отключения используйте:

 podman network disconnect <networkname> <container>

Проверка маршрутов в контейнере

 podman exec <container> /bin/bash -c "apt update; apt -y install iproute2; ip route"
podman exec <container> ip route

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

podman network ls
podman network rm <networkname>
podman network rm -f <networkname>

Обратитесь к документации Podman для получения более практических примеров использования Podman.

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