Docker на практике

Иан Милл Эйдан Сейерс

Обложка:


Содержание
Предисловие ..................................................................................................... 12
Благодарности................................................................................................... 14
Об этой книге ................................................................................................... 15
Дорожная карта............................................................................................... 16
О коде .............................................................................................................. 17
Книжный форум ............................................................................................. 17
Об иллюстрации на обложке.......................................................................... 18
Часть 1. Основы Docker.................................................................................... 19
Глава 1. Знакомство с Docker.......................................................................... 20
1.1 Что такое Docker и для чего он нужен ..................................................... 22
1.1.1 Что такое Docker? ............................................................................ 23
1.1.2 Чем хорош Docker? .......................................................................... 24
1.1.3 Ключевые концепции ..................................................................... 26
1.2 Создание приложения Docker.................................................................. 28
1.2.1 Способы создания нового образа Docker....................................... 30
1.2.2 Пишем Dockerfile ............................................................................. 30
1.2.3 Собираем образ Docker ................................................................... 32
1.2.4 Запускаем контейнер Docker.......................................................... 33
1.2.5 Слои Docker ..................................................................................... 36
Резюме............................................................................................................. 38
Глава 2. Постигаем Docker: внутри машинного отделения....................... 39
2.1 Архитектура Docker................................................................................... 39
2.2 Демон Docker............................................................................................. 41
МЕТОД 1. Сделайте демон Docker доступным ......................................... 42
МЕТОД 2. Запуск контейнеров в качестве демонов.................................. 44
МЕТОД 3. Перемещение Docker в другой раздел...................................... 48
2.3 Клиент Docker............................................................................................ 49
МЕТОД 4. Использование socat для мониторинга трафика Docker API...... 49
МЕТОД 5. Использование Docker в вашем браузере ................................. 53
МЕТОД 6. Использование портов для подключения к контейнерам......... 56
МЕТОД 7. Разрешение связи между контейнерами.................................. 58
МЕТОД 8. Установление соединений между контейнерами
для изоляции портов ...................................................................... 60
2.4 Реестры Docker.......................................................................................... 62
6  Содержание
МЕТОД 9. Настройка локального реестра Docker ..................................... 63
2.5 Docker Hub ................................................................................................. 64
МЕТОД 10. Поиск и запуск образа Docker ................................................ 65
Резюме ............................................................................................................ 68
Часть 2. Docker и разработка.......................................................................... 71
Глава 3. Использование Docker
в качестве легкой виртуальной машины ..................................................... 72
3.1 От виртуальной машины к контейнеру .................................................. 73
МЕТОД 11. Преобразование вашей виртуальной машины в контейнер.... 73
МЕТОД 12. Хост-подобный контейнер .................................................... 78
МЕТОД 13. Разделение системы на микросервисные контейнеры ........... 81
МЕТОД 14. Управление запуском служб вашего контейнера .................... 84
3.2 Сохранение и восстановление работы .................................................... 87
МЕТОД 15. Подход «сохранить игру»:
дешевое управление исходным кодом ............................................ 88
МЕТОД 16. Присвоение тегов.................................................................. 91
МЕТОД 17. Совместное использование образов в Docker Hub................... 94
МЕТОД 18. Обращение к конкретному образу в сборках ......................... 96
3.3 Среда как процесс .................................................................................... 98
МЕТОД 19. Подход «сохранить игру»: победа в игре 2048......................... 98
Резюме........................................................................................................... 101
Глава 4. Сборка образов ................................................................................ 102
4.1 Сборка образов........................................................................................ 102
МЕТОД 20. Внедрение файлов в образ с помощью ADD ......................... 103
МЕТОД 21. Повторная сборка без кеша ................................................. 106
МЕТОД 22. Запрет кеширования ........................................................... 108
МЕТОД 23. Умный запрет кеширования с помощью build-args............... 110
МЕТОД 24. Умный запрет кеширования с помощью директивы ADD ..... 114
МЕТОД 25. Установка правильного часового пояса в контейнерах ......... 118
МЕТОД 26. Управление локалями.......................................................... 120
МЕТОД 27. Шагаем по слоям с помощью image-stepper.......................... 124
МЕТОД 28. Onbuild и golang .................................................................. 129
Резюме........................................................................................................... 133
Глава 5. Запуск контейнеров......................................................................... 134
5.1 Запуск контейнеров................................................................................ 134
МЕТОД 29. Запуск графического интерфейса пользователя в Docker...... 135
МЕТОД 30. Проверка контейнеров ........................................................ 137
МЕТОД 31. Чистое уничтожение контейнеров ....................................... 139
МЕТОД 32. Использование Docker Machine
для поддержки работы хостов Docker............................................ 141
МЕТОД 33. Запись Wildcard................................................................... 146
Содержание  7
5.2 Тома.......................................................................................................... 147
МЕТОД 34. Тома Docker: проблемы персистентности ............................ 147
МЕТОД 35. Распределенные тома и Resilio Sync..................................... 149
МЕТОД 36. Сохранение истории bash вашего контейнера...................... 152
МЕТОД 37. Контейнеры данных ............................................................ 154
МЕТОД 38. Удаленное монтирование тома с использованием SSHFS ..... 157
МЕТОД 39. Совместное использование данных через NFS ..................... 160
МЕТОД 40. Контейнер dev tools............................................................. 163
Резюме .......................................................................................................... 164
Глава 6. Повседневное использование Docker ......................................... 165
6.1 Оставаться в полном порядке ............................................................... 165
МЕТОД 41. Запуск Docker без использования sudo................................. 166
МЕТОД 42. Содержание контейнеров в порядке .................................... 167
МЕТОД 43. Содержание томов в порядке............................................... 169
МЕТОД 44. Отключение от контейнеров без их остановки..................... 171
МЕТОД 45. Использование Portainer для управления демоном Docker ... 172
МЕТОД 46. Создание графа зависимостей образов Docker ..................... 173
МЕТОД 47. Прямое действие: выполнение команд в контейнере ........... 176
МЕТОД 48. Вы находитесь в контейнере Docker? ................................... 178
Резюме .......................................................................................................... 179
Глава 7. Управление конфигурацией: наводим порядок в доме ........... 180
7.1 Управление конфигурацией и файлы Dockerfile................................... 181
МЕТОД 49. Создание надежных специальных
инструментов с помощью ENTRYPOINT........................................ 181
МЕТОД 50. Предотвращение перемещения пакетов
путем указания версий................................................................. 183
МЕТОД 51. Замена текста с помощью perl -p -i -e................................... 185
МЕТОД 52. Сращивание образов ........................................................... 187
МЕТОД 53. Управление чужими пакетами с помощью Alien .................. 189
7.2 Традиционные инструменты управления
конфигурацией и Docker ........................................................................ 192
МЕТОД 54. Традиционно: использование make и Docker ....................... 193
МЕТОД 55. Создание образов с помощью Chef Solo ............................... 196
7.3 Маленький значит красивый ................................................................. 201
МЕТОД 56. Хитрости, позволяющие уменьшить образ .......................... 202
МЕТОД 57. Создание маленьких образов Docker
с помощью BusyBox и Alpine ......................................................... 203
МЕТОД 58. Модель минимальных контейнеров Go................................ 206
МЕТОД 59. Использование inotifywait
для сокращения размера контейнеров.......................................... 210
МЕТОД 60. Большое может быть красивым ........................................... 213
Резюме .......................................................................................................... 216
8  Содержание
Часть 3. Docker и DevOps............................................................................... 217
Глава 8. Непрерывная интеграция:
ускорение конвейера разработки ............................................................... 218
8.1 Автоматические сборки Docker Hub...................................................... 219
МЕТОД 61. Использование рабочего процесса Docker Hub ..................... 219
8.2 Более эффективные сборки.................................................................... 223
МЕТОД 62. Ускорение сборок с интенсивным
вводом-выводом с помощью eatmydata ........................................ 223
МЕТОД 63. Настройка кеша пакетов для более быстрой сборки ............ 225
МЕТОД 64. Headless Chrome в контейнере............................................. 229
МЕТОД 65. Выполнение тестов Selenium внутри Docker......................... 232
8.3 Контейнеризация процесса непрерывной интеграции....................... 237
МЕТОД 66. Запуск ведущего устройства Jenkins в контейнере Docker..... 238
МЕТОД 67. Содержание сложной среды разработки............................... 240
МЕТОД 68. Масштабирование процесса непрерывной
интеграции с помощью плагина Swarm......................................... 246
МЕТОД 69. Безопасное обновление
контейнеризованного сервера Jenkins........................................... 251
Резюме .......................................................................................................... 255
Глава 9. Непрерывная доставка:
идеальная совместимость с принципами Docker..................................... 256
9.1 Взаимодействие с другими командами
в конвейере непрерывной доставки...................................................... 257
МЕТОД 70. Контракт Docker: устранение разногласий ........................... 258
9.2 Облегчение развертывания образов Docker ......................................... 261
МЕТОД 71. Зеркальное отображение образов реестра вручную.............. 261
МЕТОД 72. Доставка образов через ограниченные соединения.............. 263
МЕТОД 73. Совместное использование объектов Docker
в виде TAR-файлов ..............................................................................266
9.3 Настройка ваших образов для среды..................................................... 268
МЕТОД 74. Информирование контейнеров с помощью etcd .................. 268
9.4 Обновление запущенных контейнеров................................................. 272
МЕТОД 75. Использование confd для включения
переключения без простоя ........................................................... 273
Резюме........................................................................................................... 278
Глава 10. Сетевое моделирование:
Безболезненное Реалистичное тестирование среды .............................. 279
10.1 Обмен данными между контейнерами:
за пределами ручного соединения ........................................................ 279
МЕТОД 76. Простой кластер Docker Compose......................................... 280
МЕТОД 77. SQLite-сервер, использующий Docker Compose..................... 284
Содержание  9
10.2 Использование Docker для симуляции реальной сетевой среды ...... 290
МЕТОД 78. Имитация проблемных сетей с помощью Comcast ............... 290
МЕТОД 79. Имитация проблемных сетей с помощью Blockade .............. 294
10.3 Docker и виртуальные сети ........................................................... 299
МЕТОД 80. Создание еще одной виртуальной сети Docker..................... 300
МЕТОД 81. Настройка физической сети с помощью Weave .................... 304
Резюме .......................................................................................................... 308
Часть 4. Оркестровка от одного компьютера до облака......................... 309
Глава 11. Основы оркестровки контейнеров ............................................ 310
11.1 Простой Docker с одним хостом........................................................... 312
МЕТОД 82. Управление контейнерами
на вашем хосте с помощью systemd .............................................. 312
МЕТОД 83. Оркестровка запуска контейнеров на вашем хосте .............. 316
11.2 Docker с несколькими хостами............................................................. 319
МЕТОД 84. Мультихостовый Docker и Helios.......................................... 320
11.3 Обнаружение сервисов: что у нас здесь?............................................. 327
МЕТОД 85. Использование Consul для обнаружения сервисов................ 327
МЕТОД 86. Автоматическая регистрация служб
с использованием Registrator........................................................ 337
Резюме .......................................................................................................... 339
Глава 12. Центр обработки данных в качестве ОС с Docker................... 340
12.1 Мультихостовый Docker ....................................................................... 340
МЕТОД 87. Бесшовный кластер Docker с режимом swarm....................... 341
МЕТОД 88. Использование кластера Kubernetes .................................... 345
МЕТОД 89. Доступ к API Kubernetes из модуля ...................................... 352
МЕТОД 90. Использование OpenShift для локального
запуска API-интерфейсов AWS ..................................................... 356
МЕТОД 91. Создание фреймворка на основе Mesos ............................... 362
МЕТОД 92. Микроуправление Mesos с помощью Marathon .................... 371
Резюме .......................................................................................................... 375
Глава 13. Платформы Docker ....................................................................... 376
13.1 Факторы организационного выбора ................................................... 377
13.1.1 Время выхода на рынок ............................................................. 380
13.1.2 Покупка по сравнению со сборкой............................................. 381
13.1.3 Монолитное против частичного ................................................ 382
13.1.4 Открытый исходный код
по сравнению с лицензированным ............................................. 383
13.1.5 Отношение к безопасности ....................................................... 383
13.1.6 Независимость потребителей .................................................... 384
13.1.7 Облачная стратегия .................................................................... 384
13.1.8 Организационная структура....................................................... 385
10  Содержание
13.1.9 Несколько платформ? ................................................................. 385
13.1.10 Организационные факторы. Заключение................................ 385
13.2 Области, которые следует учитывать при переходе на Docker.......... 386
13.2.1 Безопасность и контроль ........................................................... 386
13.2.2 Создание и доставка образов ..................................................... 394
13.2.3 Запуск контейнеров .................................................................... 398
13.3 Поставщики, организации и продукты ............................................... 401
13.3.1 Cloud Native Computing Foundation (CNCF) ............................... 401
13.3.2 Docker, Inc .................................................................................... 403
13.3.3 Google .......................................................................................... 403
13.3.4 Microsoft ...................................................................................... 403
13.3.5 Amazon ......................................................................................... 404
13.3.6 Red Hat ......................................................................................... 404
Резюме .......................................................................................................... 405
Часть 5. Docker в рабочем окружении ....................................................... 407
Глава 14. Docker и безопасность.................................................................. 408
14.1 Получение доступа к Docker, и что это значит.................................... 408
14.1.1 Вас это волнует?........................................................................... 409
14.2 Меры безопасности в Docker................................................................ 410
МЕТОД 93. Ограничение мандатов ....................................................... 410
МЕТОД 94. «Плохой» образ Docker для сканирования ............................ 415
14.3 Обеспечение доступа к Docker ............................................................ 417
МЕТОД 95. HTTP-аутентификация на вашем экземпляре Docker .......... 417
МЕТОД 96. Защита API Docker .............................................................. 422
14.4 Безопасность за пределами Docker...................................................... 426
МЕТОД 97. Сокращение поверхности атаки
контейнера с помощью DockerSlim .............................................. 427
МЕТОД 98. Удаление секретов, добавленных во время сборки ............... 434
МЕТОД 99. OpenShift: платформа приложений как сервис .................... 438
МЕТОД 100. Использование параметров безопасности ......................... 447
Резюме .......................................................................................................... 455
Глава 15. Как по маслу: запуск Docker в рабочем окружении .............. 456
15.1 Мониторинг........................................................................................... 457
МЕТОД 101. Логирование контейнеров в системный журнал хоста ....... 457
МЕТОД 102. Логирование вывода журналов Docker ............................... 460
МЕТОД 103. Мониторинг контейнеров с помощью cAdvisor .................. 463
15.2 Управление ресурсами ......................................................................... 465
МЕТОД 104. Ограничение количества ядер для работы контейнеров ..... 465
МЕТОД 105. Предоставление важным контейнерам
больше ресурсов ЦП ..................................................................... 466
МЕТОД 106. Ограничение использования памяти контейнера .............. 468
Содержание  11
15.3 Варианты использования Docker
для системного администратора .......................................................... 470
МЕТОД 107. Использование Docker для запуска заданий cron ................ 471
МЕТОД 108. Подход «сохранить игру»
по отношению к резервным копиям ............................................. 475
Резюме .......................................................................................................... 477
Глава 16. Docker в рабочем окружении: решение проблем................... 478
16.1 Производительность: нельзя игнорировать хост ............................... 478
МЕТОД 109. Получение доступа к ресурсам хоста из контейнера ........... 479
МЕТОД 110. Отключение OOM killer ..................................................... 484
16.2 Когда контейнеры дают течь – отладка Docker .................................. 486
МЕТОД 111. Отладка сети контейнера с помощью nsenter..................... 486
МЕТОД 112. Использование tcpflow для отладки
в полете без перенастройки.......................................................... 490
МЕТОД 113. Отладка контейнеров, которые не работают
на определенных хостах ............................................................... 492
МЕТОД 114. Извлечение файла из образа ............................................. 496
Резюме .......................................................................................................... 498
Приложения .................................................................................................... 500
Приложение A. Установка и использование Docker ................................ 500
Подход с использованием виртуальной машины ...................................... 501
Docker-клиент, подключенный к внешнему серверу Docker..................... 501
Нативный Docker-клиент и виртуальная машина...................................... 501
Внешнее открытие портов в Windows .................................................. 503
Графические приложения в Windows ................................................... 504
Если нужна помощь ..................................................................................... 505
Приложение B. Настройка Docker ............................................................... 506
Настройка Docker ......................................................................................... 506
Перезапуск Docker ........................................................................................ 507
Перезапуск с помощью systemctl.......................................................... 507
Перезапуск с помощью service.............................................................. 508
Приложение C. Vagrant ................................................................................. 509
Настройка ..................................................................................................... 509
Графические интерфейсы ............................................................................ 509
Память ........................................................................................................... 510
Предметный указатель.................................................................................. 511