Использование Docker
Покупка
Издательство:
ДМК Пресс
Автор:
Моуэт Эдриен
Перевод:
Снастин А. В.
Науч. ред.:
Маркелов Андрей Александрович
Год издания: 2017
Кол-во страниц: 354
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-426-7
Артикул: 712453.01.99
Доступ онлайн
В корзину
Контейнеры Docker предоставляют простые быстрые и надежные методы разработки, распространения и запуска программного обеспечения, особенно в динамических и распределенных средах. Из книги вы узнаете, почему контейнеры так важны, какие преимущества вы получите от применения Docker и как сделать Docker частью процесса разработки. Вы последовательно пройдете по всем этапам, необходимым для создания, тестирования и развертывания любого веб-приложения, использующего Docker. Также вы изучите обширный материал — начиная от основ, необходимых для запуска десятка контейнеров, и заканчивая описанием сопровождения крупной системы со множеством хостов в сетевой среде со сложным режимом планирования. Издание предназначено разработчикам, инженерам по эксплуатации и системным администраторам.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.01: Математика и компьютерные науки
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Эдриен Моуэт Использование Docker
Adrian Mouat Using Docker Developing and Deploying Software with Containers Beijing • Boston • Farnham • Sebastopol • Tokyo
Эдриен Моуэт Использование Docker Разработка и внедрение программного обеспечения при помощи технологии контейнеров Москва, 2017
УДК 004.451Docker ББК 32.972.1 М89 Моуэт Э. М89 Использование Docker / пер. с англ. А. В. Снастина; науч. ред. А. А. Маркелов. – М.: ДМК Пресс, 2017. – 354 с.: ил. ISBN 978-5-97060-426-7 Контейнеры Docker предоставляют простые быстрые и надежные методы разработки, рас пространения и запуска программного обеспечения, особенно в динамических и распределенных средах. Из книги вы узнаете, почему контейнеры так важны, какие преимущества вы получите от применения Docker и как сделать Docker частью процесса разработки. Вы последовательно пройдете по всем этапам, необходимым для создания, тестирования и развертывания любого вебприложения, использующего Docker. Также вы изучите обширный материал — начиная от основ, необходимых для запуска десятка контейнеров, и заканчивая описанием сопровождения крупной системы со множеством хостов в сетевой среде со сложным режимом планирования. Издание предназначено разработчикам, инженерам по эксплуатации и системным админист раторам. УДК 004.451Docker ББК 32.972.1 Authorized Russian translation of the English edition of Using Docker, ISBN 9781491915769. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-491-91576-9 (анг.) © 2016, Adrian Mouat ISBN 978-5-97060-426-7 (рус.) © Оформление, издание, перевод, ДМК Пресс, 2017
Посвящается всем, кто пытается что-то делать, независимо от того, чем заканчиваются их попытки: неудачей или успехом.
Содержание Предисловие...................................................................11 Часть.I..ПРЕДПОСЫЛКИ.И.ОСНОВЫ.................................... 16 Глава.1..Что.такое.контейнеры.и.для.чего.они.нужны.............. 17 Сравнение контейнеров с виртуальными машинами .............................................................18 Docker и контейнеры ..........................................................................................................................20 Краткая история Docker ....................................................................................................................23 Дополнительные модули и надстройки .......................................................................................25 64-битовая версия ОС Linux ............................................................................................................26 Глава.2..Установка........................................................... 28 Установка Docker в ОС Linux ..........................................................................................................28 Запуск SELinux в разрешающем режиме ...............................................................................29 Запуск Docker без sudo .................................................................................................................30 Установка Docker в Mac OS или в ОС Windows .......................................................................30 Оперативная проверка .......................................................................................................................32 Глава.3..Первые.шаги....................................................... 34 Запуск первого образа ........................................................................................................................34 Основные команды ..............................................................................................................................35 Создание образов из файлов Dockerfile .......................................................................................40 Работа с реестрами ..............................................................................................................................43 Закрытые частные репозитории ................................................................................................45 Использование официального образа Redis ...............................................................................46 Резюме .....................................................................................................................................................49 Глава.4..Основы.Docker.................................................... 50 Архитектура Docker ............................................................................................................................50 Базовые технологии .......................................................................................................................51 Сопровождающие технологии ...................................................................................................52 Хостинг для Docker ........................................................................................................................54 Как создаются образы.........................................................................................................................55 Контекст создания образа ............................................................................................................55
Содержание 7 Уровни образа ..................................................................................................................................56 Кэширование ....................................................................................................................................58 Базовые образы ................................................................................................................................59 Инструкции Dockerfile .................................................................................................................62 Установление связи контейнеров с внешним миром ..............................................................64 Соединение между контейнерами..................................................................................................65 Управление данными с помощью томов и контейнеров данных .........................................67 Совместное использование данных .........................................................................................69 Контейнеры данных .......................................................................................................................69 Часто используемые команды Docker ..........................................................................................71 Команда run ......................................................................................................................................72 Управление контейнерами...........................................................................................................75 Информация о механизме Docker ............................................................................................77 Информация о контейнере ..........................................................................................................78 Работа с образами ...........................................................................................................................79 Команды для работы с реестром................................................................................................82 Резюме .....................................................................................................................................................83 Часть.II..ЖИЗНЕННЫЙ.ЦИКЛ.ПО.ПРИ.ИСПОЛЬЗОВАНИИ.. DOCKER......................................................................... 84 Глава.5..Использование.Docker.в.процессе.разработки.......... 85 Традиционное приветствие миру ...................................................................................................85 Автоматизация с использованием Compose ...............................................................................95 Порядок работы Compose ............................................................................................................96 Резюме .....................................................................................................................................................98 Глава.6..Создание.простого.веб-приложения....................... 99 Создание основной веб-страницы ............................................................................................... 101 Использование преимуществ существующих изображений ............................................. 102 Дополнительное кэширование ..................................................................................................... 107 Микросервисы ....................................................................................................................................110 Резюме ...................................................................................................................................................111 Глава.7..Распространение.образов.................................... 113 Docker Hub ...........................................................................................................................................114 Автоматические сборки ...................................................................................................................115 Распространение с ограничением доступа ................................................................................118 Организация собственного реестра ........................................................................................118 Коммерческие реестры .............................................................................................................. 126 Сокращение размера образа .......................................................................................................... 126 Происхождение образов ................................................................................................................. 129 Резюме .................................................................................................................................................. 129
Содержание Глава.8..Непрерывная.интеграция.и.тестирование.. с.использованием.Docker................................................ 130 Включение модульных тестов в identidock .............................................................................. 131 Создание контейнера для сервера Jenkins ................................................................................ 136 Создание образа по триггеру ................................................................................................... 143 Выгрузка образа в реестр ............................................................................................................... 144 Присваивание осмысленных тэгов ........................................................................................ 144 Конечные процедуры подготовки и эксплуатация .......................................................... 146 Беспорядочный рост количества образов ........................................................................... 146 Использование Docker для поддержки вспомогательных серверов Jenkins .......... 147 Организация резервного копирования для сервера Jenkins .............................................. 147 Хостинговые решения для непрерывной интеграции ......................................................... 148 Тестирование и микросервисы ..................................................................................................... 148 Тестирование в процессе эксплуатации ............................................................................... 150 Резюме .................................................................................................................................................. 151 Глава.9..Развертывание.контейнеров................................. 152 Предоставление ресурсов с помощью Docker Machine ....................................................... 153 Использование прокси-сервера ................................................................................................... 156 Варианты выполнения .................................................................................................................... 163 Скрипты командной оболочки................................................................................................ 163 Использование диспетчера процессов или systemd для глобального управления ..................................................................................................................................... 165 Использование инструментальных средств управления конфигурацией .............. 168 Конфигурация хоста ........................................................................................................................ 172 Выбор операционной системы ................................................................................................ 173 Выбор драйвера файловой системы ...................................................................................... 173 Специализированные варианты хостинга ................................................................................ 176 Triton ................................................................................................................................................ 176 Google Container Engine ............................................................................................................ 178 Amazon EC2 Container Service ................................................................................................ 179 Giant Swarm ................................................................................................................................... 181 Контейнеры для постоянно хранимых данных и для промышленной эксплуатации ...................................................................................................................................... 183 Совместное использование закрытых данных ....................................................................... 184 Сохранение закрытых данных в образе ............................................................................... 184 Передача закрытых данных в переменных среды ............................................................ 185 Передача закрытых данных в томах ...................................................................................... 185 Использование хранилища типа «ключ-значение» ......................................................... 186 Сетевая среда ...................................................................................................................................... 187 Реестр для промышленной эксплуатации ................................................................................ 187 Непрерывное развертывание/доставка .................................................................................... 188 Резюме .................................................................................................................................................. 189
Содержание 9 Глава.10..Ведение.журналов.событий.и.контроль................. 190 Ведение журналов событий ........................................................................................................... 191 Принятая по умолчанию подсистема ведения журналов событий в Docker .......... 191 Объединение журналов ............................................................................................................. 192 Ведение журналов с использованием ELK ......................................................................... 193 Ведение журналов Docker с использованием syslog ....................................................... 204 Извлечение журнальных записей из файла ....................................................................... 210 Контроль и система оповещения ................................................................................................. 210 Контроль с помощью Docker Tools .........................................................................................211 cAdvisor ........................................................................................................................................... 213 Кластерные решения .................................................................................................................. 214 Коммерческие решения, обеспечивающие контроль и ведение журналов................... 216 Резюме .................................................................................................................................................. 218 Часть.III..ИНСТРУМЕНТАЛЬНЫЕ.СРЕДСТВА.И.МЕТОДИКИ....... 219 Глава.11..Сетевая.среда.и.обнаружение.сервисов................ 220 Посредники ......................................................................................................................................... 221 Обнаружение сервисов ................................................................................................................... 225 etcd .................................................................................................................................................... 226 SkyDNS ............................................................................................................................................ 230 Consul ............................................................................................................................................... 234 Регистрация ................................................................................................................................... 239 Другие решения ............................................................................................................................ 241 Варианты организации сетевой среды ...................................................................................... 242 Режим bridge .................................................................................................................................. 242 Режим host ..................................................................................................................................... 243 Режим container ............................................................................................................................ 244 Режим none .................................................................................................................................... 244 Новая сетевая среда Docker .......................................................................................................... 245 Типы сетей и подключаемые модули .................................................................................... 246 Комплексные сетевые решения ................................................................................................... 247 Overlay ............................................................................................................................................. 248 Weave ................................................................................................................................................ 250 Flannel .............................................................................................................................................. 254 Project Calico ................................................................................................................................. 259 Резюме .................................................................................................................................................. 263 Глава.12..Оркестрация,.кластеризация.и.управление........... 266 Инструментальные средства кластеризации и оркестрации ............................................. 268 Swarm ............................................................................................................................................... 268 Fleet ................................................................................................................................................... 274 Kubernetes....................................................................................................................................... 280
Содержание Mesos и Marathon ......................................................................................................................... 289 Платформы управления контейнерами .................................................................................... 300 Rancher ............................................................................................................................................ 301 Clocker ............................................................................................................................................. 302 Tutum ................................................................................................................................................ 304 Резюме .................................................................................................................................................. 305 Глава.13..Обеспечение.безопасности.контейнеров.. и.связанные.с.этим.ограничения....................................... 306 На что следует обратить особое внимание ............................................................................... 307 Глубокая защита ................................................................................................................................ 309 Принцип минимальных привилегий .................................................................................... 310 Обеспечение безопасности identidock ...................................................................................311 Разделение контейнеров по хостам ............................................................................................ 312 Обновления ......................................................................................................................................... 314 Не используйте неподдерживаемых драйверов ................................................................ 317 Подтверждение происхождения образов ................................................................................. 317 Дайджесты Docker ....................................................................................................................... 318 Механизм подтверждения контента в Docker ................................................................... 318 Повторно воспроизводимые и надежные файлы Dockerfile......................................... 323 Обеспечение безопасной загрузки ПО в файлах Dockerfile .............................................. 324 Рекомендации по обеспечению безопасности ........................................................................ 326 Всегда определяйте пользователя.......................................................................................... 326 Ограничения сетевой среды контейнеров........................................................................... 328 Удаляйте бинарные файлы с установленными битами setuid/setgid ........................ 329 Ограничение использования оперативной памяти ......................................................... 330 Ограничение загрузки процессора ........................................................................................ 331 Ограничение возможности перезапуска .............................................................................. 333 Ограничения файловых систем .............................................................................................. 333 Ограничение использования механизма Сapabilities .................................................... 334 Ограничение ресурсов (ulimits) ............................................................................................. 335 Использование защищенного ядра ............................................................................................. 337 Модули безопасности Linux .......................................................................................................... 338 SELinux............................................................................................................................................ 338 AppArmor ........................................................................................................................................ 342 Проведение контрольных проверок ........................................................................................... 342 Реакция на нестандартные ситуации ......................................................................................... 343 Функциональные возможности будущих версий ................................................................. 344 Резюме .................................................................................................................................................. 345 Предметный.указатель.................................................... 346
Предисловие Контейнеры – это простые и переносимые между платформами хранилища для приложения и его зависимостей. Написанное выше звучит сухо и скучно. Но возможности контейнеров вовсе не ограничиваются усовершенствованием процессов; при правильном использовании контейнеры способны изменить всю картину. Такое обоснование возможности использования контейнеров в архитектурах и рабочих процессах выглядит весьма убедительно, и похоже на то, что все крупные ИТ-компании, которые раньше никогда не слышали о контейнерах и Docker, буквально за год перешли к активным исследованиям и практическому применению этих технологий. Рост популярности Docker был поразительным. Я не помню, чтобы какаялибо другая среда оказывала столь основательное и глубокое воздействие в области информационных технологий. Эта книга представляет собой попытку помочь читателям понять, почему контейнеры так важны, какую пользу принесет применение контейнеризации и, что самое главное, как перейти к этой технологии. Для кого предназначена эта книга В этой книге предпринята попытка дать целостный подход к программной среде Docker с обоснованием ее использования и описанием способов ее практического применения и внедрения в рабочий поток разработки программного обеспечения. Книга полностью охватывает весь жизненный цикл программного продукта – от разработки до промышленного тиражирования и сопровождения. Я старался не делать каких-либо предположений об уровне знаний читателя об ОС Linux и о процессе разработки программного обеспечения в целом. К предполагаемому кругу читателей прежде всего относятся разработчики программного обеспечения, инженеры по эксплуатации и системные администраторы (особенно те, кто серьезно интересуется развитием методики DevOps). Однако руководители, обладающие достаточными техническими знаниями, и все интересующиеся этой темой также могут кое-что почерпнуть из этой книги. Почему я написал эту книгу Мне повезло оказаться среди тех, кто узнал о Docker и стал использовать эту программную среду в самом начале ее стремительного взлета. Когда появилась возможность написать книгу о Docker, я ухватился за нее обеими руками. Если мои труды помогут кому-то из вас понять эту технологию и проделать бóльшую часть
Предисловие пути к контейнеризации, то я буду считать это более значимым достижением, чем годы разработки программного обеспечения. Искренне надеюсь, что вы с удовольствием прочтете эту книгу и она поможет вам при переходе к практическому применению Docker в вашей организации. Структура книги Книга состоит из трех основных частей: часть I начинается с определения контейнеров и краткого описания их свойств, которые представляют интерес для читателей, далее следует главаруководство по основам Docker. Первая часть завершается большой главой, в которой описаны главные концепции и технология, на которых основана программная среда Docker, включая обзор различных команд среды Docker; в части II рассматривается использование Docker в жизненном цикле разработки программного обеспечения. Описан процесс установки среды разработки, затем создание простого веб-приложения, которое используется в дальнейшем как пример на протяжении всей части II. Отдельная глава посвящена разработке, тестированию и объединению с существующей программной средой, также рассматриваются процедура развертывания контейнеров и способы эффективного наблюдения и журналирования в целевой рабочей системе; в части III все внимание сосредоточено на мельчайших подробностях, а также на инструментах и методиках, необходимых для безопасного и надежного функционирования многохостовых кластеров, состоящих из Docker-контейнеров. Если вы уже используете Docker и хотите понять, как выполнить масштабирование или решить проблемы безопасности и работы в сетевой среде, то эта часть предназначена для вас. Условные обозначения и соглашения, принятые в книге В книге используются следующие типографские соглашения: Курсив – используется для смыслового выделения важных положений, новых терминов, имен команд и утилит, а также имен и расширений файлов и каталогов. Моноширинный шрифт – используется для листингов программ, а также в обычном тексте для обозначения имен переменных, функций, типов, объектов, баз данных, переменных среды, операторов, ключевых слов и других программных конструкций и элементов исходного кода. Моноширинный полужирный шрифт – используется для обозначения команд или фрагментов текста, которые пользователь должен ввести дословно без изменений. Моноширинный курсив – используется для обозначения в исходном коде или в командах шаблонных меток-заполнителей, которые должны быть заменены соответствующими контексту реальными значениями.
Онлайн-сервис Safari Books 13 Такая пиктограмма обозначает совет, указание или примечание общего характера. Эта пиктограмма предупреждает о неочевидных и скрытых «подводных камнях» и «ловушках», которых следует всячески избегать. Примеры исходного кода Дополнительные материалы (примеры исходного кода, учебные задания и т. п.) можно получить по ссылке https://github.com/using-docker/. Эта книга написана для того, чтобы помочь вам в работе. Вообще говоря, вы можете использовать код из данной книги в своих программах и в документации. Если вы копируете для собственных нужд фрагмент исходного кода незначительного размера, то нет необходимости обращаться к автору и издателям для получения разрешения на это. Например, при включении в свою программу нескольких небольших фрагментов кода из книги вам не потребуется какое-либо специальное разрешение. Но для продажи или распространения CD-диска с примерами из книг издательства O’Reilly необходимо будет получить официальное разрешение на подобные действия. При ответах на вопросы можно цитировать текст данной книги и приводить примеры кода из нее без дополнительных условий. При включении крупных фрагментов исходного кода из книги в документацию собственного программного продукта также потребуется официальное разрешение. При цитировании мы будем особенно благодарны за библиографическую ссыл ку на источник. Обычно ссылка на источник состоит из названия книги, имени автора, наименования издательства и номера по ISBN-классификации. Например: «Using Docker (Использование Docker) by Adrian Mouat (Эдриэн Моуэт) (O’Reilly). Copyright 2016 Adrian Mouat, 978-1-491-91576-9». Если у вас возникли сомнения в легальности использования примеров исходного кода без получения специального разрешения при условиях, описанных выше, то без колебаний обращайтесь по адресу электронной почты: permissions@oreilly.com. Онлайн-сервис Safari Books Онлайн-сервис Safari Books (http://safaribooksonline.com) – это электронная библиотека с весьма быстрым обслуживанием заявок, которая предоставляет в формате книг и в видеоформате высококачественные материалы, созданные ведущими авторами с мировой известностью в технических дисциплинах и в сфере бизнеса. Специалисты-профессионалы в различных областях техники, разработчики программного обеспечения, веб-дизайнеры, бизнесмены и творческие работники используют онлайн-сервис Safari Books как основной ресурс для научных исследований, решения профессиональных задач, обучения и подготовки к сертификации.
Предисловие Онлайн-сервис Safari Books предлагает широкий ассортимент разнообразных подборок материалов с индивидуальным формированием цены каждой такой подборки для организаций, государственных учреждений, учебных заведений и частных лиц. В рамках общей базы данных с единым механизмом полнотекстового поиска подписчики получают доступ к тысячам книг, учебных видеоматериалов и даже к еще не опубликованным рукописям, предоставленным такими известными издательствами, как O’Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology, и многими другими. Более подробную информацию об онлайн-сервисе Safari Books можно получить на сайте https://www.safaribooksonline.com/. От издательства Замечания, предложения и вопросы по этой книге отправляйте по адресу: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (в США или в Канаде) 707-829-0515 (международный или местный) 707-829-0104 (факс) Для этой книги создана специальная веб-страница, на которой мы разместили список обнаруженных опечаток и ошибок, исходные коды примеров и другую дополнительную информацию. Сетевой адрес этой страницы: http://bit.ly/using-docker. Комментарии и технические вопросы по теме данной книги отправляйте по адресу электронной почты: bookquestions@oreilly.com. Для получения более подробной информации о книгах, учебных курсах, конференциях и новостях издательства O’Reilly посетите наш веб-сайт: http://www.oreilly. com/. Издательство представлено: в соцсети Facebook: http://facebook.com/oreilly; в Twitter: http://twitter.com/oreillymedia; и в YouTube: http://www.youtube.com/oreillymedia. Благодарности Я в высшей степени благодарен за всю помощь, советы и критику, которые получал во время написания этой книги. Если в приведенном ниже списке я пропустил чье-то имя, примите мои извинения; ваш вклад оценен по достоинству вне зависимости от содержания этого списка.
Благодарности 15 За плодотворное активное сотрудничество благодарю Элли Хьюм (Ally Hume), Тома Сагдена (Tom Sugden), Лукаша Гумински (Lukasz Guminski), Тайлейе Элему (Tilaye Alemu), Себастиена Гусгоэна (Sebastien Goasduen), Максима Белоусова (Maxim Belooussov), Михаэля Белена (Michael Boelen), Ксению Бурлаченко (Ksenia Burlachenko), Карлоса Санчеса (Carlos Sanchez), Дэниэла Брайанта (Daniel Bryant), Кристофера Холмштедта (Christoffer Holmstedt), Майка Рэтбана (Mike Rathbun), Фабрицио Соппелза (Fabrizio Soppelsa), Юн-Чжин Ху (Yung-Jin Hu), Йоуни Миикки (Jouni Miikki) и Дэйла Бьюли (Dale Bewley). За обсуждение технических вопросов и технологий, описываемых в этой книге, спасибо Эндрю Кеннеди (Andrew Kennedy), Питеру Уайту (Peter White), Алексу Поллитту (Alex Pollitt), Финтэну Райану (Fintan Ryan), Шону Крэмптону (Shaun Crampton), Спайку Кертису (Spike Curtis), Алексису Ричардсону (Alexis Richardson), Илье Дмитриченко (Ilya Dmitrichenko), Кейси Биссон (Casey Bisson), Тийсу Шнитгеру (Tijs Schnitger), Шен Лян (Sheng Liang), Тимо Дерштаппену (Timo Derstappen), Пуйа Аббасси (Puja Abbassi), Александру Ларссону (Alexander Larsson) и Келзи Хайтауэр (Kelsey Hightower). Отдельная благодарность Кевину Годэну (Kevin Gaudin) за разрешение неограниченного использования модуля monsterid.js. За всю оказанную мне помощь благодарю коллектив издательства O’Reilly, особая благодарность моему редактору Брайану Андерсону (Brian Anderson) и Меган Бланшетт (Meghan Blanchette) за работу на начальном этапе процесса. Диого Моника (Diogo Mónica) и Марк Коулмэн (Mark Coleman), спасибо вам обоим за то, что откликнулись на мою просьбу о срочной помощи. Кроме того, следует особо отметить две компании: Container Solutions и CloudSoft. Джейми Добсон (Jamie Dobson) и Container Solutions поощряли ведение моего блога и выступления на соответствующих мероприятиях, а также обеспечивали связь с некоторыми людьми, оказавшими влияние на содержание этой книги. Компания CloudSoft любезно предоставила в мое распоряжение офис на время написания книги и провела семинар Edinburgh Docker – оба этих события были чрезвычайно важными для меня. За терпеливую поддержку моей одержимости и моих роптаний во время работы над книгой спасибо моим друзьям и моей семье – вам хорошо известно, что вы значите для меня (хотя вряд ли прочтете когда-либо эти строки). Наконец, спасибо ди-джеям BBC 6 Music, предоставившим саундтрек для этой книги, в том числе Лорен Лаверн (Lauren Laverne), Рэдклифф и Макони (Radcliffe and Maconie), Шону Кэвени (Shaun Keaveny) и Игги Поп (Iggy Pop).
Доступ онлайн
В корзину