DockerにRuby on Railsをインストールする方法

Docker

はい、こんばんは。

ついに平成から令和へと元号が変わりました。平成生まれとしては寂しい限りですが、新たな時代でもアウトプット頑張って行きます。(最近サボりがちなのは内緒)

docker-composeを使ってRuby on Railsの環境構築

まずは作業用のディレクトリを作成する

mkdir railsproject #ディレクトリを新規作成
cd railsproject #作成したディレクトリに移動

※docker-composeを使用する場合、docker-compose.ymlが置いてあるディレクトリがコンテナ名やボリューム名の接頭辞として使われるので、ディレクトリ名には注意すること。具体的には、プロジェクト名でディレクトリを作成すると良い。

Dockerfileを作成

先ほど作成したディレクトリ内でDockerfileを作成する。お好きなエディタで作成してもらったら良い。Dockerはインデントにうるさいので、自分が使い慣れているエディタを使いことをオススメする。

ちなみに私はVScodeを使っているので、そちらから作成させてもらった。

railsproject/Dockerfile

FROM ruby:2.4.5 #ruby2.4.5の実行環境を指定。(他のバージョンでも良い)
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs #apt-get updateでrailsに必要なパッケージをインストール
RUN mkdir /myapp #プロジェクト用のディレクトリを作成
WORKDIR /myapp #workingディレクトリに設定
COPY Gemfile /myapp/Gemfile #Gemfileをプロジェクト内にコピー
COPY Gemfile.lock /myapp/Gemfile.lock #Gemfile.lockをコピー
RUN bundle install #bundle installを実行、Gemのインストールを行う
COPY . /myapp

Gemfile, Gemfile.lockの作成

railsproject/Gemfile

source 'https://rubygems.org'
gem 'rails', '5.0.0.1' #railsのバージョン指定
railsproject/Gemfile.lock

#新規ファイルを作成します。
#空で置いておきます。コマンドを事項すると自動的に入って行きます。

現在の状態

railsproject

Dockerfile Gemfile Gemfile.lock

上記3つのファイルがある状態です。

docker-compose.ymlの作成

railsproject
#新規ファイル作成
version: '3'
services: #2つの記述があるため、2つのイメージを起動するという想定
  db:
    image: postgres #postgressqlを使用する。
  web:
    build: . #dockerfileからイメージをビルド
    command: bundle exec rails s -p 3000 -b '0.0.0.0' #docker-compose実行時に実行されるコマンド
    volumes:
    - .:/myapp
    ports: #ポートの指定。localhost:3000で起動可能
    - "3000:3000"
    depends_on:
    - db

のようになります。ここで私もハマったのですが、インデントがずれるとエラーで前に進んでくれません。もしエラーになった場合は、インデントか、記述を疑うと良いかもです。

railsをインストールする

ここまでくれば、あとはコマンド一つ入力するのみです。

railsproject

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

DBにはpostgresqlを指定、–forceオプションを利用しているので、ファイルが存在する場合には上書きされます。

これで実行すると、railsがインストールされているはずです。

終わりに

令和一発目はdocker-composeを使ってrailsをインストールする一連の流れをアウトプットしました。Dockerhubのrailsページやネット上の記事を参考にしながら作成して行きましたので、詳しいところはまだまだ知らないなあということで、勉強が必要な分野であると感じました。まつぁ、チーム開発において必要不可欠な知識であるので、継続して勉強していこうかと思いました。

それでは。

コメント

タイトルとURLをコピーしました