Elvi Digital

Создание нового Rails проекта с использованием Docker

Начинается все не с создания Rails проекта, как можно было бы ожидать, а с создания контейнера для него при помощи Docker и Docker Composer.

Установка Docker

Устанавливаем Docker (если он не был установлен ранее). Ниже представлен вариант установки для Linux, к остальным вариантам отправляю на сайт Docker.

$ wget -qO- https://get.docker.com/ | sh

Проверяем успешность установки:

$ docker -v

Добавляем себя в группу docker:

$ sudo usermod -aG docker <имя_пользователя>

Установка Docker Compose

Для упрощения рутинных операций мы будем использовать Docker Compose (на данный момент нельзя использовать под Windows). Устанавливаем его самый простым способом и проверяем успешность установки:

$ sudo apt-get -y install python-pip
$ sudo pip install docker-compose
$ docker-compose --version

Создание Rails приложения

Создать папку приложения. В ней создать Gemfile (2 строки) и пустой Gemfile.lock. Содержимое Gemfile только указывает версию Rails, которую мы собираемся использовать (к примеру новую версию Rails 5):

source 'https://rubygems.org'
gem 'rails', '>= 5.0.0.beta1', '< 5.1'

Создать Dockerfile

Прежде всего указываем, какой образ будем использовать в качестве базового (c Docker Hub). В случае с Rails 5 нужно использовать образ, который поддерживает минимально Ruby версии 2.3. Далее по коду:

FROM ruby:2.3
        
# Задаем имя проекта
ENV APP_NAME <имя проекта>

# Устанавливаем базовые пакеты
RUN apt-get update -qq && apt-get install -y build-essential

# Для работы с Postgres
RUN apt-get install -y libpq-dev

# Для использования Nokogiri
RUN apt-get install -y libxml2-dev libxslt1-dev

# Для Capybara-webkit
RUN apt-get install -y libqt4-webkit libqt4-dev xvfb

# Для JS runtime
RUN apt-get install -y nodejs

# Создаем папку проекта и устанавливаем ее в качестве рабочей
RUN mkdir /$APP_NAME
WORKDIR /$APP_NAME

# Копируем в созданную папку Gemfile'ы и запускаем bundle
ADD Gemfile /$APP_NAME/Gemfile
ADD Gemfile.lock /$APP_NAME/Gemfile.lock
RUN bundle install
ADD . /$APP_NAME

После отрабатывания этого файла будут установлены все необходимые пакеты, будет создана папка проекта и установлена Rails.

Создать docker-compose.yml

С помощью Docker Compose мы будем создавать контейнеры (отдельно для Postgres и Rails приложения), создавать Rails проект и сразу же запускать rails-сервер. Содержимое файла docker-compose.yml:

db:
  image: postgres
web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/demodexcomplexru
  ports:
    - "3000:3000"
  links:
    - db

Запуск создания контейнера и приложения

Создаем контейнер, запускаем команду на создание нового Rails приложения (пропуская установку всех гемов):

$ docker-compose run web rails new . 
  -T --force --database=postgresql 
  --skip-bundle

Поскольку Docker работает от root, то и приложение создается от имени пользователя root. Меняем владельца:

$ sudo chown -R $USER:$USER .

Запускаем заново сборку контейнера, который и запускает bundler и устанавливает все необходимые гемы:

$ docker-compose build

Для подключения к базе в другом контейнере правим config/database.yml:

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db

test:
  <<: *default
  database: demodexcomplexru_test

Запускаем приложение (контейнер приложения)

$ docker-compose up

Создаем базу данных (в другом терминале)

$ docker-compose run web rake db:create

Проверяем работу приложения в браузере – http://0.0.0.0:3000.

5 / 5 ( 1 голос )