16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerでRails + MySQLアプリを立ち上げる手順メモ

Last updated at Posted at 2016-01-16

前回Docker上でRailsアプリを立ち上げるところまでやってMySQL無いからエラー出るという所で終わっていましたが、今回はRailsコンテナとMySQLコンテナを関連付けて立ち上げてみたいと思います。

使用するimage

docker pullで落とすなりしてください
takashioshikawa/ruby-native-2.2.4
mysql:latest

MySQLコンテナ立ち上げ

mysql-containerという名前のコンテナを立ち上げます
docker run --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql

オプション解説
-d : バックグラウンドで起動
--name mysql-container : コンテナに名前を付ける
-p 3306:3306 : ポート指定 「外部から指定するポート:MySQLコンテナ内のポート」
-e MYSQL_ROOT_PASSWORD=root : 環境変数にMySQLのパスワードを指定

Railsコンテナ立ち上げ

rails-containerという名前のコンテナを立ち上げます
docker run --rm -it -p 9000:80 --name rails-container --link mysql-container:mysql-container takashioshikawa/ruby-native-2.2.4

オプション解説
--rm : コンテナを終了させた時に削除する
-it : コンテナにコマンドを入力出来るようにする
-p 9000:80 : ポート指定 「外部から指定するポート:内部ポート」
--name rails-container : コンテナに名前をつける
--link mysql-container:mysql-container : 外部のコンテナとの関連付け

Railsコンテナ内でアプリ作成

前回の内容と似てますが作成していきましょう。

まずはRailsアプリを作成するディレクトリ作成
mkdir /usr/src/rails-app
cd /usr/src/rails-app

rails-container内にMySQLがないとrails newで怒られるのでMySQLインストール
yum install -y mysql-devel

Gemfile作成
bundle init

Gemfile編集

source "https://rubygems.org"
gem "rails", "4.2.5"

bundleインストール
bundle install

Railsアプリ作成(MySQLが無いとここで怒られます)
bundle exec rails new rails-test -d mysql

cd rails-test

Gemfile編集

#ここがコメントアウトされてるので外す その他は最初と同じ
#gem 'therubyracer', platforms: :ruby

gem 'therubyracer', platforms: :ruby

database.yml編集
vim config/database.yml

database.yml
development:
  <<: *default
  database: rails-test_development
  url: mysql2://root:root@mysql-container:3306
  password: <%= ENV['MYSQL_ROOT_PASSWORD'] %>
  host:     <%= ENV['DB_PORT_3306_TCP_ADDR'] %>
  port:     <%= ENV['DB_PORT_3306_TCP_PORT'] %>

test:
  <<: *default
  database: rails-test_test
  url: mysql2://root:root@mysql-container:3306
  password: <%= ENV['MYSQL_ROOT_PASSWORD'] %>
  host:     <%= ENV['DB_PORT_3306_TCP_ADDR'] %>
  port:     <%= ENV['DB_PORT_3306_TCP_PORT'] %>

今回はdevelopmentとrake用にtestのurl, password, host, portを指定しています
urlで指定している
mysql2://root:root@mysql-container:3306

ユーザ:パスワード@コンテナ名:ポート
という形式
パスワードはMySQLコンテナ立ち上げるときに指定したやつ

bundleインストール
bundle install

DB作成
bundle exec rake db:create

必要なファイル生成
bundle exec rails g scaffold User name:string

DBマイグレート
bundle exec rake db:migrate

Rails実行
bundle exec rails s -b 0.0.0.0 -p 80

-b 0.0.0.0 : Railsコンテナ内でのアドレス(0.0.0.0は最初から外と繋がる)
-p 80 : ポート指定

ブラウザで確認

現在dockerのrailsアプリが立ち上がっていると思うのでMacのChromeから見てみましょう

アクセスするURLは
http://docker-machineのIP:rails-containerのポート
docker-machineのIPを確認したい場合は
docker-machine ip VM名
で確認できる

僕の場合
http://192.168.99.100:9000
だった

スクリーンショット 2016-01-16 22.19.33.png

Scaffoldで作成したUserにアクセスしてみる
http://192.168.99.100:9000/users

スクリーンショット 2016-01-16 22.16.15.png

出来てるっぽい

所感

dockerは1つのコンテナを素早く立ち上げたり消したりするのはかなり楽でいいけど、コンテナ間の連携しようとすると結構面倒くさい… 今回引っかかったのは--linkでどう繋がるのかイメージが付きにくかったのと、database.ymlにmysql-containerのurl載せないとrails sでMySQL無いぞと怒られ続けたのがツラかった :crying_cat_face:

docker composeキメれば後々気にしなくてもいいらしいのでそこも早く学びたい

今回はコンテナ内でrailsアプリから作成しているので実行環境だけを作りたい場合はDockerfileで必要なGemやmysqlが入るようにしてimageにしないといけないのでそこもやっておきたい

以上です。

参考
複雑な構成のrailsアプリをdockerで動かしたい場合はどうするべきか
Dockerの公式MySQLイメージの使い方を徹底的に解説するよ

16
17
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
16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?