Як встановити 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.
Цю команду також можна використовувати для перевірки функціональності програми з 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.