15
19

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.

Railsをdocker-composeで動かす

Last updated at Posted at 2018-01-08

フロントエンドやマークアップ担当の人が中々バックエンドが動く環境作ってくれなかったので導入しました。環境作ってくれないと確認やら何やらでいちいちこっちに聞きに来るので、時間が無くなったりフロントエンドのコーディングまでついでにやらきゃならなかったりするので。

##前提
dockerについての基本的なことは省略します。

ちなみに複数環境扱うような受託開発系エンジニアはdocker使うとものすごい楽です。
自分はrailsやlaravelやnodejsやらを各プロジェクトで切り替えてました。プロジェクト毎にmysqlやpostgres切り替えたり、同じlaravelのプロジェクトでもphpのバージョン違ったりmysqlのバージョン違ったりして死にそうになります。
phpenvやrbenvなどで管理できるとは言っても限界があったので。。。

それがdocker-compose使うと、compose用の設定ファイルがあるところでdocker-compose upするだけでよくなる。
涙が出ました。

##やりたいこと
既存のRailsプロジェクトをdocker-composeで動くようにしたい。
そのための設定メモ。
laravelにはlaradockというのがあったんですが、railsには良さげなのがなかったです。
必要で色々調べたんですが、(半年くらい前は)中々日本語の記事が無かったので各項目が何を指すか残しておこうと思います。

##ディレクトリ構成
-myproject/ #プロジェクトのルートディレクトリ
- docker-compose.yml
- Dockerfile-rails
- Gemfile
- Gemfile.lock
~~~
railsのソースコード

#####・docker-compose.yml
composeでまとめてコンテナを起動するための設定ファイル

#####・Dockerfile-rails
rails用イメージ作成に使う

##Dockerfileを作る


    FROM ruby:2.3.1
    RUN apt-get update && \
        apt-get install -y mysql-client nodejs --no-install-recommends && \
        rm -rf /var/lib/apt/lists/*
    
    RUN mkdir /myproject
    
    WORKDIR /myproject
    
    ADD Gemfile /myproject/Gemfile
    ADD Gemfile.lock /myproject/Gemfile.lock
    
    RUN gem install bundler
    RUN bundle install
    
    ADD . /myproject

railsのイメージを作ってます。

railsのバージョン変えたい場合は
FROM ruby:2.3.1 のバージョンを変更。

RUN apt-get〜 は作成するrails用イメージに必要なものをインストール。他に必要があればここに書き足す。

RUN mkdir /myproject 以下はディレクトリを作成した後
同階層にあるGemfileをdockerのイメージに移動。
イメージにGemをインストールしている。

##docker-composeの設定
設定ファイルの中身。各項目の説明はコメントで

docker-compose.yml
#docker-composeのバージョン
version: '2'
    
#ここにdocker-composeコマンドで起動するコンテナとその設定を記載する
services:
    
  #コンテナ名
  db:
    #以下、コンテナ内で使用する設定
     
    #使用するdocker image
    image: mysql:5.6
    
    #環境変数
    environment:
      - MYSQL_DATABASE=xxxxx
      - MYSQL_USER= xxxxx
      - MYSQL_PASSWORD= xxxxx
      - MYSQL_ROOT_PASSWORD= xxxxx
    
    #コンテナがマウントするディレクトリ
    #mysqlのファイルをローカルディレクトリに保存するようにしている
    #これを記載しないとコンテナを落とす度にデータが初期化されるので注意
    volumes:
	  - ./mysql/volumes:/var/lib/mysql
	  - ./mysql/conf:/etc/mysql/conf.d
    
    #使用するポート番号
    ports:
      - "3306:3306"
      
  #コンテナ名(rails用のコンテナ)
  application:
    #既存のdocker imageではなく、dockerfileを元にbuildする
    build:
      context: .
      #imageをbuildする際に使用するdockerfile
      dockerfile: Dockerfile-rails
      
    environment:
      RAILS_ENV: development

    #起動時に実行するコマンド
    #ここでは起動時にrailsサーバーを立ち上げている      
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    
    #dockerと同階層に既存のrailsプロジェクトが展開されているため、それを参照する設定
    volumes:
      - .:/application
    ports:
      - "3000:3000"

	#このコンテナが依存するコンテナ
	#railsでmysqlを使用するためdbコンテナを参照する
    depends_on:
      - db

##起動する
docker-compose.ymlがあるところで
docker-compose up -d

##終了する
docker-compose.ymlがあるところで
docker-compose down

##終わり
以上、各種設定項目のメモでした。
他の環境でもymlの項目の値や、dockerfileをいじれば対応できそう。

15
19
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
15
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?