LoginSignup
8
8

More than 5 years have passed since last update.

Docker Compose - クイックスタート・ガイド:Compose と Rails

Posted at

Docker Compose - クイックスタート・ガイド:Compose と Rails

原文:Quickstart Guide: Compose and Rails
https://docs.docker.com/compose/rails/

このクイックスタート・ガイドでは、Compose を使って、どのようにシンプルな Rails/PostgreSQLアプリケーションをセットアップ・実行するかを示します。あらかじめ、Compose のインストールが必要です。

プロジェクトの定義

アプリケーションを構築するため、3つのファイルをセットアップしていきます。まず、アプリケーションを実行するにあたり、 Docker コンテナ中には依存関係のある全てが必要になります。そのため、コンテナ中で何が必要なのかを、正確に定義しなくてはいけません。この定義に使うのが Dockerfile と呼ばれます。まず第一に、Dockerfile は次のように構成されます:

FROM ruby:2.2.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
RUN bundle install
ADD . /myap

この Dockerfile はイメージを定義するものです。アプリケーションを含むコンテナを構築する時、そこには Ruby と Bundler だけでなく、そこに依存関係のある全てが含まれます。Dockerfile の書き方は、Docker user guideDockerfile reference をお読みください。

次に、Rails を読み込むだけの bootstrap Gemfile を作成します。これは rails new によって上書きされます。

source 'https://rubygems.org'
gem 'rails', '4.2.0'

最後に docker-compose.yml というファイルに、これら全てを結び付けます。アプリケーション構成するサービス(ここでは、ウェブサーバとデータベースです)を定義します。構成とは、使用する Docker イメージ(データベースは既製の PostgreSQL イメージを使い、ウェブアプリケーションは現在のディレクトリで構築します)と、必要であればどこをリンクするかや、ウェブアプリケーションの公開用ポートを記述します。

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

プロジェクトのビルド

これで Django プロジェクトを docker-compose run で開始できます。

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

まずはじめに、Compose は Dockerfile を使って web サービスのイメージを構築します。それからコンテナ内で rails new を実行するためにイメージを使います。完了すると、新しいアプリケーションが作成されます:

$ ls
Dockerfile   app          docker-compose.yml      tmp
Gemfile      bin          lib          vendor
Gemfile.lock config       log
README.rdoc  config.ru    public
Rakefile     db           test

新しい Gemfiletherubyracer をアンコメントし、Javascript ランタイムを入手します。

gem 'therubyracer', platforms: :ruby

これで新しい Gemfile ができましたので、イメージを再構築する必要があります( Dockerfile 自身の変更時にも、再構築を行います)。

$ docker-compose build

データベースへの接続

アプリケーションが実行可能になりましたが、まだ足りないものがあります。デフォルトでは、データベースは localhost で実行すると見なされます。そのため、db コンテナに指示しなくてはいけません。そのため、postgres イメージにデフォルトで設定されてる database と username を変更する必要があります。

新しく database.yml ファイルを作成して開きます。内容を次のようにします:

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

test:
  <<: *default
  database: myapp_test

これでアプリケーションを起動できます:

$ docker-compose up

全てう上手くいけば、PostgreSQL の出力が見え、数秒後には次のような繰り返しが続きます:

myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick 1.3.1
myapp_web_1 | [2014-01-17 17:16:29] INFO  ruby 2.2.0 (2014-12-25) [x86_64-linux-gnu]
myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick::HTTPServer#start: pid=1 port=3000

最後に、データベースを作成する必要があります。別のターミナルから、次のように実行します:

$ docker-compose run web rake db:create

以上です。これで Docker デーモンのポート 3000 でアプリケーションが動作します( Boot2docker を使っている場合は、boot2docker ip で IP アドレスが分かります)。

8
8
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
8
8