Docker для разработчиков Rails
Copyright © 2019 The Pragmatic Programmers, LLC.
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Февраль 2019
Опубликовано Pragmatic Programmers, LLC.,
9650 Strickland Rd, #103-255
Raleigh, NC 27615
USA
ISBN 978-1-68050-273-2
2019-02-23
- Автор
- Роб Айзенберг
- Издатель
- Энди Хант
- Вице- президент по производственной деятельности
- Джэйнет Фарлоу
- Старший редактор
- Сьюзан Коунант
- Редактор- консультант по аудитории
- Ааоуби Оуби Талтон
- Литературный редактор
- Николь Абрамовиц
- Составитель индекса
- Potomac Indexing, LLC
- Макет
- Gilson Graphics
При той лавине инструментов DevOps которая применяется, данный текст определённо разгадал их тайну. Я ждал книгу по Docker, посвящённую проектам Rails, и теперь я уверен что Docker именно тот путь, которого следует придерживаться.
Найгелю Лоури
Директор компании и главный консультант, Lemmata
Docker for Rails Developers является прекрасной книгой, которая позволит вам заскочить в контейнеры и преобразовать свои имеющиеся приложения для работы с ними. Она отлично написана, ей легко следовать и она заставляет вас желать продолжать чтение. Я рекомендую эту книгу всем кто имеет небольшой опыт работы с Rails и хочет начать работать с Docker.
Крис Джонсон
Руководитель работ, healthfinch
Имея в своих руках эту книгу я смог помочь своей команде перевести нашу самую большую службу с наивысшей доходностью в контейнеры. Такая миграция сделала восстановление после сбоев намного более быстрым и надёжным, а также позволила открыть центр обработки данных на совершенно новом рынке.
Ирин Дис
Ведущий программный инженер, New Relic
Эта книга намного больше чем просто инструкции с наилучшими техническими текстами, которые я когда либо видел. Отличное руководство Айзенберга даёт чёткие и понятные пояснения относительно того как решать специфичные для Rails задачи в DevOps Docker. Именно такую вещь я давно хотел бы видеть опубликованной Docker.
Дэйвид Л. Бин, доктор философии
Директор по науке о данных, PayClip, Inc.
Docker for Rails Developers это намного больше чем просто фантастический ресурс для разработчиков Ruby и Rails, стремящихся освоить Docker. Это отличное, простое руководство о том как применять данную технологию в практических ситуациях реального мира, и я без колебаний рекомендую её даже разработчикам Python или Node. Начиная с 2014 я жду в свои руки какую- нибудь компетентную книгу для тех кто интересуется Docker и она именно то что нужно.
Александер Линхэм
Владелец, envoys.io
Спасибо Адаоби, моему редактору из Pragmatic Bookshelf за её постоянный позитив и поддержку, а также за отличные редакционные отзывы по этой книге, которые способствовали её созданию настолько хорошей, насколько это только возможно. Я буду скучать по нашим обновлениям и общению обусловленных нашей общей страстью к Гордону Рамзи.
Я очень благодарен всем ниже перечисленным, которые уделили своё драгоценное время чтению и предоставлению отзывов о книге (тысяча извинений если кого-то упустил):
-
Джон Поль Ашенфилтер
-
Дэйвид Л. Бин
-
Ирин Дис
-
Крис Джонсон
-
Дэйвид Ландри
-
Найгель Лоури
-
Алекс Линхэм
-
Роури МакКюн
-
Ноэль Раппин
-
Крис Тёрн
-
Джон Итис
Книга стала несоизмеримо лучше благодаря их усилиям.
Я также хотел бы поблагодарить всех кто приобрёл бета- версию книги, пока она всё ещё писалась. В частности, я бы хотел поблагодарить людей, которые указали на ошибки во время этого процесса - ваши смятение, разочарование и головная боль , мы надеемся, спасли всех других от той же участи.
Наконец, я выражаю гигантскую благодарность всей команде Pragmatic Bookshelf за тот труд, который они взвалили на себя своей участью.
Если вы влюблены в Ruby on Rails, вы способны полюбить и Docker. Это родственные души, рождённые схожими идеалами.
Что касается меня, я был прельщён Великими идеями Rails: генераторами, миграциями, проверками в качестве граждан первого сорта, соглашениями о конфигурации, встроенными настройками для множества сред, перезагрузкой кода в реальном времени. Хотя по- отдельности все эти функции, скорее всего, не являлись новыми, их сочетание сделало Rails болше чем простой суммой его составляющих: это дало нам суперсилу.
Docker выполняет для DevOps то, что Rails сделал для веб разработки. Он также содержит Великие идеи: некое целостное представление о вашем приложении (подскажем: ваше приложение это нечто большее чем просто ваш код Rails), контейнеризацию (более простую и более эффективную чем у виртуальных машин), далеко не отстойную доставку программного обеспечения (к примеру, Ruby устанавливается при самом первом запуске сценария Ruby), отказоустойчивую кластеризацию и масштабирование сразу после приобретения (ускоренная разработка кластеров промышленного уровня на вашем локальном компьютере), встроенные функции безопасности уровня эксперта (например, автоматическая ротация ключа). Этот перечень можно продолжить.
Docker снижает порог на вступление, придавая в ваши руки те задачи DevOps, которые ранее были бы немыслимы. Это снабжает нас неким новым набором суперспособностей.
Тем не менее, Docker не панацея и не серебряная пуля для решения всех ваших проблем DevOps. Как и во всех технологиях, здесь существуют компромиссы (я постараюсь указывать на них по ходу дела). Однако, несмотря на все компромиссы, как вы выясните из данной книги, есть смысл приспособиться к Docker.
Docker, как технология, это некий набор инструментов выстраиваемых вокруг основной идеи упаковки и запуска программного обеспечения в небольшой среде песочницы, именуемой контейнерами (мы доберёмся до их мелочей в Что такое контейнер?)
На самом верхнем уровне Docker предоставляет пять возможностей:
-
Упаковку. Способность паковать программное обеспечение в повторно используемом, совместно применяемом формате, именуемым образами.
-
Распространение. Возможность простого разделения упакованного программного обеспечения (образов) с прочими людьми и развёртывания в различных машинах.
-
Возможности времени исполнения. Способность запуска, приостановки, перезапуска или останова упакованного программного обеспечения надёжным и повторяемым образом.
-
Создание инфраструктуры. Создание виртуальных машин готовых к запуску наших контейнеров Docker/
-
Оркестрация и масштабирование. Управление вашим изданием программного обеспечения в отдельном узле Docker или же в рамках целого кластера.
Будучи соединёнными в единое целое, эти пять вещей делают возможным некий новый способ доставки и исполнения программного обеспечения.
Для построения некого приложения Rails мы обычно проводим разработку на своей локальной машине. Вместо того чтобы каждый участник комады вручную сопровождал бы свою собственную локальную среду разработки, мы можем воспользоваться Docker для предоставления некого общего, стандартного окружения. Это выполняет сбережение на повторяемых усилиях и помогает избегать многих видов проблем "поработай на моей машине", которые способны приводить к пустой трате часов.
Прочие преимущества использования Docker для вашей среды разработки включают в себя:
-
Целостного взгляда на ваше приложение. Прикладная программа Rails требует базы днных и прочих внешних зависимостец подобных Redis и Elasticsearch. С помощью Docker эти зависимости больше не являются чем- то запоздалым или "дополнительным", как в Heroku; они определяются и управляются как основополагающая часть вашего прикладного приложения.
-
Установка и настройка приложений единственной командой. Вы когда- нибудь устанавливали приложение Rails на своей машине и тратили при этом слишком много времени устанавливая особые версии его программных зависимостей? Встроенный механизм Docker доставки означает, что новые участники команды могут поднять с нуля некое исполняемое приложение за минуты. Никаких трудоёмких, подверженных ошибкам, выполняемым вручную щагов по установке в этом случае.
-
Простое управление версиями зависимостей. Желаете быть уверенным что всё работает прежде чем переключиться на некую новую версию Ruby или обновить свою базу данных? Нет проблем: запуск контейнеров чрезвычайно экономичен. Просто измените версию своего образа и всё готово.
-
Гигантская экосистема Docker. Зачастую нам требуется объединяться с прочими технологиями как частью своего прикладного приложения Rails: NGINX, Redis, Postgres, MySQL, Memcached, Elasticsearch, HAProxy, RabbitMQ, Node и так далее. Всё это и даже ещё больше уже упаковано для того чтобы идти вместе с Docker.
-
Локальная имитация сред подобных промышленным. Нам известно, что то как наши приложения выполняются при разработке, это не то же самое в точности что поисходит при промышленной эксплуатации. С применением Docker вы способны эмулировать промышленные сценарии запуская свои прикладные приложения в подобных промышленным средам со множеством узлов в своей локальной машине.
Docker также может помочь когда вы выходите за рамки разработки. Он предоставляет некий согласованный интерфейс где бы вы не осуществляли выполнение локально, в сервере непрерывной интеграции (CI, continuous integration) или при развёртывании в промышленное применение. Будучи построенным единожды, один и тот же образ исполняется на всех стадиях вашего конвейера непрерывной интеграции/ доставки, снабжая нас уверенностью в том, чтоо наше проверенное приложение будет исполняться тем же самым образом во всех средах.
Если вам требуется управлять вашей собственной промышленной инфраструктурой и развёртывать её, имеются и дополнительные преимущества:
-
Стандартное развёртывание. Docker предоставляет некий стандартный способ упаковки и доставки приложений: все части вашего прикладного приложения являются неким контейнером и всякое прикладное приложение является некой коллекцией контейнеров. С точки зрения DevOps, одно прикладное приложение Docker развёртывается и управляется тем же самым способом что и всякое иное.
-
Встроенные свойства надёжности и восстанавливаемости. Вас когда- нибудь будил в три ночи разгневанный генеральный директор потому что вашему приложению пришёл капут? Кластеры Docker обладают самостоятельным восстановлением: если некий экземпляр погибает, новые копии вашего приложения порождаются на остающихся узлах.
-
Снижение стоимостей инфраструктуры, в особенности в масштабе. Контейнеры обладают гораздо меньшим весом нежели виртуальные машины (ВМ), позволяя более действенно использовать ресурсы. Они также допускают выполнять вертикальное масштабирование большого числа контейнеров в каком-то отдельном хосте вместо того чтобы раскручивать целиком некий новый экземпляр.
-
Место для роста. Если ваше прикладное приложение является (или начинает становиться) широко успешным, приятно сознавать, что Docker прошёл масштабные боевые испытания. К примеру, Google Compute Engine построен на контейнерах Docker с применением инструмента оркестврации с открытым исходным кодом Google, Kubernetes.
Эта книга предназначена для обладающих опытом разработчиков Rails, которые желали бы изучить как применять Docker. На протяжении данной книги я собираюсь предполагать что вы умеете применять Rails; это позволит нам сосредоточиться на изучении и применении Docker.
Данная книга не имеет целью выступать в качестве исчерпывающего руководства по Docker: этой цели служат некие прочие книги. Вместо этого, данная книга является вашим полевым руководством для построения приложений Rails при помощи Docker. Мы рассмотрим наиболее полезные команды и свойства, которые вам нужны, а также в случае необходимости я буду ссылаться на справочные материалы.
Если вам интересно изучить как Docker может соответствовать вашим повседневным рабочим потокам для разработки Rails, вы попали в правильное место.
В I части вы изучите всё что вам требуется знать об использовании Docker для локальной разработки Docker, включая такие центральные понятия как контейнеры и образы. Вы шаг за шагом выстроите знания из реальной жизни посредством неких последовательностей практических задач. Мы начнём с основ - исполнения некого сценария Ruby и выработки некого нового проекта Rails - прежде чем изучать как запускать наше собственное прикладное приложение построением своего собственного индивидуального образа.
Мы быстро перейдём к Compose, некому инструменту Docker верхнего уровня для декларативного описания прикладного приложения целиком и того как всё это подгонять вместе. По мере дальнейшего изучения мы поступательно поднимаем уровень вверх до служб подобных базам данных и Redis. Мы обсудим как настраивать и запускать ваши проверки с тем чтобы вы были полным профессионалом в применении разработки Docker для Rails.
В части II мы изучим весь процесс развёртывания и запуска некого приложения в промышленном применении. Мы начнём с предоставления вам некого обзора имеющегося промышленного ландшафта - его инструментов, платформ и технологий, которые могут применяться. Далее, используя собственные инструменты Docker мы предоставим машины, создадим некий класте и развернём собственное прикладное приложение. Мы также осуществим масштабирование собственных ресурсов чтобы отвечать их меняющимся потребностям.
Docker обладает сложной траекторией обучения. Это обширный инструментарий и экосистема, в которых есть много того с чем нужно разбираться. Надеюсь данная книга поможет вам - она тщательно структурирована чтобы не вводить в действие сразу слишком много новых вещей.
Каждая глава строится на основе своей предыдущей, следовательно, в особенности если вы не знакомы с Docker, я рекомендую читать эту книгу последовательно для получения максимальной выгоды. Джае если вы более опытны в Docker у себя за пазухой, именно такой подход и рекомендуется.
Идентификаторы Docker и следите за собой | |
---|---|
Docker вырабатывает различные уникальные идентификаторы. Когда вы следуете за примерами, важно помнить, что тот идентификатор, который будет выработан для вас будет отличаться от показанного в приводимом нами выводе. Не беспокойтесь, тем не менее' я буду указывть на это там, где это особенно существенно.. |
Хотя Docker и поддерживает все основные платформы (macOS, Windows и Linux) - и мы будем руководить вами на протяжении процесса установки его в них в Устанавливаем Docker - существуют некоторые незначительные различия между этими платформами, в особенности вокруг файловых полномочий и работы с сетями.
По этой причине в качестве платформы по умолчанию я выбрал Docker для Mac в примерах и при обсуждениях, но я буду указывать все отличия с прочими платформами когда они проявляются.
Рекомендуюся некие знания Linux/ Unix | |
---|---|
Даже при использовани Docker в Windows или Mac, несомненно необходимо понимать некие основы Linux. Docker развивается из свойств ядра Linux, поэтому пояснения и примеры зачастую полагаются на понятия и программы Linux. Я намерен полагаться на то, что у вас уже имеются эти знания. Если это не так, существует множество изобилие свободных интернет ресурсов, которые вы можете применять для дополнительного изучения или чтобы освежить в памяти. |
Вы можете найти полезные ресурсы, относящиеся к данной книге в интернете, включая:
-
Используемый на протяжении данной книги исходный код (вы свободно можете применять это любым способом как пожелаете)
-
Страница ошибок, которая перечисляет исправления для текущей редакции
Давайте приступим!
- Предисловие
- Часть 1. Разработка
- Глава 1. Новый мир храбрых
- Глава 2. Исполнение прикладного приложения Rail в контейнере
- Глава 3. Тонкая настройка нашего образа Rail
- Глава 4. Декларативное описание нашего прикладного приложения с помощью Docker Compose
- Глава 5. За рамками прикладного приложения: добавляем Redis
- Глава 6. Добавляем базу данных: Postgres
- Глава 7. Достойное выступление с JavaScript
- Глава 8. Проверка в среде Docker
- Глава 9. Расширенное управление Gem
- Глава 10. Некое незначительное брюзжание
- Часть 2. Вперёд в производство
- Глава 11. Промышленный ландшафт
- Глава 12. Подготовка к промышленному применению
- Глава 13. Подобная промышленной площадка
- Глава 14. Развёртывание в облаке
- Глава 15. Заключительные мысли и последующие шаги
- Что мне следует изучать далее?
- Ограниченные ресурсы
- Автоматическое масштабирование
- Нулевое время простоя, сине- зелёные развёртывания
- Безопасность
- Более современные архитектурные возможности
- Управление ключами безопасности
- Перезапуск в случае отказа
- Многоэтапные сборки
- Статистические данные Docker
- Совместное использование файлов настройки между файлами Compose
- Устойчивость базы данных
- Контейнеры в автопилоте
- Репликация базы данных и высокая доступность
- Дополнение A. Различия платформ
- Дополнение B. Поиск образа для применения
- Дополнение C. Как применять Django, PostgreSQL и Docker
- Дополнение D. Как создать контейнер Docker с ускорением RDMA приложений поверх сетевой среды 100Gb InfiniBand
- Указатель