Как установить и использовать Podman для запуска контейнеров в Rocky Linux 8
Это руководство существует для этих версий ОС
- Rocky Linux 8.4
- Rocky Linux 8.4
На этой странице
- Предпосылки
- Установить Podman
- Поиск и загрузка образов контейнеров
- Запуск контейнеров
- Вывод списка и остановка контейнеров
- Запустить остановленный контейнер
- Удалить контейнер
- Убить контейнер
- Удалить изображение
- Просмотр журналов контейнеров
- Осмотр контейнеров
- Доступ к оболочке контейнера
- Пакеты
- Заключение
Podman — это бесплатная контейнерная платформа с открытым исходным кодом, созданная для разработки, управления и развертывания контейнеров и модулей в среде Linux. Redhat разработала Podman в 2018 году. Это механизм контейнеризации, который работает иначе, чем Docker. Работа Podman не зависит от демона, в отличие от Docker, который использует Docker CLI и демон Docker. Зависимость от демона приводит к единой точке отказа.
Podman разработан в соответствии со стандартами OCI (Open Container Initiative), которые позволяют Podman напрямую взаимодействовать с ядром, контейнерами и образами. Он также более безопасен, чем Docker, поскольку не требует root-доступа. Podman можно использовать в качестве замены Docker, поскольку оба они совместимы с OCI.
Эта статья покажет вам, как установить Podman и использовать его для создания образов и контейнеров и управления ими.
Предпосылки
-
A Rocky Linux based server
-
A non-sudo user with root privileges.
-
Ensure that the server is updated.
$ sudo dnf update
Установить Подман
Podman включен в модуль container-tools
вместе с Buildah и Skopeo. Он также доступен в репозитории AppStream для Rocky Linux 8. Мы будем использовать модульный метод.
Установите Podman с помощью команды dnf module
.
$ sudo dnf module install container-tools
Проверьте версию Podman, чтобы убедиться, что она установлена правильно.
$ podman --version podman version 3.2.3
Поиск и загрузка образов контейнеров
Чтобы найти образ Nginx, используйте следующую команду.
$ podman search nginx
В выводе вы увидите имя реестра, из которого взят образ, и описание образов.
Чтобы загрузить образ, используйте одну из следующих команд.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Вы можете просмотреть загруженные изображения с помощью следующей команды.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Запустить контейнеры
Используйте следующую команду для запуска контейнера с использованием образа Nginx. Мы назвали контейнер как веб-сервер.
$ podman run -d --name webserver nginx
Мы можем использовать тот же образ для запуска другого контейнера с другим именем.
$ podman run -d --name webserver2 nginx
Мы можем запускать неограниченное количество контейнеров, используя один и тот же образ.
Список и остановка контейнеров
Чтобы вывести список всех запущенных контейнеров, используйте следующую команду.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Остановите работающий контейнер.
$ podman stop webserver webserver
Проверьте, остановился ли он.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Чтобы перечислить все контейнеры, включая остановленные, вам нужно использовать флаг -a
.
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Запустить остановленный контейнер
Используйте следующую команду, чтобы запустить остановленный контейнер.
$ podman start webserver webserver
Проверьте, началось ли оно.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Удалить контейнер
Вам нужно остановить контейнер перед его удалением.
$ podman stop webserver2
Удалите контейнер.
$ podman rm webserver2
Вы можете удалить работающий контейнер, используя флаг --force
.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Убить контейнер
Остановка и уничтожение контейнера — это две разные вещи, которые в конечном итоге приводят к одному и тому же. Разница в том, что при остановке контейнера он корректно закрывается, а при уничтожении контейнера он завершается принудительно, что приводит к потере данных.
Используйте следующую команду, чтобы убить контейнер.
$ podman kill -s 9 webserver2
Приведенная выше команда использует параметр SIGNAL 9 (SIGKILL)
для уничтожения контейнера.
Чтобы уничтожить все контейнеры, используйте флаг --all
или -a
, а чтобы уничтожить только последний контейнер, используйте флаг --latest
или флаг -l
.
Удалить изображение
Вы можете удалить изображения с помощью команды rmi
.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Вы можете удалить несколько изображений, разделив их запятыми.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Чтобы удалить все изображения в вашей системе, используйте флаг -a
.
$ podman rmi -a
Просмотр журналов контейнеров
Чтобы просмотреть журналы контейнера, используйте следующую команду.
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
Вы можете ограничить журналы последними 5 строками, используя параметр --tail
.
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
По умолчанию вы не будете получать временные метки в журналах. Используйте флаг -t
, чтобы добавить временные метки в свои журналы.
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
Проверка контейнеров
Проверка контейнера распечатает информацию о контейнере.
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
Команда по умолчанию выводит длинный вывод в формате JSON. Чтобы отфильтровать вывод, вам нужно использовать параметр --format
. Чтобы узнать, когда был запущен контейнер, выполните следующую команду.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Доступ к оболочке контейнера
Вы можете получить доступ к командной строке любого контейнера, используя параметр exec
.
$ podman exec -it webserver2 /bin/bash
стручки
У Podman есть уникальная функция, которой нет у Docker. Podman может создавать модули из контейнеров, которые работают вместе. Это позволяет управлять несколькими контейнерами в совокупности.
Чтобы создать Pod, используйте следующую команду.
$ podman pod create --name mypod
Добавьте контейнеры во вновь созданный модуль.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Теперь вы можете управлять контейнерами с помощью простых однострочных команд.
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
Заключение
На этом мы завершаем наше руководство по установке и использованию Podman для запуска контейнеров. Есть много вещей, которые вы можете делать с Podman, которые мы не рассмотрели. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.