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

Как установить и использовать Podman для запуска контейнеров в Rocky Linux 8


Это руководство существует для этих версий ОС

  • Rocky Linux 8.4
  • Rocky Linux 8.4

На этой странице

  1. Предпосылки
  2. Установить Podman
  3. Поиск и загрузка образов контейнеров
  4. Запуск контейнеров
  5. Вывод списка и остановка контейнеров
  6. Запустить остановленный контейнер
  7. Удалить контейнер
  8. Убить контейнер
  9. Удалить изображение
  10. Просмотр журналов контейнеров
  11. Осмотр контейнеров
  12. Доступ к оболочке контейнера
  13. Пакеты
  14. Заключение

Podman — это бесплатная контейнерная платформа с открытым исходным кодом, созданная для разработки, управления и развертывания контейнеров и модулей в среде Linux. Redhat разработала Podman в 2018 году. Это механизм контейнеризации, который работает иначе, чем Docker. Работа Podman не зависит от демона, в отличие от Docker, который использует Docker CLI и демон Docker. Зависимость от демона приводит к единой точке отказа.

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

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

Предпосылки

  1. A Rocky Linux based server

  2. A non-sudo user with root privileges.

  3. 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, которые мы не рассмотрели. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.