Podman в действии - Дэниэл Уолш - E-Book

Podman в действии E-Book

Дэниэл Уолш

0,0

Beschreibung

Пришло время обновить свой контейнерный движок! Менеджер контейнеров Podman обеспечивает гибкое управление слоями образов и полную совместимость с Kubernetes, а также дает возможность пользователям без прав администратора создавать, запускать непривилегированные контейнеры и управлять ими. OCI-совместимая поддержка Docker API позволяет перевести существующие контейнеры на Podman, не ломая свои скрипты и не меняя привычного порядка работы. «Podman в действии» познакомит вас с менеджером контейнеров Podman. Простые объяснения и примеры позволят быстро разобраться с тем, что такое контейнеры, как они работают и как управлять ими. Вы получите глубокие знания об используемых Podman компонентах Linux и даже узнаете больше о Docker. Особенно ценны соображения автора Дэна Уолша по поводу безопасности контейнеров. Для разработчиков и системных администраторов, имеющих опыт работы с Linux и Docker.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 358

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Переводчик Д. Иванов

Дэниэл Уолш

Podman в действии. — СПб.: Питер, 2024.

ISBN 978-5-4461-2111-3

© ООО Издательство "Питер", 2024

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Оглавление

Предисловие
Благодарности
Об этой книге
Для кого эта книга
Структура издания: дорожная карта
Форум LiveBook
Автор онлайн
Об авторе
Иллюстрация на обложке
О переводчике на русский язык
От издательства
Часть 1. Основы
1. Podman: контейнерный движок нового поколения
1.1. О терминологии
1.2. Краткое описание контейнеров
1.3. Зачем использовать Podman, если есть Docker
1.4. Когда не следует использовать Podman
Резюме
2. Командная строка
2.1. Работа с контейнерами
2.2. Работа с образами контейнеров
2.3. Сборка образов
Резюме
3. Тома
3.1. Использование томов в контейнерах
Резюме
4. Поды
4.1. Управление подами
4.2. Создание подов
4.3. Добавление контейнера в под
4.4. Запуск подов
4.5. Остановка пода
4.6. Вывод списка подов
4.7. Удаление подов
Резюме
Часть 2. Архитектура
5. Настройка и файлы конфигурации
5.1. Конфигурационные файлы для хранилища
5.2. Конфигурационные файлы реестров
5.3. Конфигурационные файлы контейнерных движков
5.4. Системные файлы конфигурации
Резюме
6. Непривилегированные (rootless) контейнеры
6.1. Как работает Podman в режиме rootless?
6.2. «Под капотом» Podman без root
Резюме
Часть 3. Расширенные возможности Podman
7. Интеграция с systemd
7.1. Запуск systemd внутри контейнера
7.2. Journald для ведения журналов и событий
7.3. Запуск контейнеров при загрузке
7.4. Запуск контейнеров в юнит-файлах типа notify
7.5. Откат неисправных контейнеров после обновления
7.6. Контейнеры Podman, активируемые через сокет
Резюме
8. Работа с Kubernetes
8.1. YAML-файлы Kubernetes
8.2. Генерация YAML-файлов Kubernetes с помощью Podman
8.3. Генерация подов и контейнеров Podman из Kubernetes YAML
8.4. Запуск Podman внутри контейнера
Резюме
9. Podman как служба
9.1. Знакомство со службой Podman
9.2. API, поддерживаемые Podman
9.3. Библиотеки Python для работы с Podman
9.4. Использование docker-compose со службой Podman
9.5. podman --remote
Резюме
Часть 4. Безопасность контейнеров
10. Изоляция контейнеров
10.1. Read-only псевдофайловые системы ядра Linux
10.2. Linux-привилегии (Linux capabilities)
10.3. Изоляция UID: пользовательское пространство имен
10.4. Изоляция процессов: Пространство имен PID
10.5. Сетевая изоляция: сетевое пространство имен
10.6. IPC-изоляция: пространство имен IPC
10.7. Изоляция файловой системы: пространство имен mount
10.8. Изоляция файловой системы: SELinux
10.9. Изоляция системных вызовов seccomp
10.10. Изоляция виртуальных машин
Резюме
11. Дополнительные аспекты безопасности
11.1. Сравнение демона с моделью fork/exec
11.2. Работа с секретами в Podman
11.3. Доверие к образам Podman
11.4. Сканирование образов
11.5. Глубокая защита
Резюме
Приложения
A. Инструменты, связанные с Podman
A.1. Skopeo
A.2. Buildah
A.3. CRI-O: Container Runtime Interface для контейнеров OCI
B. Среды выполнения OCI
B.1. runc
B.2. crun
B.3. Kata
B.4. gVisor
C. Установка Podman
C.1. Установка Podman
C.2. Сборка Podman из исходного кода
C.3. Podman Desktop
Резюме
D. Участие в проекте Podman
D.1. Вступление в сообщество
D.2. Podman на github.com
E. Podman на macOS
E.1. Использование команд podman machine
Резюме
F. Podman в Windows
F.1. Первые шаги
F.2. Использование команды podman machine
Резюме
Рекомендуем прочитать

В память о моей матери, Джоан П. Уолш

Предисловие

Я работаю в области компьютерной безопасности почти сорок лет, а в последние двадцать сосредоточился на контейнерных технологиях. Когда около десяти лет назад появился Docker, он вызвал революцию в распространении и запуске приложений в интернете. Используя Docker, я думал о том, что его можно было бы спроектировать лучше. Работа с демоном, запускаемым с правами root, а затем добавление все новых и новых демонов казались мне неправильным подходом. По моему мнению, вместо этого следовало бы использовать низкоуровневые концепции операционных систем и сделать инструмент, который запускал бы те же контейнерные приложения таким же образом, но более безопасно и требуя меньшего количества привилегий. Поэтому моя команда в Red Hat задалась целью создать инструменты, которые помогут разработчикам и администраторам запускать контейнеры самым безопасным способом. В результате этой работы появился Podman.

В начале 2000-х я начал вести блог на такие темы, как SELinux, и с тех пор пишу разные статьи. За эти годы я написал сотни статей о контейнерах и безопасности, но мне хотелось объединить все свои идеи и описать технологию Podman в одной книге, к которой я мог бы отсылать пользователей и заказчиков.

В этой книге рассказывается о Podman и о том, как с ним работать. Кроме того, она глубоко погружает читателя в изучение технологии и различных частей операционной системы Linux, которыми мы пользуемся. Поскольку я являюсь инженером по безопасности, я также посвятил пару глав описанию безопасности контейнеров. Прочитав эту книгу, вы станете лучше понимать, что такое контейнеры, как они действуют и как применять различные функции Podman. Вы даже узнаете гораздо больше о Docker. Так как популярность Podman растет и он все шире внедряется в инфраструктуру, эта книга станет для вас полезным справочником, который стоит держать под рукой.

Благодарности

Я выражаю благодарность всем людям, которые помогли мне написать эту книгу. В их числе члены команды Podman — они написали статьи, послужившие мне подспорьем в понимании технологий, в которых я не до конца разбирался, и помогли создать отличный продукт. Спасибо вам, Брент Боде (Brent Baude), Мэтт Хеон (Matt Heon), Валентин Ротберг (Valentin Rothberg), Джузеппе Скривано (Giuseppe Scrivano), Урваши Мохнани (Urvashi Mohnani), Налин Дахьябхай (Nalin Dahyabhai), Локеш Мандвекар (Lokesh Mandvekar), Милослав Трмач (Miloslav Trmac), Джейсон Грин (Jason Greene), Джон Хонс (Jhon Honce), Скотт Маккарти (Scott McCarty), Том Суини (Tom Sweeney), Эшли Куи (Ashley Cui), Эд Сантьяго (Ed Santiago), Крис Эвич (Chris Evich), Адитья Раджан (Aditya Rajan), Пол Холцингер (Paul Holzinger), Прити Томас (Preethi Thomas) и Чарли Доерн (Charlie Doern). Я также хочу поблагодарить бесчисленных разработчиков открытого исходного кода, которые сделали возможными Linux-контейнеры и Podman.

Я благодарю всю команду Manning, но особенно Тони Арритола (Toni Arritola). Тони научила меня, как лучше раскрыть мои идеи, и была отличным партнером в этом процессе. Ей пришлось иметь дело со мной, старым математиком, который никогда не умел писать, но она помогла этой книге увидеть свет.

Спасибо вам, мои рецензенты: Ален Ломп (Alain Lompo), Алессандро Кампеис (Alessandro Campeis), Аллан Макура (Allan Makura), Аманда Деблер (Amanda Debler), Андерс Бьёрклунд (Anders Björklund), Андреа Монакки (Andrea Monacchi), Камал Какар (Camal Cakar), Клиффорд Тёрбер (Clifford Thurber), Конор Редмонд (Conor Redmond), Дэвид Паккуд (David Paccoud), Дипак Шарма (Deepak Sharma), Федерико Кирхайс (Federico Kircheis), Франс Оилинки (Frans Oilinki), Гоутам Садасивам (Gowtham Sadasivam), Ибрагим Аккулак (Ibrahim Akkulak), Джеймс Лю (James Liu), Джеймс Ньика (James Nyika), Джереми Чен (Jeremy Chen), Кент Спилнер (Kent Spillner), Кевин Этьен (Kevin Etienne), Кирилл Ширинкин (Kirill Shirinkin), Космас Чатзимихалис (Kosmas Chatzimichalis), Кшиштоф Камычек (Krzysztof Kamyczek), Ларри Кай (Larry Cai), Майкл Брайт (Michael Bright), Младен Кнежич (Mladen Knežic´), Оливер Кортен (Oliver Korten), Ричард Майнсен (Richard Meinsen), Роман Жужа (Roman Zhuzha), Руй Лю (Rui Li), Сатадру Рой (Satadru Roy), Сын Чжин Ким (Seung-jin Kim), Симеон Лейзерзон (Simeon Leyzerzon), Симона Сгуацца (Simone Sguazza), Сайед Ахмед (Syed Ahmed), Томас Пеклак (Thomas Peklak) и Вивек Вираппан (Vivek Veerappan) — ваши предложения помогли сделать эту книгу лучше.

Об этой книге

В книге «Podman в действии» описывается, как пользователи могут создавать, запускать контейнеры и управлять ими. При написании этой книги моей целью было объяснить, как без особых сложностей перенести полученные в Docker навыки на Podman, а также как просто использовать Podman, если вы никогда раньше не работали с контейнерными движками. «Podman в действии» научит вас использовать такие расширенные возможности, как поды (pod), и поможет вам на пути к созданию приложений, готовых к работе в Kubernetes. Наконец, «Podman в действии» расскажет все о функциях безопасности ядра Linux, которые применяются для изоляции контейнеров как от системы, так и от других контейнеров.

Для кого эта книга

Книга «Podman в действии» написана для разработчиков программного обеспечения, которые хотят разобраться в том, что такое контейнеры, создавать и применять их, а также для системных администраторов, использующих контейнеры в выпускаемых продуктах. Прочитав эту книгу, вы получите более глубокое представление о том, что такое контейнеры. Для получения максимальной пользы от книги необходимо понимание процессов Linux и умение работать с его командной строкой.

Каждый, кто хочет использовать контейнеры, найдет что-то для себя в этой книге. Пользователи, хорошо знакомые с Docker, узнают о расширенных возможностях Podman, недоступных в Docker, и еще лучше разберутся в том, как работает Docker. Начинающие пользователи изучат основы работы с контейнерами и подами.

Структура издания: дорожная карта

«Podman в действии» состоит из четырех частей и шести приложений.

• Часть 1 «Основы» состоит из четырех глав и знакомит читателей с Podman. В главе 1 объясняется, что делает Podman, зачем он был создан и почему он важен. В следующих двух главах рассказывается об интерфейсе командной строки и о том, как использовать тома в контейнерах. В главе 4 вводится понятие подов и объясняется, как Podman работает с ними. Здесь каждый найдет что-то полезное для себя, но если у вас большой опыт работы с Docker, вам будет достаточно лишь бегло просмотреть бо́льшую часть содержимого главы 2.

• Часть 2 «Архитектура» состоит из двух глав, в которых я глубоко погружаюсь в устройство Podman. Вы узнаете о непривилегированных (rootless) контейнерах и о том, как они работают. Прочитав эти главы, вы станете лучше понимать, что такое пользовательские пространства имен и безопасность непривилегированных контейнеров. Вы также узнаете, как настроить конфигурацию вашего Podman-окружения.

• Часть 3 «Расширенные возможности Podman» состоит из трех глав и выходит за рамки основ Podman. В главе 7 показано, как Podman может работать в продакшене благодаря интеграции с systemd. В ней рассказывается о запуске systemd внутри контейнера и о том, как использовать его в качестве менеджера контейнеров. Вы узнаете, как настроить серверы с контейнерами Podman, где systemd управляет жизненным циклом контейнера. Podman позволяет легко генерировать файлы systemd-юнитов, помогая отправить в продакшен ваши контейнеризованные приложения. В главе 8 вы узнаете, как с помощью Podman можно перенести контейнеры в Kubernetes. Podman поддерживает запуск контейнеров с помощью тех же YAML-файлов, которые использует Kubernetes, а также дает возможность генерировать YAML для Kubernetes из ваших контейнеров. В главе 9 я покажу, как Podman работает в качестве службы, обеспечивая удаленный доступ к контейнерам Podman. Использование Podman в качестве службы позволяет вам применять другие языки программирования и инструменты для управления контейнерами. Вы увидите, как docker-compose может работать с контейнерами Podman. Вы также узнаете, как использовать для взаимодействия с сервисом Podman при управлении контейнерами такие библиотеки Python, как podman-py и docker-py.

• Часть 4 «Безопасность контейнеров» состоит из двух глав, в которых речь идет о важных аспектах безопасности. В главе 10 описаны функции, используемые для обеспечения изоляции контейнеров. В этой главе анализируются такие подсистемы безопасности Linux, как SELinux, seccomp, привилегии Linux (Linux capabilities), файловые системы ядра и пространства имен (namespaces). Затем в главе 11 рассматриваются соображения безопасности, которые я считаю лучшими практиками для максимально безопасного запуска контейнеров.

Кроме того, в книге шесть приложений, посвященных связанным с Podman темам:

• В приложении A описаны все связанные с Podman инструменты, включая Buildah, Skopeo и CRI-O.

• Приложение B подробно рассматривает различные среды выполнения OCI, доступные как для Podman, так и для Docker. В нем обсуждаются runc, crun, Kata и gVisor.

• Приложение C описывает, как установить Podman на вашу локальную систему, будь то Linux, Mac или Windows.

• В приложении D рассказывается о сообществе разработчиков открытого исходного кода Podman и о том, как к нему присоединиться.

• Приложения E и F посвящены запуску Podman на компьютерах c операционными системами Mac и Windows.

Форум LiveBook

Приобретая книгу «Podman в действии», вы получаете бесплатный доступ к закрытому веб-форуму издательства Manning (на английском языке), на котором можно оставлять комментарии о книге, задавать технические вопросы и получать помощь от автора и других пользователей. Чтобы получить доступ к форуму, откройте страницу book/podman-in-action/discussion сайта https://livebook.manning.com/. Информация о форумах Manning и правилах поведения на них размещена на https://livebook.manning.com/#!/discussion.

В рамках своих обязательств перед читателями издательство Manning предоставляет ресурс для содержательного общения читателей и авторов. Эти обязательства не подразумевают конкретную степень участия автора, которое остается добровольным (и неоплачиваемым). Задавайте автору хорошие вопросы, чтобы он не терял интереса к происходящему! Форум и архивы обсуждений доступны на веб-сайте издательства, пока книга продолжает издаваться.

Автор онлайн

Вы можете подписаться на Дэна Уолша (Dan Walsh) в Twitter и GitHub @rhatdan. Он регулярно ведет блог на https://www.redhat.com/sysadmin/users/dwalsh и на нескольких других сайтах. На YouTube также много видео с выступлениями Дэна.

Об авторе

Дэниэль Уолш (Daniel Walsh) возглавляет команду, которая создала Podman, Buildah, Skopeo, CRI-O и связанные с ними инструменты. Дэн — ведущий инженер компании Red Hat, работает там с августа 2001 года. Более 40 лет он занимается компьютерной безопасностью. Дэна иногда называют «мистер SELinux», так как он руководил разработкой SELinux в Red Hat до того, как возглавил группу, занимающуюся контейнерами. Дэн получил степень бакалавра математики в Колледже Святого Креста и степень магистра компьютерных наук в Вустерском политехническом институте. В Twitter и на GitHub его можно найти по нику @rhatdan. Вы можете написать ему по адресу [email protected].

Иллюстрация на обложке

Иллюстрация на обложке книги «Podman в действии» озаглавлена как «La vandale», или «Вандал», и позаимствована из коллекции Жака Грассе де Сен-Совера (Jacques Grasset de Saint-Sauveur), опубликованной в 1797 году. Каждая иллюстрация из коллекции тщательно прорисована и раскрашена вручную.

В те времена по одежде человека можно было легко определить, где он живет и каково его ремесло или положение в обществе. Издательство Manning отмечает изобретательность и инициативность IT-бизнеса обложками книг, которые основаны на богатом разнообразии региональной культуры многовековой давности, возвращаемой к жизни изображениями из коллекций, подобными этому.

О переводчике на русский язык

Дмитрий Иванов — ведущий системный инженер компании КРОК, руководитель группы системных инженеров ДРПО (департамента разработки программного обеспечения). Имеет большой практический опыт работы с решениями контейнеризации и оркестрации контейнеров.

От издательства

Мы выражаем огромную благодарность компании КРОК за помощь в работе над русскоязычным изданием книги и их вклад в повышение качества перевод­ной литературы.

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Часть 1. Основы

В части 1 книги я познакомлю вас с несколькими способами работы с Podman из командной строки. В главе 2 объясню, как создавать контейнеры и применять их, а также как контейнеры работают с образами. Вы узнаете, в чем разница между контейнером и образом, как сохранить контейнер в образ, а затем отправить образ в реестр, чтобы им можно было поделиться с другими пользователями.

В главе 3 я ввожу понятие тома. Тома — это механизмы, которые большинство пользователей ваших контейнерных приложений используют для хранения своих данных отдельно от приложения. В первых двух главах основное внимание уделяется использованию контейнеров и образов, что очень напоминает работу контейнеров в Docker.

В главе 4 добавляется концепция подов, аналогичная подам Kubernetes, которую Docker не поддерживает. Поды предоставляют возможность совместно использовать один или несколько контейнеров в рамках одного и того же ресурса, пространства имен и ограничений безопасности. Поды позволяют писать более сложные приложения и управлять ими как единой сущностью.