ishikawa_pro's memorandum

情報学生の備忘録です.

Swift Docker AWS Delphi etc...色々やります。

Docker ComposeでRailsコンテナとPostgreSQLコンテナを管理

こんにちは。
最近、電子書籍を読み始めて、住野よるさんの「君の膵臓をたべたい」を一気読みしていたせいで更新が遅くなりました。めっちゃ感動した・・・笑
前回の記事でRailsコンテナとPostgreSQLコンテナをつないでみる部分を書きました。
ishikawa-pro.hatenablog.com
今回は、Docker Composeを使って2つのコンテナを簡単に管理できるようにしてみます。前回の続きを想定して行なっていますので、プロジェクトやDocker image は既に出来ている前提でいきます。

Docker Composeとは
設定ファイルにアプリケーションで利用するコンテナの構成情報を記述しておくことで、複数のコンテナを手動で操作したりせずに、アプリケーションの構築や管理をすることができます。

設定ファイルの作成
早速、設定ファイルの作成をしていきます。設定ファイルはdocker-compose.ymlという名前で作成します。

#docker-compose.yml
version: '2'

services:
  #postgreSQLコンテナの設定
  db:
    #imageを指定
    image: postgres9.3
    ports:
      - "5432:5432"
    #データを永続化させるためのボリュームコンテナを指定する。
    volumes_from:
      - container:postgres-data
    container_name: postgres
  web:
    image: test-app
    ports:
      - "3000:3000"
    #postgreSQLに接続するため、postgresqlのコンテナ名を記述
    links:
      #サービス名:エイリアス
      - db:postgres
    volumes:
      - "Railsプロジェクトのパス":/usr/src/engenius
    #環境変数
    environment:
      - TEST-APP_DATABASE_USERNAME=username #データベースのユーザー名
      - TEST-APP_DATABASE_PASSWORD=password #データベースのパスワード
    container_name: test-app
    stdin_open: true
    tty: true

config/railsプロジェクト内のdatabse.ymlの編集
railsプロジェクトのconfig/database.yml の設定をdocker-compose.ymlで記述した内容に変更します。

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  #docker-compose.ymlで設定した環境変数を入れる。
  username: <%= ENV['TEST-APP_DATABASE_USERNAME'] %>
  password: <%= ENV['TEST-APP_DATABASE_PASSWORD'] %>
  #docker-compose.ymlのlinksで書いたサービス名を入れる。
  host: db

以上で設定は終わりです。

アプリケーションの起動
それでは、アプリケーションを起動させます。データベースは既に出来ている前提です。docker-compose.ymlがあるディレクトリで以下のコマンドを叩きます。

$ docker-compose up -d

-d オプションをつけることで、バックグラウンドで実行されます。それではRailsコンテナに入ってサーバーを立ち上げてみましょう。(コンテナ立ち上がったらサーバーも起動するようにしてもいいと思います。)

$ docker exec -it test-app /bin/bash
$ rails s -b 0.0.0.0

これでアプリケーションが起動したはずです。http://localhost:3000にアクセスしていつもの画面が立ち上がれば成功です。コンテナを落とす場合は、

$ docker-compose down

で2つとも落ちてくれます。

終わりに
とりえあずこれで簡単な開発環境の構築ができるようになったんじゃないかと思います。実際に現場で開発とかしたことないのでプロの方々から見ればツッコミどころ多いでしょうが、今回はこんな感じで終わりです。

最近Rubyスクレイピングするコードを書いたので、次回はそこらへんを簡単に書いてみようかな。