LoginSignup
2
0

railsアプリをDocker化する

Posted at

はじめに

チーム開発において重宝するDocker、Docker-composeを用いると
メンバー間で同じ実行環境をスムーズに用意できます。
今回railsアプリを例に実際にDocker化して他の方が簡単にアプリの実行環境を
用意できるようにしていきます。

手順

まずアプリのコード一式を保存したディレクトリ直下に以下のファイルを
新たに用意してください。

  • Dockerfile
  • docker-compose.yml

今回アプリをDocker化するにあたって以上の二つのファイルを使っていきます。
DockerfileのみでもDocker化自体は可能です。
ですがdocker-compose.ymlはDocker-composeを導入するためのファイルで
Docker-composeを使用することによってより簡単にDocker化を実現できます。
それでは各ファイルに必要事項を記載していきます。

Dockerfile

まずDockerfileを以下のように記載してください。

FROM ruby:latest
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /rails-docker
ADD Gemfile Gemfile.lock /rails-docker/
RUN bundle install
ADD . /rails-docker
  • FROM ruby:latest→ベースイメージを指定
  • RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs→パッケージリストを更新して必要なパッケージをインストール
  • WORKDIR /rails-docker→コンテナ内での作業ディレクトリを指定
  • ADD Gemfile Gemfile.lock /rails-docker/→指定したホスト内のファイルをコンテナ内にも作成。
  • RUN bundle install→Gemfileに記載されたGemをインストール
  • ADD . /rails-docker→アプリのディレクトリ直下のファイルやディレクトリをコンテナに作成

docker-compose.yml

次にdocker-compose.ymlを以下のように記載してください。

version: '3'
services:
  db:
    image: postgres:12
    environment:
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/rails-docker
    ports:
      - "3000:3000"
    depends_on:
      - db
  • version: '3'→Docker-composeのバージョンを指定。現状は3で問題なし。
  • services:→これ以降に処理の内容を記載
  • db:DB用のコンテナを用意
  • image: postgres:12バージョン12のPostgresSQLのイメージを用意
  • environment:POSTGRES_PASSWORD: password→コンテナ内の環境変数を設定
  • web:→アプリ用のコンテナを用意
  • build: .→ビルドコンテキストを指定
  • command: bundle exec rails s -p 3000 -b '0.0.0.0'→コンテナ内で記載したコマンドを実行
  • volumes:- .:/rails-docker→指定したホストのディレクトリを指定したコンテナのディレクトリへマウントする。ファイルやディレクトリへの変更は共有される。
  • ports:- "3000:3000"→ホストとコンテナのポート番号を設定
  • depends_on: - db→コンテナ間の依存関係を設定。今回はDBが起動した後にアプリが起動する。

database.yml

今回DBにPostgreSQLを使用しているのでdatabase.ymlへの一部変更が必要です。
以下のようになります。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

コマンド入力

ファイルへの記載が完了したら最後にコマンドを実行して
コンテナの作成と起動をしていきます。
以下の順でコマンドを入力してください。

イメージ作成

docker-compose build

コンテナ作成、起動

docker-compose up

DB作成

docker-compose run web rails db:create

DB更新

docker-compose run web rails db:create

以上のコマンド入力が完了したらhttp://0.0.0.0:3000
へアクセスしてアプリの起動が成功しているかを確認してください。

最後に

以上、railsアプリをDocker化する手順についての説明になりました。
web開発の現場では必須の知識になりますのでぜひ使ってみてください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0