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 guide と Dockerfile 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
新しい Gemfile
の therubyracer
をアンコメントし、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 アドレスが分かります)。