
Книга подробно описывает инструментарий Docker и возможности использования контейнеров для развертывания программного обеспечения. Рассказано об интеграции Docker и контейнеров Linux с облачными сервисами и Kubernetes. Описаны методы сборки образов Open Container Initiative (OCI), развертывания и администрирования образов с использованием командной строки. Показано, как образы OCI упрощают управление зависимостями и ускоряют процесс развертывания приложений. Даны практические рекомендации по настройке и тестированию контейнеров, подробно рассмотрены инструменты оркестрации, обеспечения безопасности и конфигурирования Docker. В третьем издании особое внимание уделено инструменту BuildKit, поддержке мультиархитектурных образов, а также контейнеров в режиме rootless.
Для разработчиков, системных администраторов, архитекторов и технических специалистов
Надежные контейнеры на практике
- Узнайте, как Docker и контейнеры Linux интегрируются с облачными сервисами и Kubernetes
- Научитесь собирать образы Open Container Initiative (OCI), а затем развертывайте и администрируйте контейнеры Linux с помощью эффективных инструментов командной строки
- Узнайте, как образы OCI упрощают управление зависимостями и ускоряют процесс развертывания приложений
- Используйте практические рекомендации по развертыванию и тестированию контейнеров Linux в рабочей среде
- Настраивайте контейнеры в любом масштабе и в любом окружении
- Познакомьтесь с инструментами развертывания, оркестрации, обеспечения безопасности и конфигурирования Docker.
В книге описываются не только теоретические преимущества технологии Docker, но и практические аспекты использования контейнеров в рабочей среде.
Келси Хайтауэр, руководитель группы разработчиков в компании Google Cloud Platform
В книге подробно изложены базовые принципы и практические аспекты работы с ПО Docker на основе многолетнего опыта.
Лиз Райс, руководитель проектов с открытым исходным кодом в компании Isovalent
Книга поможет вам строить современные, надежные и высокодоступные распределенные системы.
Михай Тодор, главный инженер в компании TLCP
Docker и контейнеры Linux изменили подход к разработке, развертыванию и использованию программного обеспечения. Порой не вполне очевидно, зачем нужны подобные инструменты, и как интегрировать их в корпоративную экосистему. Это полностью обновленное руководство предназначено для разработчиков, системных администраторов, архитекторов и технических специалистов. Книга описывает инструментарий Docker и преимущества контейнеров почти во всех аспектах развертывания и сопровождения современных приложений.
Третье издание обновлено с учетом существенных изменений, которые произошли в технологии Docker с выпуска первой книги почти десять лет назад. Авторы подробно рассмотрели такие нововведения, как BuildKit, поддержку мультиархитектурных образов, контейнеры в режиме rootless и другие.
Книгу “Docker. Вводный курс. 3 издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Отзывы о книге……………………………………………………………………………………… 13
Вступительное слово………………………………………………………………………………. 15
Предисловие…………………………………………………………………………………………… 17
Кому следует прочесть эту книгу…………………………………………………………………………………………….. 17
Зачем читать эту книгу……………………………………………………………………………………………………………… 17
Содержание книги……………………………………………………………………………………………………………………… 18
Обозначения……………………………………………………………………………………………………………………………….. 19
Использование примеров кода…………………………………………………………………………………………………. 20
Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 20
Контактная информация…………………………………………………………………………………………………………… 21
Благодарности…………………………………………………………………………………………………………………………… 21
Глава 1. Введение…………………………………………………………………………………… 23
Ожидания от Docker…………………………………………………………………………………………………………………… 23
Преимущества рабочего процесса Docker…………………………………………………………………………. 25
В чем Docker не поможет…………………………………………………………………………………………………………… 27
Важная терминология……………………………………………………………………………………………………………….. 28
Заключение………………………………………………………………………………………………………………………………… 29
Глава 2. Общие сведения о Docker…………………………………………………………. 30
Упрощение рабочих процессов………………………………………………………………………………………………… 30
Широкая поддержка и внедрение…………………………………………………………………………………………….. 33
Архитектура……………………………………………………………………………………………………………………………….. 35
Клиент-серверная архитектура………………………………………………………………………………………….. 35
Сетевые порты и сокеты Unix……………………………………………………………………………………………… 36
Надежные инструменты………………………………………………………………………………………………………. 37
Интерфейс командной строки Docker…………………………………………………………………………………. 37
Docker Engine API…………………………………………………………………………………………………………………. 38
Сеть для контейнеров…………………………………………………………………………………………………………… 38
Как использовать весь потенциал Docker……………………………………………………………………………….. 40
Контейнеры — это не виртуальные машины…………………………………………………………………….. 40
Ограниченная изоляция……………………………………………………………………………………………………….. 41
Контейнеры легковесны………………………………………………………………………………………………………. 42
Сдвиг в сторону неизменяемой инфраструктуры……………………………………………………………… 42
Приложения без сохранения состояния……………………………………………………………………………… 43
Хранение состояния во внешнем хранилище…………………………………………………………………….. 44
Рабочий процесс Docker……………………………………………………………………………………………………………. 44
Контроль изменений…………………………………………………………………………………………………………….. 45
Слои файловой системы…………………………………………………………………………………………… 45
Теги образов………………………………………………………………………………………………………………. 45
Сборка…………………………………………………………………………………………………………………………………… 46
Тестирование………………………………………………………………………………………………………………………… 47
Упаковка……………………………………………………………………………………………………………………………….. 48
Развертывание………………………………………………………………………………………………………………………. 48
Экосистема Docker……………………………………………………………………………………………………………….. 49
Оркестрация………………………………………………………………………………………………………………. 49
Неизменяемые атомарные хосты…………………………………………………………………………….. 49
Дополнительные инструменты………………………………………………………………………………… 50
Заключение………………………………………………………………………………………………………………………………… 51
Глава 3. Установка Doker………………………………………………………………………. 52
Клиент Docker…………………………………………………………………………………………………………………………….. 52
Linux………………………………………………………………………………………………………………………………………. 53
Ubuntu Linux 22.04 (64-разрядная)………………………………………………………………………….. 53
Fedora Linux 36 (64-разрядная)……………………………………………………………………………….. 54
macOS, Mac OS X…………………………………………………………………………………………………………………. 55
Установщик с графическим интерфейсом………………………………………………………………. 55
Установка Homebrew……………………………………………………………………………………………….. 55
Microsoft Windows 11…………………………………………………………………………………………………………… 56
Включение режима контейнеров Linux для Windows……………………………………………. 56
Установка Chocolatey………………………………………………………………………………………………. 56
Сервер Docker…………………………………………………………………………………………………………………………….. 57
Linux с systemd………………………………………………………………………………………………………………………. 58
Сервер на базе виртуальной машины без Linux……………………………………………………………….. 58
Vagrant……………………………………………………………………………………………………………………….. 58
Тестирование системы………………………………………………………………………………………………………………. 63
Ubuntu……………………………………………………………………………………………………………………………………. 63
Fedora…………………………………………………………………………………………………………………………………….. 63
Alpine Linux…………………………………………………………………………………………………………………………… 64
Сервер Docker…………………………………………………………………………………………………………………………….. 64
Заключение………………………………………………………………………………………………………………………………… 66
Глава 4. Работа с образами Docker…………………………………………………………. 67
Структура Dockerfile…………………………………………………………………………………………………………………. 68
Сборка образа……………………………………………………………………………………………………………………………. 70
Запуск образа…………………………………………………………………………………………………………………………….. 73
Аргументы сборки………………………………………………………………………………………………………………… 74
Переменные среды для конфигурации……………………………………………………………………………….. 74
Пользовательские базовые образы………………………………………………………………………………………….. 75
Хранение образов………………………………………………………………………………………………………………………. 76
Публичные реестры……………………………………………………………………………………………………………… 76
Частные реестры………………………………………………………………………………………………………………….. 77
Аутентификация для входа в реестр…………………………………………………………………………………… 77
Создание учетной записи Docker Hub…………………………………………………………………….. 78
Вход в реестр…………………………………………………………………………………………………………….. 78
Отправка образов в репозиторий…………………………………………………………………………….. 80
Поиск образов в Docker Hub…………………………………………………………………………………….. 81
Управление частным реестром…………………………………………………………………………………………… 82
Тестирование частного реестра………………………………………………………………………………. 84
Оптимизация образов………………………………………………………………………………………………………………… 85
Контроль размера образов………………………………………………………………………………………………….. 85
Многоэтапные сборки………………………………………………………………………………………………. 90
Суммирование слоев……………………………………………………………………………………………………………. 92
Использование кеша слоев………………………………………………………………………………………………….. 94
Кеширование каталога………………………………………………………………………………………………………… 99
Решение проблем со сборками……………………………………………………………………………………………….. 103
Отладка образов без BuildKit……………………………………………………………………………………………. 103
Отладка образов с BuildKit……………………………………………………………………………………………….. 105
Мультиархитектурные сборки……………………………………………………………………………………………….. 107
Заключение………………………………………………………………………………………………………………………………. 111
Глава 5. Работа с контейнерами…………………………………………………………… 112
Что такое контейнер?………………………………………………………………………………………………………………. 112
История контейнеров…………………………………………………………………………………………………………. 113
Создание контейнера………………………………………………………………………………………………………………. 114
Базовая конфигурация……………………………………………………………………………………………………….. 115
Имя контейнера……………………………………………………………………………………………………….. 115
Метки……………………………………………………………………………………………………………………….. 115
Имя хоста…………………………………………………………………………………………………………………. 116
DNS…………………………………………………………………………………………………………………………… 118
MAC-адрес………………………………………………………………………………………………………………. 118
Тома хранилища………………………………………………………………………………………………………………… 119
Квоты на ресурсы………………………………………………………………………………………………………………. 121
Доля процессорного времени………………………………………………………………………………… 122
Привязка к процессору…………………………………………………………………………………………… 124
Упрощение квот на ресурсы процессора……………………………………………………………… 125
Память……………………………………………………………………………………………………………………… 126
Блочный ввод-вывод………………………………………………………………………………………………. 128
ulimit…………………………………………………………………………………………………………………………. 129
Запуск контейнера…………………………………………………………………………………………………………………… 130
Автоматический перезапуск контейнера………………………………………………………………………………. 131
Остановка контейнера…………………………………………………………………………………………………………….. 131
Принудительное завершение контейнера……………………………………………………………………………… 133
Приостановка и возобновление контейнера…………………………………………………………………………. 133
Очистка контейнеров и образов……………………………………………………………………………………………… 134
Контейнеры Windows………………………………………………………………………………………………………………. 136
Заключение………………………………………………………………………………………………………………………………. 140
Глава 6. Сбор информации в Docker…………………………………………………….. 141
Просмотр версии Docker…………………………………………………………………………………………………………. 141
Информация о сервере…………………………………………………………………………………………………………….. 143
Загрузка обновлений образов………………………………………………………………………………………………… 144
Изучение контейнера………………………………………………………………………………………………………………. 145
Изучение командной оболочки………………………………………………………………………………………………. 147
Возврат результата…………………………………………………………………………………………………………………. 148
Что происходит в контейнере…………………………………………………………………………………………………. 149
docker container exec………………………………………………………………………………………………………….. 149
docker volume………………………………………………………………………………………………………………………. 150
Журналирование……………………………………………………………………………………………………………………… 152
docker container logs………………………………………………………………………………………………………….. 152
Расширенные возможности журналирования…………………………………………………………………. 154
Мониторинг в Docker………………………………………………………………………………………………………………. 156
Статистика контейнера……………………………………………………………………………………………………… 156
Статистика в командной строке……………………………………………………………………………. 156
Эндпоинт API stats………………………………………………………………………………………………….. 158
Проверки работоспособности контейнеров…………………………………………………………………….. 160
docker system events…………………………………………………………………………………………………………….. 163
cAdvisor……………………………………………………………………………………………………………………………….. 164
Мониторинг с помощью Prometheus………………………………………………………………………………………. 166
Самостоятельная работа………………………………………………………………………………………………………… 170
Заключение………………………………………………………………………………………………………………………………. 170
Глава 7. Отладка контейнеров……………………………………………………………… 171
Вывод процесса……………………………………………………………………………………………………………………….. 171
Изучение процесса…………………………………………………………………………………………………………………… 176
Контроль процессов………………………………………………………………………………………………………………… 178
Изучение сети…………………………………………………………………………………………………………………………… 180
История образа………………………………………………………………………………………………………………………… 183
Изучение контейнера………………………………………………………………………………………………………………. 184
Изучение файловой системы…………………………………………………………………………………………………… 185
Заключение………………………………………………………………………………………………………………………………. 186
Глава 8. Принципы работы Docker Compose………………………………………… 187
Настройка Docker Compose……………………………………………………………………………………………………. 188
Запуск сервисов……………………………………………………………………………………………………………………….. 196
Принципы работы Rocket.Chat………………………………………………………………………………………………. 198
Применение Docker Compose………………………………………………………………………………………………….. 205
Управление конфигурацией……………………………………………………………………………………………………. 207
Значения по умолчанию……………………………………………………………………………………………………. 207
Обязательные значения……………………………………………………………………………………………………… 209
Файл dotenv………………………………………………………………………………………………………………………… 210
Заключение………………………………………………………………………………………………………………………………. 211
Глава 9. Переход на контейнеры в рабочей среде…………………………………. 212
Подготовка к развертыванию…………………………………………………………………………………………………. 212
Docker в рабочих средах…………………………………………………………………………………………………………. 213
Управление заданиями………………………………………………………………………………………………………. 214
Ограничения ресурсов……………………………………………………………………………………………………….. 215
Сети……………………………………………………………………………………………………………………………………… 216
Конфигурация…………………………………………………………………………………………………………………….. 216
Упаковка и поставка………………………………………………………………………………………………………….. 217
Журналирование……………………………………………………………………………………………………………….. 217
Мониторинг………………………………………………………………………………………………………………………… 217
Планирование…………………………………………………………………………………………………………………….. 218
Распределенные планировщики……………………………………………………………………………. 218
Оркестрация…………………………………………………………………………………………………………….. 219
Обнаружение сервисов………………………………………………………………………………………………………. 220
Заключение по рабочей среде………………………………………………………………………………………….. 222
Docker в конвейере DevOps……………………………………………………………………………………………………… 222
Краткий обзор…………………………………………………………………………………………………………………….. 222
Внешние зависимости………………………………………………………………………………………………………… 225
Заключение………………………………………………………………………………………………………………………………. 226
Глава 10. Масштабирование контейнеров……………………………………………. 227
Режим Docker Swarm……………………………………………………………………………………………………………….. 228
Kubernetes…………………………………………………………………………………………………………………………………. 238
Инструмент Minikube…………………………………………………………………………………………………………. 239
Общие сведения о Minikube……………………………………………………………………………………. 239
Установка Minikube………………………………………………………………………………………………… 239
Запуск Kubernetes……………………………………………………………………………………………………. 242
Команды minikube…………………………………………………………………………………………………… 244
Kubernetes Dashboard……………………………………………………………………………………………… 244
Контейнеры и поды Kubernetes……………………………………………………………………………… 245
Практический пример…………………………………………………………………………………………….. 247
Развертывание реалистичного стека…………………………………………………………………….. 249
Определение сервиса……………………………………………………………………………………………… 250
Определение PersistentVolumeClaim……………………………………………………………………… 251
Определение Deployment………………………………………………………………………………………… 252
Развертывание приложения…………………………………………………………………………………… 253
Увеличение масштаба……………………………………………………………………………………………. 255
kubectl API……………………………………………………………………………………………………………….. 256
Kubernetes, интегрированный в Docker Desktop………………………………………………………………. 258
Kind……………………………………………………………………………………………………………………………………… 259
Amazon ECS и Fargate……………………………………………………………………………………………………………… 261
Базовая настройка AWS……………………………………………………………………………………………………. 262
Настройка ролей IAM……………………………………………………………………………………………………….. 262
Настройка AWS CLI………………………………………………………………………………………………………….. 262
Установка………………………………………………………………………………………………………………… 263
Конфигурация…………………………………………………………………………………………………………. 263
Экземпляры контейнеров…………………………………………………………………………………………………… 264
Задачи…………………………………………………………………………………………………………………………………. 265
Тестирование задачи…………………………………………………………………………………………………………. 273
Остановка задачи………………………………………………………………………………………………………………. 273
Заключение………………………………………………………………………………………………………………………………. 275
Глава 11. Расширенные концепции……………………………………………………… 276
Контейнеры в деталях…………………………………………………………………………………………………………….. 276
cgroups………………………………………………………………………………………………………………………………… 277
Файловая система /sys……………………………………………………………………………………………. 278
Пространства имен…………………………………………………………………………………………………………….. 281
Изучение пространств имен…………………………………………………………………………………… 283
Безопасность……………………………………………………………………………………………………………………………. 284
UID 0……………………………………………………………………………………………………………………………………. 285
Режим rootless…………………………………………………………………………………………………………………….. 288
Привилегированные контейнеры……………………………………………………………………………………… 292
Secure Computing Mode……………………………………………………………………………………………………… 295
SELinux и AppArmor…………………………………………………………………………………………………………… 299
Демон Docker………………………………………………………………………………………………………………………. 300
Расширенная конфигурация……………………………………………………………………………………………………. 301
Сети……………………………………………………………………………………………………………………………………… 302
Сеть хоста……………………………………………………………………………………………………………….. 304
Конфигурирование сетей……………………………………………………………………………………….. 306
Хранилище……………………………………………………………………………………………………………………………….. 308
nsenter……………………………………………………………………………………………………………………………………….. 312
Отладка контейнеров без командной оболочки……………………………………………………………… 313
Структура Docker…………………………………………………………………………………………………………………….. 315
Альтернативные среды выполнения………………………………………………………………………………………. 320
gVisor……………………………………………………………………………………………………………………………………. 320
Заключение………………………………………………………………………………………………………………………………. 323
Глава 12. Развитие экосистемы……………………………………………………………. 324
Клиентские инструменты………………………………………………………………………………………………………… 324
nerdctl………………………………………………………………………………………………………………………………….. 324
podman и buildah………………………………………………………………………………………………………………… 325
Универсальные инструменты разработчика………………………………………………………………………… 327
Rancher Desktop………………………………………………………………………………………………………………….. 327
Podman Desktop………………………………………………………………………………………………………………….. 328
Заключение………………………………………………………………………………………………………………………………. 329
Глава 13. Устройство контейнерной платформы………………………………….. 330
Приложение двенадцати факторов………………………………………………………………………………………… 331
Кодовая база………………………………………………………………………………………………………………………. 331
Зависимости……………………………………………………………………………………………………………………….. 332
Конфигурация…………………………………………………………………………………………………………………….. 333
Сторонние службы…………………………………………………………………………………………………………….. 334
Сборка, выпуск, выполнение…………………………………………………………………………………………….. 335
Процессы…………………………………………………………………………………………………………………………….. 335
Привязка портов…………………………………………………………………………………………………………………. 336
Параллелизм………………………………………………………………………………………………………………………. 336
Утилизируемость……………………………………………………………………………………………………………….. 337
Паритет среды разработки и рабочей среды………………………………………………………………….. 337
Журналы…………………………………………………………………………………………………………………………….. 338
Администрирование…………………………………………………………………………………………………………… 338
Заключение по 12 факторам……………………………………………………………………………………………… 339
Манифест реактивных систем………………………………………………………………………………………………… 339
Быстрый отклик………………………………………………………………………………………………………………….. 339
Отказоустойчивость…………………………………………………………………………………………………………… 339
Масштабируемость……………………………………………………………………………………………………………. 339
Ориентация на события…………………………………………………………………………………………………….. 340
Заключение………………………………………………………………………………………………………………………………. 340
Глава 14. Заключение…………………………………………………………………………… 341
Дальнейшее развитие………………………………………………………………………………………………………………. 341
Зачем нужен Docker…………………………………………………………………………………………………………………. 342
Рабочий процесс Docker………………………………………………………………………………………………………….. 343
Меньше программных пакетов для развертывания……………………………………………………………… 343
Оптимизация хранения и получения……………………………………………………………………………………… 344
Результат………………………………………………………………………………………………………………………………….. 345
Итоги…………………………………………………………………………………………………………………………………………. 345
Предметный указатель…………………………………………………………………………. 346
Об авторах……………………………………………………………………………………………. 349
Об изображении на обложке………………………………………………………………… 350

Шон Кейн ( Sean P. Kane ) — основатель проекта techlabs.sh и главный инженер в компании SuperOrbital.

Карл Матиас (Karl Matthias) — вице-президент по архитектуре в компании Community.com.


