こんにちは。
最近、電子書籍を読み始めて、住野よるさんの「君の膵臓をたべたい」を一気読みしていたせいで更新が遅くなりました。めっちゃ感動した・・・笑
前回の記事で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つとも落ちてくれます。
終わりに
とりえあずこれで簡単な開発環境の構築ができるようになったんじゃないかと思います。実際に現場で開発とかしたことないのでプロの方々から見ればツッコミどころ多いでしょうが、今回はこんな感じで終わりです。