Як встановити Podman на Ubuntu 24.04 (Noble Numbat)

Як встановити Podman на Ubuntu 24.04 (Noble Numbat)

 

Ви розпочали шлях вивчення та освоєння технологій контейнеризації?, чи натрапили ви на Podman у своєму дослідженні «найкращих двигунів управління контейнерами»?. Podman — це безкоштовна програма, яка може керувати контейнерами та подами. Завдяки потужному інтерфейсу командного рядка ви можете створювати, знаходити, запускати та керувати загальним життєвим циклом контейнерів. Podman is набув великої популярності як краща безпечна альтернатива Docker. Але на відміну від docker, podman не вимагає процесу демона, що працює у фоновому режимі.

Спочатку Podman був побудований на основі контейнерів і з відповідністю стандартам Open Container Initiative (OCI). Він підтримує такі функції, пов’язані з контейнерами:

  • Container Image Management: використовуйте podman для створення образів контейнерів, надсилання до реєстру або витягування з реєстру..
  • Running of containerized applications: підкоманда використовується для запуску контейнера з образу, входу в його оболонку та керування програмою в контейнеріrun
  • Storage Management: Podman дозволяє створювати постійні томи, прикріплювати до контейнера та видаляти томи..
  • Network Management: Podman дає вам команди для керування мережею контейнерів. Створення мережевого мосту та приєднання мережі до програми.
  • Pod Management: Podman в основному зосереджений не на управлінні подами, але він дозволяє вам керувати групою контейнерів як подами. Це схоже на функціонал, який ви отримуєте в Kubernetes.

Про що йдеться в цій статті:

  • Як встановити podman на Ubuntu 24.04
  • Як створити образ docker за допомогою 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 <gramota@infoit.com.ua>

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

Прапорець вкаже podman запустити контейнер у фоновому режимі та від’єднає, прив’язує службу до вашого локального порту хоста з номером 8080. Контейнер матиме назву nginx.-d-p 8080

Виведіть список запущених контейнерів 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.

Як встановити Podman на Ubuntu 24.04

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

$ 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

Щоб видалити testvolume, виконайте такі дії:

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

Список створених pods.

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

Потім ви можете створити контейнер усередині  pod.

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

Тест usability.

$ 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

Прикріпивши його до container.

podman run --network network50 ubuntu /bin/bash

Ви можете підключити мережу до працюючого container.

 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.

Прокрутка до верху