Начните работу с Docker и Rails сегодня

Docker и Rails - это хорошо известные технологии в мире веб-разработки, каждая из которых имеет уникальные и мощные преимущества. Преимущества этих инструментов усугубляются, если они объединены в одном приложении. Докеризация приложения Ruby on Rails открывает новые инновационные способы доставки и запуска программного обеспечения.

Единственным недостатком является то, что его сложнее установить, так что стоит ли оно того?

Сегодня мы рассмотрим преимущества каждого инструмента и то, как они работают вместе, чтобы помочь вам решить, подходят ли они для вашего следующего проекта.

Вот что мы обсудим сегодня:

  • Что такое докер?
  • Что такое Rails?
  • Зачем использовать Docker с Rails?
  • Основные понятия и термины, которые вам следует знать
  • Начало работы с Docker и Rails

Что такое докер?

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

Пять основных функций Docker:

  • Упаковка: возможность упаковать программное обеспечение в формат многократного использования и обмена, известный как изображения.
  • Распространение: возможность легко делиться упакованным программным обеспечением (образами) с другими людьми и развертывать его на разных машинах.
  • Время выполнения: возможность надежно запускать, приостанавливать, перезапускать или останавливать упакованное программное обеспечение.
  • Создание инфраструктуры: создание виртуальных машин, готовых к запуску контейнеров Docker.
  • Оркестровка и масштабирование: управление выпуском программного обеспечения для отдельного узла Docker или для всего кластера.

Основное преимущество контейнеров Docker - это возможность упаковать все зависимости и ресурсы, необходимые программе, в легко распространяемой форме.

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

Докер также надежен и самокорректируется. Когда экземпляр умирает, Docker автоматически создает новые копии вашего приложения, чтобы избежать падения производства.

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

Docker хорошо взаимодействует с Rails, используя предварительно упакованные, легко загружаемые версии других технологий, часто используемых с Rails, таких как Redis, MySQL, Postgres или Node.

Что такое Rails?

Ruby on Rails - это серверная платформа приложений модели MVC, используемая для разработки структур для веб-приложений. Rails отдает приоритет быстрой разработке приложений с инновационными функциями, позволяющими экономить время, такими как бесшовное создание таблиц, миграция таблиц и формирование шаблонов представлений.

Rails отличается от других фреймворков, потому что он разработан с использованием парадигмы «Соглашение по конфигурации» (CoC). Rails достигает этого с помощью очень упрямого синтаксиса, что означает, что существует набор «правильных способов» для создания приложений Rails. Конструкция Rails с помощью CoC помогает сократить количество решений, которые нужно принимать разработчикам, что в целом ускоряет процесс веб-приложения.

Основные особенности Rails:

  • Автоматическое тестирование: Rails предоставляет встроенное тестирование, поэтому тестовые примеры легче писать и выполнять.
  • Создание шаблонов. Это позволяет легко создавать модели, управляющие данными, представления, обеспечивающие взаимодействие пользователя с данными, и контроллеры, управляющие взаимодействием модели и представления.
  • Active Record: Rails исходит из того, что вы должны обеспечить логику доступа к данным как часть объекта, чтобы обучать пользователей тому, как читать и писать в базу данных. Объекты несут постоянные данные и поведение, которое работает с этими данными.
  • Сообщество Rails: у Rails очень активное сообщество, которое регулярно вносит исправления в продукты и обновления от разработчиков.
  • Соглашение важнее конфигурации: Rails устанавливает правильный способ создания приложений, которые подходят для большинства случаев использования, что более важно, чем создание параметров конфигурации для всего. Фреймворк принимает решения за вас, чтобы повысить производительность.

Зачем использовать Docker с Rails?

Вы можете объединить преимущества Docker и Rails, запустив свои приложения Rails в контейнерах Docker.

Используя Rails, вы сохраняете удобную среду CoC и все инновационные инструменты для быстрой сборки приложений. Из Docker вы можете применять самокорректирующееся масштабирование и простоту распространения с помощью изолированных контейнеров Docker.

Когда вы упаковываете Rails с помощью Docker, вы получаете портативную и детерминированную среду разработки Rails, которую можно создавать где угодно и когда угодно.

Посмотрите, как легко мы можем объединить Rails с Docker.

Сначала мы создаем Dockerfile, который определяет наше приложение Ruby:

FROM ruby:2.7 
RUN apt-get update -yqq 
RUN apt-get install -yqq --no-install-recommends nodejs 
COPY myapp /usr/src/app/ 
WORKDIR /usr/src/app 
RUN bundle install

Затем мы создаем наши контейнеры из любого настраиваемого изображения, например railsapp, с помощью терминала. К концу у нас есть полностью изолированный экземпляр нашего приложения rails, который мы можем распространять:

docker build -t railsapp .
$ docker run -p 3000:3000 railsapp \ 
bin/rails s -b 0.0.0.0

Примеры использования Docker с Rails

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

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

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

Наконец, Docker идеально подходит для приложений Rails, которые имеют множество зависимостей и других необходимых технологий. Подключение к внешним технологиям, таким как PostgreSQL или MS SQL, может быть проблемой в Rails. Docker исправляет это, позволяя вам установить зависимости и соединения в одном файле и упаковать его для загрузки как одного.

Основные понятия и термины, которые необходимо знать

  • Образ Docker: файл, содержащий схему для создания контейнера для запуска в Docker. По сути, это список того, что должен содержать любой контейнер этого типа.
  • Контейнер Docker: экземпляр образа во время выполнения. Каждый контейнер состоит из образа Docker, среды выполнения и стандартного набора инструкций.
  • Dockerfile: файл, содержащий все команды для создания образа, которые вы должны выполнить вручную. Это позволяет Docker автоматически создавать образы.
  • Docker Compose: встроенный инструмент Docker, используемый для определения и запуска более сложных приложений Docker. Его главное преимущество - возможность определять многоконтейнерные приложения в одном файле, который можно запускать с помощью одной команды.
  • Dockerize / Dockerized: упаковка приложения с помощью Docker. Он часто используется для описания результатов после интеграции приложения с Docker.
  • Ruby Script: команды на языке программирования Ruby, используемые для создания динамических компонентов приложения.
  • Rails Server: локальный веб-сервер, доступный в вашем браузере по адресу http://localhost:3000. Используется для тестирования приложений без выделенного сервера.
  • Rails Gemfile. Файл, используемый для описания зависимостей файлов в программе Ruby. Вы можете добавить эти файлы в контейнер, чтобы легко добавлять зависимости в ваше приложение.

Начните с Docker и Rails

Теперь, когда вы лучше понимаете, как связаны эти инструменты, пора приступить к работе. Лучший способ увидеть преимущества этих инструментов - использовать их вместе в собственном проекте.

Следующие темы для изучения:

  • Кэширование сборки изображения
  • Монтирование тома с помощью Docker Compose
  • Добавление Redis в ваше приложение Rails
  • Развертывание в облаке с помощью Rail

Удачного обучения!