1. Что такое подман
1. концепция подмана
Podman — это собственный инструмент Linux с открытым исходным кодом без демона, разработанный для того, чтобы контейнерам и образам было проще находить, запускать, создавать, совместно использовать и развертывать приложения с использованием Инициативы открытых контейнеров (OCI). Podman предоставляет интерфейс командной строки (CLI), с которым может быстро начать работу любой, кто использовал контейнерный движок Docker. Большинство пользователей могут просто использовать псевдоним Podman для Docker (псевдоним Docker = Podman) без каких-либо проблем. Подобно другим распространенным механизмам контейнеров (Docker, CRI-O, containerd), Podman полагается на среды выполнения контейнеров, совместимые с OCI (runc, cron, runv и т. д.), для взаимодействия с операционной системой и создания работающих контейнеров. Это делает работающий контейнер, созданный Podman, почти неотличимым от контейнера, созданного любым другим механизмом контейнеров общего назначения.
2. официальный сайт подмана:Довольно медленно. IO/getting - это он...
Во-вторых, разница между podman и докером
Опыт Podman иDockerАналогично, разница в том, что у Podman нет демона.При использовании Docker CLI ранее, Docker CLI сообщал Docker Engine «Я хочу запустить контейнер» через API gRPC, а затем Docker Engine передал Среда выполнения контейнера OCI (по умолчанию runc) для запуска контейнера. Это означает, что процесс контейнера не может быть дочерним процессом Docker CLI, но дочерним процессом Docker Engine.
Podman относительно прост и груб, не использует Daemon, а запускает контейнер напрямую через среду выполнения OCI (тоже runc по умолчанию), поэтому процесс контейнера является дочерним процессом podman. Это больше похоже на модель fork/exec в Linux, тогда как Docker использует модель C/S (клиент/сервер). По сравнению с моделью C/S модель fork/exec имеет много преимуществ, таких как:
- Системные администраторы могут знать, кто запустил процесс контейнера.
- При использовании
cgroupСделайте некоторые ограничения на podman, тогда все созданные контейнеры будут ограничены. - Если вы поместите команду podman в
systemdВ юнит-файле процесс-контейнер может возвращать через podman уведомление о том, что сервис готов к приему задач. - можно подключить
socketПерешел из systemd в podman и в процессы-контейнеры для их использования.
1. podman не имеет процесса демона
-
докер-сервер
ps -aux | grep dockerdocker запускает демон под названием dockerd.
-
подман сервер
ps -aux | grep podmanВидно, что информации о процессе podman нет вообще.
2. Разрешения пользователя Podman отличаются от прав доступа Docker
- обычные права пользователя
-
Создать демонстрационную версию обычного пользователя
# useradd demo # passwd demo // 设置密码 # su demo -
докер-сервер
# docker version # sudo docker version // 需要提前将 demo 用户加入 /etc/sudoersМожно обнаружить, что если вы не добавите sudo, у вас нет прав на работу с docker.
-
подман сервер
# 切换到demo用户 # su - demo // 需要使用 - ,不然会出现权限问题 # podman versionВы можете работать с podman без добавления sudo.
-
- Разрешения на размещение файлов внутри контейнера докеров
У Docker всегда была проблема. Если демонстрационный пользователь присоединяется к группе пользователей docker, демонстрационный пользователь может создать контейнер. Если демонстрационный пользователь не имеет разрешения на сопоставление файла с контейнером, файл можно изменить и просмотреть в контейнер. Так у podman тоже есть эта проблема?
-
докер-сервер
- Назначьте группу пользователей демонстрационному пользователю:
usermod -g docker demo - Удалить привилегии sudo для демонстрационного пользователя
# vim /etc/sudoers # 删除 demo 那一行- Подтвердите разрешения:
# su - demo # sudo cat /etc/sudoers- Создайте контейнер с докером и сопоставьте файл /etc/sudoers с контейнером.
# run 一个容器 # docker run -it -v /etc/sudoers:/home/sudoers busybox sh # 进入容器后修改 /etc/sudoers 的文件内容,将 demo 的权限添加进去 # vi /home/sudoers- После выхода из контейнера еще раз посмотрите разрешения
# sudo cat /etc/sudoersМожно посмотреть содержимое этого файла, это не очень безопасно.
- Назначьте группу пользователей демонстрационному пользователю:
-
подман сервер
- Перед созданием контейнера проверьте разрешения демо-пользователя.
# sudo cat /etc/sudoers- Попробуйте запустить контейнер как докер
# podman run -it -v /etc/sudoers:/home/sudoers busybox sh # 进入容器后会发现 /home/sudoers 文件为空,并且提示没有权限 # cat /home/sudoersТаким образом, невозможно изменить этот файл без разрешения, так почему же файл сопоставлен и почему файл не может быть изменен?
-
Представление процесса контейнера
В linux контейнеры существуют в системе в виде процессов (если вам интересно, вы можете проверить информацию самостоятельно, и мы не будем здесь вдаваться в подробности). Разница между процессом в podman и процессом docker приводит к тому, что podman сопоставляет файлы с правами root, но их нельзя изменить.
- контейнер запуска демона
# docker 服务器 # docker run -it -d --name=busybox -v /etc/sudoers:/home/sudoers busybox # podman 服务器 # podman run -it -d -v /etc/sudoers:/home/sudoers busybox --name busybox- Просмотр процесса по идентификатору контейнера
# docker 服务器 # docker ps # ps -aux | grep 46f121aff161 # podman 服务器 # podman ps # ps -aux | grep 240842862d24Для сравнения обнаружено, что когда podman запускается под пользователем demo, пользователь, используемый процессом, является demo, поэтому в контейнере, когда пользователь demo используется для доступа к файлу разрешений root, он подсказывает, что разрешения нет. .
-
3. Установите подман
-
Документация по установке:Довольно медленно. IO/getting - это он...
-
CentOS
# Centos 7 curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/devel:kubic:libcontainers:stable.repo yum -y install podman # Centos 8 sudo dnf -y module disable container-tools sudo dnf -y install 'dnf-command(copr)' sudo dnf -y copr enable rhcontainerbot/container-selinux sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo sudo dnf -y install podman
В-четвертых, используйте podman
-
Посмотреть справку:
podman --helpМожно обнаружить, что способ использования такой же, как у докера, Не беспокойтесь о переключении с докера на podman. Если вы не привыкли использовать команду podman, вы можете использовать
alias docker=podmanСделаем сопоставление для команды docker. -
Настройте адрес ускорения:
vim /etc/containers/registries.conf... # does not curate, patch or maintain container images from the docker.io registry. # PS:在增加加速地址时,不能有http或者https [registries.search] registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io', 'xxx.mirror.aliyuncs.com'] ... -
Вытащите изображение:
podman pull busybox -
Запустите контейнер:
podman run -it busybox sh -
Докер команды сопоставления:
alias docker=podman
V. Резюме
- podman может заменить docker в качестве инструмента управления контейнерами. Поскольку процесс-демон отсутствует, он занимает меньше системных ресурсов, чем при использовании докера.
- Podman не использует привилегированные права пользователя docker, поэтому он кажется более безопасным, чем docker.
- Использование podman точно такое же, как и у docker, и нет абсолютно никаких проблем с переносом напрямую из docker.